示例#1
0
        private void WriteHeader(PacketStream2 stream, EPacketProtoID protoID, byte protoParams)
        {
            byte protoIDOffset = (byte)((int)protoID << 4);

            stream.ResetByteIndex();
            stream.WriteBytes(protoIDOffset | protoParams);
        }
示例#2
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();
        }
示例#3
0
        ////////////////////////////////////////////////////////////////////////////////////

        private void __HeartBeat(Gear obj)
        {
            Log.traceClear();
            Log.trace(Utils.GetTime());

            PacketStream2 stream = client.packetStream;

            WriteHeader(stream, EPacketProtoID._00_HEART_BEAT, (byte)Utils.Random(15));
            stream.WriteStrings("Hello World");
            client.Send();
        }
示例#4
0
        public UnityServer(float ticksPerSecond = 10f, int port = -1, int dataStreamSize = -1, bool autoListens = true)
            : base(port, dataStreamSize, autoListens)
        {
            clientsUnity     = new UnityClients();
            clientsToForget  = new List <UnityClient>();
            packetStreamTemp = new PacketStream2();

            timeStarted = DateTime.Now;

            //Hook-up the events:
            this.OnNewClient          += OnNewUnityClient;
            this.OnReceivedFromClient += OnClientReceivedData;

            //Set the "ticker" for sending messages back at given intervals:
            clockTicker = new Clockwork().StartAutoUpdate(ticksPerSecond);
            clockTicker.AddListener(__ProcessClientMessages);
            clockTicker.AddGear("Unity Housekeeping").AddListener(__OnCheckClientsAlive);
        }
示例#5
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);
        }