public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment <byte> payload, out float receiveTime)
        {
            NetworkEventInfo info = networkEvents.Count > 0 ? networkEvents.Dequeue() : null;

            if (info != null)
            {
                if (info.error)
                {
                    payload     = default;
                    channel     = default;
                    clientId    = info.clientId;
                    receiveTime = Time.realtimeSinceStartup;

                    throw info.exception;
                }

                clientId    = info.clientId;
                channel     = (NetworkChannel)info.channel;
                payload     = info.payload;
                receiveTime = info.receiveTime;

                return(info.eventType);
            }

            payload     = default;
            channel     = default;
            clientId    = default;
            receiveTime = Time.realtimeSinceStartup;
            return(NetworkEvent.Nothing);
        }
        private void OnServerDataRecv(int clientId, ArraySegment <byte> payload, int channel)
        {
            if (channel == 3 && false)
            {
                if (payload.Array[0 + payload.Offset] == 0)
                {
                    payload.Array[0 + payload.Offset] = 0xff;
                    InternalSend(clientId, payload, (byte)channel);
                }
                else
                {
                    float sendTime = BitConverter.ToSingle(payload.Array, payload.Offset + 1);
                    pings[clientId] = (ulong)((Time.realtimeSinceStartup - sendTime) / 1000.0f);
                }

                return;
            }

            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Data;
            info.clientId    = (ulong)clientId;
            info.channel     = (byte)channel;
            info.payload     = payload;
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
Пример #3
0
        private void OnCommonDataRecv(ulong clientId, byte[] payload, int channel)
        {
            if (channel == 0 && false)
            {
                if (payload[0] == 0)
                {
                    payload[0] = 0xff;
                    SendInternal(clientId, new ArraySegment <byte>(payload), (byte)channel);
                }
                else
                {
                    float sendTime = BitConverter.ToSingle(payload, 1);
                    //pings[clientId] = (ulong)((Time.realtimeSinceStartup - sendTime) / 1000.0f);
                }

                return;
            }

            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Data;
            info.clientId    = clientId;
            info.channel     = (byte)channel;
            info.payload     = new ArraySegment <byte>(payload);
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
        private void OnServerDisconnect(int clientId)
        {
            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Disconnect;
            info.clientId    = (ulong)clientId;
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
        private void OnServerError(int clientId, Exception e)
        {
            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Nothing;
            info.clientId    = (ulong)clientId;
            info.error       = true;
            info.exception   = e;
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
        private void OnClientConnect()
        {
            connectedClients.Add((int)ServerClientId);

            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Connect;
            info.clientId    = ServerClientId;
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
Пример #7
0
        private void OnCommonConnect(ulong clientId)
        {
            connectedClients.Add(clientId);

            NetworkEventInfo info = new NetworkEventInfo();

            info.eventType   = NetworkEvent.Connect;
            info.clientId    = clientId;
            info.receiveTime = Time.realtimeSinceStartup;

            networkEvents.Enqueue(info);
        }
Пример #8
0
        public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment <byte> payload, out float receiveTime)
        {
            NetworkEventInfo info = networkEvents.Count > 0 ? networkEvents.Dequeue() : null;

            if (info != null)
            {
                if (info.error)
                {
                    payload     = default;
                    channel     = default;
                    clientId    = info.clientId;
                    receiveTime = Time.realtimeSinceStartup;

                    throw info.exception;
                }

                clientId    = info.clientId;
                channel     = (NetworkChannel)info.channel;
                payload     = info.payload;
                receiveTime = info.receiveTime;

                if (connectTask != null && client != null && client.isConnecting && clientId == ServerClientId &&
                    (info.eventType == NetworkEvent.Connect || info.eventType == NetworkEvent.Disconnect))
                {
                    Debug.Log("Connection with server:" + info.eventType);
                    if (info.eventType == NetworkEvent.Connect)
                    {
                        connectTask.Success = true;
                    }
                    if (info.eventType == NetworkEvent.Disconnect)
                    {
                        connectTask.Success = false;
                    }

                    connectTask.IsDone = true;
                    connectTask        = null;
                }

                return(info.eventType);
            }

            payload     = default;
            channel     = default;
            clientId    = default;
            receiveTime = Time.realtimeSinceStartup;
            return(NetworkEvent.Nothing);
        }