Exemple #1
0
        public void ProcessMessageQueue(MessageQueue2 queue, EClientMessageFlow flowType)
        {
            if (!queue.hasMessages)
            {
                return;
            }

            List <Message2> messages = queue.messages;
            PacketStream2   stream   = client.packetStream;
            Message2        msg;

            for (int m = 0; m < messages.Count; m++)
            {
                msg = messages[m];

                stream.ResetByteIndex();
                msg.bytes.CopyTo(stream.byteStream, 0);

                if (ProcessMessage(stream, msg, flowType))
                {
                    _messageDiscarded.Add(msg);
                }
            }

            while (_messageDiscarded.Count > 0)
            {
                messages.Remove(_messageDiscarded.Pop().Recycle());
            }

            _messageDiscarded.Clear();
        }
Exemple #2
0
        private bool ProcessMessage(PacketStream2 stream, Message2 msg, EClientMessageFlow flowType)
        {
            bool canDiscard = true;

            MessageQueue2 outgoing = _messageQueueOut;

            switch (flowType)
            {
            case EClientMessageFlow.INCOMING:
                byte protoHeader = stream.ReadByte();
                byte protoID     = (byte)(protoHeader >> 4);
                byte protoParams = (byte)(protoHeader & 0xf);

                EPacketProtoID PROTO_ID = (EPacketProtoID)protoID;

                switch (PROTO_ID)
                {
                case EPacketProtoID._00_HEART_BEAT:
                    string heartBeatMessage = stream.ReadString();
                    trace("heartBeatMessage: " + heartBeatMessage);

                    //Ouff... I think we need another temporary Stream / Bytes to write the pending outgoing messages!!!
                    //outgoing.AddBytes()
                    break;

                default:
                    trace("Unknown proto-ID: " + PROTO_ID);
                    break;
                }
                break;

            case EClientMessageFlow.OUTGOING:

                break;
            }

            return(canDiscard);
        }