TransferMessage.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using Vinno.IUS.Common.IO;
  3. using Vinno.IUS.Common.Log;
  4. using Vinno.IUS.Common.Network.Leaf;
  5. namespace Vinno.IUS.Common.Network.Transfer
  6. {
  7. public sealed class TransferMessage:DictionaryMessage
  8. {
  9. /// <summary>
  10. /// Gets the token of this transfer message.
  11. /// </summary>
  12. public TransferToken Token { get; }
  13. /// <summary>
  14. /// Gets the data of this transfer message.
  15. /// </summary>
  16. public Message Data { get; }
  17. public TransferMessage(TransferToken token, Message data) :
  18. base(SystemTags.TransferMessage)
  19. {
  20. Token = token;
  21. Data = data;
  22. var tokenIdMessage = new Message(SystemTags.TransferTokenId, new StringElement(Token.Id));
  23. AddMessage(tokenIdMessage);
  24. var dataBuffer = data.GetBuffer();
  25. var dataMessage = new Message(SystemTags.TransferData,new BufferElement(dataBuffer));
  26. AddMessage(dataMessage);
  27. }
  28. private TransferMessage(Message message) : base(message)
  29. {
  30. var tokenIdElement = GetElement<StringElement>(SystemTags.TransferTokenId);
  31. var tokenId = tokenIdElement.Value;
  32. Token = new TransferToken(tokenId);
  33. var dataElement = GetElement<BufferElement>(SystemTags.TransferData);
  34. Data = FromBuffer(dataElement.Value);
  35. }
  36. public static TransferMessage Convert(IBuffer buffer)
  37. {
  38. Message message = null;
  39. try
  40. {
  41. message = FromBuffer(buffer);
  42. }
  43. catch (Exception ex)
  44. {
  45. Logger.WriteLineError($"Get message from buffer failed:{ex}");
  46. }
  47. if (message != null)
  48. {
  49. if (message.Tag != SystemTags.TransferMessage)
  50. {
  51. return null;
  52. }
  53. TransferMessage transferMessage = null;
  54. try
  55. {
  56. transferMessage = new TransferMessage(message);
  57. }
  58. catch (Exception ex)
  59. {
  60. var tagDes = message.Element == null ? "null" : message.Element.TransferType.ToString();
  61. var messageDetail = message.Element?.ToString();
  62. Logger.WriteLineError($"Convert TransferMessage failed:{ex},Message Element:{tagDes}, Message:{messageDetail}");
  63. }
  64. return transferMessage;
  65. }
  66. return null;
  67. }
  68. }
  69. }