6
6
using System . Reflection ;
7
7
using System . Security . Cryptography ;
8
8
9
- [ assembly: AssemblyVersion ( "1.1 .0.*" ) ]
9
+ [ assembly: AssemblyVersion ( "1.2 .0.*" ) ]
10
10
11
11
namespace DominionEnterprises . Mongo
12
12
{
@@ -310,7 +310,7 @@ public void Ack(BsonDocument message)
310
310
311
311
#region AckSend
312
312
/// <summary>
313
- /// Ack message and send payload to queue, atomically, with earliestGet as Now and 0.0 priority
313
+ /// Ack message and send payload to queue, atomically, with earliestGet as Now, 0.0 priority and new timestamp
314
314
/// </summary>
315
315
/// <param name="message">message to ack received from Get()</param>
316
316
/// <param name="payload">payload to send</param>
@@ -322,7 +322,7 @@ public void AckSend(BsonDocument message, BsonDocument payload)
322
322
}
323
323
324
324
/// <summary>
325
- /// Ack message and send payload to queue, atomically, with 0.0 priority
325
+ /// Ack message and send payload to queue, atomically, with 0.0 priority and new timestamp
326
326
/// </summary>
327
327
/// <param name="message">message to ack received from Get()</param>
328
328
/// <param name="payload">payload to send</param>
@@ -334,17 +334,32 @@ public void AckSend(BsonDocument message, BsonDocument payload, DateTime earlies
334
334
AckSend ( message , payload , earliestGet , 0.0 ) ;
335
335
}
336
336
337
+ /// <summary>
338
+ /// Ack message and send payload to queue, atomically, with new timestamp
339
+ /// </summary>
340
+ /// <param name="message">message to ack received from Get()</param>
341
+ /// <param name="payload">payload to send</param>
342
+ /// <param name="earliestGet">earliest instant that a call to Get() can return message</param>
343
+ /// <param name="priority">priority for order out of Get(). 0 is higher priority than 1</param>
344
+ /// <exception cref="ArgumentNullException">message or payload is null</exception>
345
+ /// <exception cref="ArgumentException">message id must be a BsonObjectId</exception>
346
+ public void AckSend ( BsonDocument message , BsonDocument payload , DateTime earliestGet , double priority )
347
+ {
348
+ AckSend ( message , payload , earliestGet , priority , true ) ;
349
+ }
350
+
337
351
/// <summary>
338
352
/// Ack message and send payload to queue, atomically.
339
353
/// </summary>
340
354
/// <param name="message">message to ack received from Get()</param>
341
355
/// <param name="payload">payload to send</param>
342
356
/// <param name="earliestGet">earliest instant that a call to Get() can return message</param>
343
357
/// <param name="priority">priority for order out of Get(). 0 is higher priority than 1</param>
358
+ /// <param name="newTimestamp">true to give the payload a new timestamp or false to use given message timestamp</param>
344
359
/// <exception cref="ArgumentNullException">message or payload is null</exception>
345
360
/// <exception cref="ArgumentException">message id must be a BsonObjectId</exception>
346
361
/// <exception cref="ArgumentException">priority was NaN</exception>
347
- public void AckSend ( BsonDocument message , BsonDocument payload , DateTime earliestGet , double priority )
362
+ public void AckSend ( BsonDocument message , BsonDocument payload , DateTime earliestGet , double priority , bool newTimestamp )
348
363
{
349
364
if ( message == null ) throw new ArgumentNullException ( "message" ) ;
350
365
if ( payload == null ) throw new ArgumentNullException ( "payload" ) ;
@@ -353,24 +368,25 @@ public void AckSend(BsonDocument message, BsonDocument payload, DateTime earlies
353
368
var messageId = message [ "id" ] ;
354
369
if ( messageId . GetType ( ) != typeof ( BsonObjectId ) ) throw new ArgumentException ( "message id must be a BsonObjectId" , "message" ) ;
355
370
356
- var newMessage = new UpdateDocument
371
+ var toSet = new BsonDocument
357
372
{
358
373
{ "payload" , payload } ,
359
374
{ "running" , false } ,
360
375
{ "resetTimestamp" , DateTime . MaxValue } ,
361
376
{ "earliestGet" , earliestGet } ,
362
377
{ "priority" , priority } ,
363
- { "created" , DateTime . UtcNow } ,
364
378
} ;
379
+ if ( newTimestamp )
380
+ toSet [ "created" ] = DateTime . UtcNow ;
365
381
366
382
//using upsert because if no documents found then the doc was removed (SHOULD ONLY HAPPEN BY SOMEONE MANUALLY) so we can just send
367
- collection . Update ( new QueryDocument ( "_id" , messageId ) , newMessage , UpdateFlags . Upsert ) ;
383
+ collection . Update ( new QueryDocument ( "_id" , messageId ) , new UpdateDocument ( "$set" , toSet ) , UpdateFlags . Upsert ) ;
368
384
}
369
385
#endregion
370
386
371
387
#region Requeue
372
388
/// <summary>
373
- /// Requeue message with earliestGet as Now and 0.0 priority. Same as AckSend() with the same message.
389
+ /// Requeue message with earliestGet as Now, 0.0 priority and new timestamp . Same as AckSend() with the same message.
374
390
/// </summary>
375
391
/// <param name="message">message</param>
376
392
/// <exception cref="ArgumentNullException">message is null</exception>
@@ -381,7 +397,7 @@ public void Requeue(BsonDocument message)
381
397
}
382
398
383
399
/// <summary>
384
- /// Requeue message with 0.0 priority. Same as AckSend() with the same message.
400
+ /// Requeue message with 0.0 priority and new timestamp . Same as AckSend() with the same message.
385
401
/// </summary>
386
402
/// <param name="message">message</param>
387
403
/// <param name="earliestGet">earliest instant that a call to Get() can return message</param>
@@ -392,22 +408,35 @@ public void Requeue(BsonDocument message, DateTime earliestGet)
392
408
Requeue ( message , earliestGet , 0.0 ) ;
393
409
}
394
410
411
+ /// <summary>
412
+ /// Requeue message with new timestamp. Same as AckSend() with the same message.
413
+ /// </summary>
414
+ /// <param name="message">message</param>
415
+ /// <param name="earliestGet">earliest instant that a call to Get() can return message</param>
416
+ /// <exception cref="ArgumentNullException">message is null</exception>
417
+ /// <exception cref="ArgumentException">message id must be a BsonObjectId</exception>
418
+ public void Requeue ( BsonDocument message , DateTime earliestGet , double priority )
419
+ {
420
+ Requeue ( message , earliestGet , priority , true ) ;
421
+ }
422
+
395
423
/// <summary>
396
424
/// Requeue message. Same as AckSend() with the same message.
397
425
/// </summary>
398
426
/// <param name="message">message</param>
399
427
/// <param name="earliestGet">earliest instant that a call to Get() can return message</param>
400
428
/// <param name="priority">priority for order out of Get(). 0 is higher priority than 1</param>
429
+ /// <param name="newTimestamp">true to give the payload a new timestamp or false to use given message timestamp</param>
401
430
/// <exception cref="ArgumentNullException">message is null</exception>
402
431
/// <exception cref="ArgumentException">message id must be a BsonObjectId</exception>
403
432
/// <exception cref="ArgumentException">priority was NaN</exception>
404
- public void Requeue ( BsonDocument message , DateTime earliestGet , double priority )
433
+ public void Requeue ( BsonDocument message , DateTime earliestGet , double priority , bool newTimestamp )
405
434
{
406
435
if ( message == null ) throw new ArgumentNullException ( "message" ) ;
407
436
408
437
var forRequeue = new BsonDocument ( message ) ;
409
438
forRequeue . Remove ( "id" ) ;
410
- AckSend ( message , forRequeue , earliestGet , priority ) ;
439
+ AckSend ( message , forRequeue , earliestGet , priority , newTimestamp ) ;
411
440
}
412
441
#endregion
413
442
0 commit comments