@@ -3,10 +3,9 @@ use crate::session::event::AwaitingActiveSessionResponse;
33use crate :: transport:: writer:: WriterRef ;
44use hotfix_message:: message:: Message ;
55use std:: collections:: VecDeque ;
6- use std:: pin:: Pin ;
76use std:: time:: Duration ;
87use tokio:: sync:: oneshot;
9- use tokio:: time:: { Instant , Sleep , sleep } ;
8+ use tokio:: time:: Instant ;
109use tracing:: { debug, error} ;
1110
1211const TEST_REQUEST_THRESHOLD : f64 = 1.2 ;
@@ -35,15 +34,12 @@ impl SessionState {
3534 }
3635
3736 pub fn new_active ( writer : WriterRef , heartbeat_interval : u64 ) -> Self {
38- let heartbeat_timer = Box :: pin ( sleep ( Duration :: from_secs ( heartbeat_interval) ) ) ;
39-
4037 let peer_interval = calculate_peer_interval ( heartbeat_interval) ;
41- let peer_timer = Box :: pin ( sleep ( Duration :: from_secs ( peer_interval) ) ) ;
4238
4339 Self :: Active ( ActiveState {
4440 writer,
45- heartbeat_timer ,
46- peer_timer ,
41+ heartbeat_deadline : Instant :: now ( ) + Duration :: from_secs ( heartbeat_interval ) ,
42+ peer_deadline : Instant :: now ( ) + Duration :: from_secs ( peer_interval ) ,
4743 } )
4844 }
4945
@@ -157,37 +153,35 @@ impl SessionState {
157153 }
158154 }
159155
160- pub fn heartbeat_timer ( & mut self ) -> Option < & mut Pin < Box < Sleep > > > {
156+ pub fn heartbeat_deadline ( & self ) -> Option < & Instant > {
161157 match self {
162158 Self :: Active ( ActiveState {
163- heartbeat_timer , ..
164- } ) => Some ( heartbeat_timer ) ,
159+ heartbeat_deadline , ..
160+ } ) => Some ( heartbeat_deadline ) ,
165161 _ => None ,
166162 }
167163 }
168164
169165 pub fn reset_heartbeat_timer ( & mut self , heartbeat_interval : u64 ) {
170166 if let Self :: Active ( ActiveState {
171- heartbeat_timer , ..
167+ heartbeat_deadline , ..
172168 } ) = self
173169 {
174- let deadline = Instant :: now ( ) + Duration :: from_secs ( heartbeat_interval) ;
175- heartbeat_timer. as_mut ( ) . reset ( deadline) ;
170+ * heartbeat_deadline = Instant :: now ( ) + Duration :: from_secs ( heartbeat_interval) ;
176171 }
177172 }
178173
179- pub fn peer_timer ( & mut self ) -> Option < & mut Pin < Box < Sleep > > > {
174+ pub fn peer_deadline ( & self ) -> Option < & Instant > {
180175 match self {
181- Self :: Active ( ActiveState { peer_timer , .. } ) => Some ( peer_timer ) ,
176+ Self :: Active ( ActiveState { peer_deadline , .. } ) => Some ( peer_deadline ) ,
182177 _ => None ,
183178 }
184179 }
185180
186181 pub fn reset_peer_timer ( & mut self , heartbeat_interval : u64 ) {
187- if let Self :: Active ( ActiveState { peer_timer , .. } ) = self {
182+ if let Self :: Active ( ActiveState { peer_deadline , .. } ) = self {
188183 let interval = calculate_peer_interval ( heartbeat_interval) ;
189- let deadline = Instant :: now ( ) + Duration :: from_secs ( interval) ;
190- peer_timer. as_mut ( ) . reset ( deadline) ;
184+ * peer_deadline = Instant :: now ( ) + Duration :: from_secs ( interval) ;
191185 }
192186 }
193187}
@@ -199,8 +193,8 @@ fn calculate_peer_interval(heartbeat_interval: u64) -> u64 {
199193
200194pub struct ActiveState {
201195 writer : WriterRef ,
202- heartbeat_timer : Pin < Box < Sleep > > ,
203- peer_timer : Pin < Box < Sleep > > ,
196+ heartbeat_deadline : Instant ,
197+ peer_deadline : Instant ,
204198}
205199
206200/// Session state we're in while processing messages we requested to be resent.
0 commit comments