Guest User

Untitled

a guest
Jan 22nd, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. public class SmartMessageStore : IMessageStore
  2. {
  3. private readonly IMessageStore _store = new InProcessMessageStore();
  4.  
  5. public Task<IEnumerable<Message>> GetAll(string key)
  6. {
  7. lock (_store)
  8. {
  9. return _store.GetAll(key);
  10. }
  11. }
  12.  
  13. public Task<IEnumerable<Message>> GetAllSince(string key, long id)
  14. {
  15. return GetLastId().ContinueWith(t =>
  16. {
  17. lock (_store)
  18. {
  19. if (t.Result.HasValue)
  20. {
  21. if (id > t.Result.Value)
  22. {
  23. var recent = _store.GetAllSince(key, t.Result.Value - 1);
  24. var idOffset = id - t.Result.Value - 1;
  25. return recent.ContinueWith(messagesTask =>
  26. messagesTask.Result.Select(m => OffsetMessageId(m, idOffset))
  27. );
  28. }
  29. }
  30. return _store.GetAllSince(key, id);
  31. }
  32. }).Unwrap();
  33. }
  34.  
  35. Message OffsetMessageId(Message message, long idOffset)
  36. {
  37. return new Message(message.SignalKey, message.Id + idOffset, message.Value, message.Created);
  38. }
  39.  
  40. public Task<long?> GetLastId()
  41. {
  42. lock (_store)
  43. {
  44. return _store.GetLastId();
  45. }
  46. }
  47.  
  48. public Task Save(string key, object value)
  49. {
  50. lock (_store)
  51. {
  52. return _store.Save(key, value);
  53. }
  54. }
  55. }
Add Comment
Please, Sign In to add comment