using System; using Vinno.IUS.Common.IO; using Vinno.IUS.Common.Log; using Vinno.IUS.Common.Network.Leaf; namespace Vinno.IUS.Common.Network.Transfer { public sealed class TransferMessage:DictionaryMessage { /// /// Gets the token of this transfer message. /// public TransferToken Token { get; } /// /// Gets the data of this transfer message. /// public Message Data { get; } public TransferMessage(TransferToken token, Message data) : base(SystemTags.TransferMessage) { Token = token; Data = data; var tokenIdMessage = new Message(SystemTags.TransferTokenId, new StringElement(Token.Id)); AddMessage(tokenIdMessage); var dataBuffer = data.GetBuffer(); var dataMessage = new Message(SystemTags.TransferData,new BufferElement(dataBuffer)); AddMessage(dataMessage); } private TransferMessage(Message message) : base(message) { var tokenIdElement = GetElement(SystemTags.TransferTokenId); var tokenId = tokenIdElement.Value; Token = new TransferToken(tokenId); var dataElement = GetElement(SystemTags.TransferData); Data = FromBuffer(dataElement.Value); } public static TransferMessage Convert(IBuffer buffer) { Message message = null; try { message = FromBuffer(buffer); } catch (Exception ex) { Logger.WriteLineError($"Get message from buffer failed:{ex}"); } if (message != null) { if (message.Tag != SystemTags.TransferMessage) { return null; } TransferMessage transferMessage = null; try { transferMessage = new TransferMessage(message); } catch (Exception ex) { var tagDes = message.Element == null ? "null" : message.Element.TransferType.ToString(); var messageDetail = message.Element?.ToString(); Logger.WriteLineError($"Convert TransferMessage failed:{ex},Message Element:{tagDes}, Message:{messageDetail}"); } return transferMessage; } return null; } } }