@@ -132,14 +132,21 @@ impl Default for SendQueueItem {
132132 }
133133}
134134
135- #[ derive( Default , Debug ) ]
135+ /// Queue for sending outgoing messages to a user for debounce
136+ ///
137+ /// The server maintains once queue per connection
138+ #[ derive( Debug ) ]
136139pub struct SendQueue {
140+ max_debounce_time : usize ,
137141 items : [ SendQueueItem ; 3 ] ,
138142}
139143
140144impl SendQueue {
141- pub fn new ( ) -> Self {
142- SendQueue :: default ( )
145+ pub fn new ( max_debounce_time : usize ) -> Self {
146+ SendQueue {
147+ max_debounce_time,
148+ items : Default :: default ( ) ,
149+ }
143150 }
144151
145152 fn item_mut ( & mut self , message : & PushMessage ) -> Option < & mut SendQueueItem > {
@@ -177,8 +184,8 @@ impl SendQueue {
177184 & mut self ,
178185 now : Instant ,
179186 connection_count : usize ,
180- max_debounce_time : usize ,
181187 ) -> impl Iterator < Item = PushMessage > + ' _ {
188+ let max_debounce_time = self . max_debounce_time ;
182189 self . items . iter_mut ( ) . filter_map ( move |item| {
183190 let debounce_time = item
184191 . message
@@ -201,7 +208,7 @@ impl SendQueue {
201208#[ test]
202209fn test_send_queue_100 ( ) {
203210 let base_time = Instant :: now ( ) ;
204- let mut queue = SendQueue :: new ( ) ;
211+ let mut queue = SendQueue :: new ( 15 ) ;
205212 queue. push ( PushMessage :: Activity , base_time) ;
206213 queue. push (
207214 PushMessage :: File ( UpdatedFiles :: Known ( vec ! [ 1 ] . into ( ) ) ) ,
@@ -216,7 +223,7 @@ fn test_send_queue_100() {
216223 assert_eq ! (
217224 Vec :: <PushMessage >:: new( ) ,
218225 queue
219- . drain( base_time + Duration :: from_millis( 20 ) , 100 , 15 )
226+ . drain( base_time + Duration :: from_millis( 20 ) , 100 )
220227 . collect:: <Vec <_>>( )
221228 ) ;
222229
@@ -227,7 +234,7 @@ fn test_send_queue_100() {
227234 PushMessage :: Activity
228235 ] ,
229236 queue
230- . drain( base_time + Duration :: from_millis( 200 ) , 100 , 15 )
237+ . drain( base_time + Duration :: from_millis( 200 ) , 100 )
231238 . collect:: <Vec <_>>( )
232239 ) ;
233240
@@ -243,31 +250,31 @@ fn test_send_queue_100() {
243250 assert_eq ! (
244251 Vec :: <PushMessage >:: new( ) ,
245252 queue
246- . drain( base_time + Duration :: from_secs( 10 ) , 100 , 15 )
253+ . drain( base_time + Duration :: from_secs( 10 ) , 100 )
247254 . collect:: <Vec <_>>( )
248255 ) ;
249256
250257 // after debounce time we get the merged messages from the timeframe
251258 assert_eq ! (
252259 vec![ PushMessage :: File ( UpdatedFiles :: Known ( vec![ 3 , 4 ] . into( ) ) ) ] ,
253260 queue
254- . drain( base_time + Duration :: from_secs( 70 ) , 100 , 15 )
261+ . drain( base_time + Duration :: from_secs( 70 ) , 100 )
255262 . collect:: <Vec <_>>( )
256263 ) ;
257264
258265 // nothing left
259266 assert_eq ! (
260267 Vec :: <PushMessage >:: new( ) ,
261268 queue
262- . drain( base_time + Duration :: from_secs( 300 ) , 100 , 15 )
269+ . drain( base_time + Duration :: from_secs( 300 ) , 100 )
263270 . collect:: <Vec <_>>( )
264271 ) ;
265272}
266273
267274#[ test]
268275fn test_send_queue_1 ( ) {
269276 let base_time = Instant :: now ( ) ;
270- let mut queue = SendQueue :: new ( ) ;
277+ let mut queue = SendQueue :: new ( 15 ) ;
271278 queue. push ( PushMessage :: Activity , base_time) ;
272279 queue. push (
273280 PushMessage :: File ( UpdatedFiles :: Known ( vec ! [ 1 ] . into ( ) ) ) ,
@@ -282,7 +289,7 @@ fn test_send_queue_1() {
282289 assert_eq ! (
283290 Vec :: <PushMessage >:: new( ) ,
284291 queue
285- . drain( base_time + Duration :: from_millis( 20 ) , 1 , 15 )
292+ . drain( base_time + Duration :: from_millis( 20 ) , 1 )
286293 . collect:: <Vec <_>>( )
287294 ) ;
288295
@@ -293,7 +300,7 @@ fn test_send_queue_1() {
293300 PushMessage :: Activity
294301 ] ,
295302 queue
296- . drain( base_time + Duration :: from_millis( 200 ) , 1 , 15 )
303+ . drain( base_time + Duration :: from_millis( 200 ) , 1 )
297304 . collect:: <Vec <_>>( )
298305 ) ;
299306
@@ -309,23 +316,23 @@ fn test_send_queue_1() {
309316 assert_eq ! (
310317 Vec :: <PushMessage >:: new( ) ,
311318 queue
312- . drain( base_time + Duration :: from_secs( 1 ) , 1 , 15 )
319+ . drain( base_time + Duration :: from_secs( 1 ) , 1 )
313320 . collect:: <Vec <_>>( )
314321 ) ;
315322
316323 // after debounce time we get the merged messages from the timeframe
317324 assert_eq ! (
318325 vec![ PushMessage :: File ( UpdatedFiles :: Known ( vec![ 3 , 4 ] . into( ) ) ) ] ,
319326 queue
320- . drain( base_time + Duration :: from_secs( 3 ) , 1 , 15 )
327+ . drain( base_time + Duration :: from_secs( 3 ) , 1 )
321328 . collect:: <Vec <_>>( )
322329 ) ;
323330
324331 // nothing left
325332 assert_eq ! (
326333 Vec :: <PushMessage >:: new( ) ,
327334 queue
328- . drain( base_time + Duration :: from_secs( 5 ) , 1 , 15 )
335+ . drain( base_time + Duration :: from_secs( 5 ) , 1 )
329336 . collect:: <Vec <_>>( )
330337 ) ;
331338}
0 commit comments