SequenceMessage.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. namespace Vinno.IUS.Common.Network.Transfer
  3. {
  4. public sealed class SequenceMessage : DictionaryMessage, INoEncryptionMessage, ISystemMessage
  5. {
  6. /// <summary>
  7. /// Gets the index of the Message in this sequence
  8. /// </summary>
  9. public int Index { get; }
  10. /// <summary>
  11. /// Gets the total count of this sequence.
  12. /// </summary>
  13. public int Count { get; }
  14. /// <summary>
  15. /// Get the message of this time.
  16. /// </summary>
  17. public Message Data { get; }
  18. public SequenceMessage(int index, int count, Message data) :
  19. base(SystemTags.SequenceMessage)
  20. {
  21. Index = index;
  22. Count = count;
  23. Data = data;
  24. var countMessage = new Message(SystemTags.SequenceCount, new IntegerElement(Count));
  25. AddMessage(countMessage);
  26. var indexMessage = new Message(SystemTags.SequenceIndex, new IntegerElement(Index));
  27. AddMessage(indexMessage);
  28. if (TransferMessageHelper.IsDictionaryMessage(Data))
  29. {
  30. TransferMessageHelper.SetMessageProperties(Data);
  31. }
  32. var dataBuffer = data.GetBuffer();
  33. var dataMessage = new Message(SystemTags.SequenceData, new BufferElement(dataBuffer));
  34. AddMessage(dataMessage);
  35. }
  36. private SequenceMessage(Message message) : base(message)
  37. {
  38. Index = GetElement<IntegerElement>(SystemTags.SequenceIndex).Value;
  39. Count = GetElement<IntegerElement>(SystemTags.SequenceCount).Value;
  40. Data = FromBuffer(GetElement<BufferElement>(SystemTags.SequenceData).Value);
  41. }
  42. public static SequenceMessage Convert(Message message)
  43. {
  44. SequenceMessage sequenceMessage = null;
  45. try
  46. {
  47. if (message.Tag != SystemTags.SequenceMessage)
  48. {
  49. return null;
  50. }
  51. sequenceMessage = new SequenceMessage(message);
  52. }
  53. catch (Exception)
  54. {
  55. //DoNothing
  56. }
  57. return sequenceMessage;
  58. }
  59. }
  60. }