public void InitBuild(byte[] data) { if (data.Length > 0) { Reader.Add(data, 0, data.Length); } if (Information.Build(Reader, ClientSide)) { if (NetworkBase() is NetworkElementField field) { OnMessageParsed?.Invoke(field, Content(field)); } Information = null; Information = new Buffer(); byte[] r = Reader.ReadBytes((int)Reader.BytesAvailable); Reader.Dispose(); Reader = new BigEndianReader(); InitBuild(r); } }
/// <summary> /// Parses incoming message /// </summary> /// <param name="peer">Peer</param> /// <param name="json">JSON</param> public void ParseMessage(IPeer peer, string json) { if (peer == null) { throw new ArgumentNullException(nameof(peer)); } if (!peer.IsValid) { throw new ArgumentException("Peer is not valid.", nameof(peer)); } if (json == null) { throw new ArgumentNullException(nameof(json)); } T message = JsonConvert.DeserializeObject <T>(json); if ((message == null) || (message.MessageType != MessageType)) { OnMessageParseFailed?.Invoke(peer, MessageType, json); } if (message.IsValid) { OnMessageParsed?.Invoke(peer, message, json); } else { OnMessageValidationFailed?.Invoke(peer, message, json); } }
public override void InitBuild(MemoryStream stream) { MessageBuffer informations = Informations as MessageBuffer; if (stream.Length > 0) { Reader.Add(stream.ToArray(), 0, (int)stream.Length); } if (informations.Build(Reader, ClientSide)) { if (BotofuProtocolManager.Protocol[ProtocolKeyEnum.Messages, x => x.protocolID == informations.MessageId] is NetworkElement message) { IDataReader reader = new BigEndianReader(informations.Data); ProtocolJsonContent content = FromByte(null, message, reader); reader.Dispose(); OnMessageParsed?.Invoke(message, content); } Informations = null; Informations = new MessageBuffer(); stream.Close(); stream = new MemoryStream(Reader.ReadBytes((int)Reader.BytesAvailable)); Reader.Dispose(); Reader = null; Reader = new BigEndianReader(); InitBuild(stream); } }