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);
            }
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
        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);
            }
        }