예제 #1
0
            public void OnUdpReceived(IDoubleServerClient client, BitBuffer buffer, ushort packetTimestamp)
            {
                NetworkServerClient serverClient = (NetworkServerClient)client.ExtraData;

                if (serverClient.TakeResetPacketTimestamp())
                {
                    serverClient.LastPacketTimestamp = packetTimestamp;
                }
                else if (!DoubleProtocol.IsPacketNewest(ref serverClient.LastPacketTimestamp, packetTimestamp))
                {
                    return;
                }

                byte[] bytes = buffer.ReadBytes();
                // ReSharper disable once ConvertToLocalFunction
                Action handler = () => {
                    if (_server != null)
                    {
                        _handlerBuffer.SetContents(bytes);
                        UdpHandler(serverClient, _handlerBuffer);
                    }
                };

                if (!NetworkUtils.SimulateNetworkConditions || NetworkUtils.IsLocal(serverClient.Id))
                {
                    UnityFixedDispatcher.InvokeNoDelay(handler);
                }
                else
                {
                    UnityFixedDispatcher.InvokeDelayed(NetworkUtils.SimulatedNetDelay, handler);
                }
            }
예제 #2
0
 public void OnLostConnection(IDoubleServerClient client, DoubleServer.ClientState state)
 {
     if (state == DoubleServer.ClientState.Authenticated)
     {
         UnityFixedDispatcher.InvokeNoDelay(() => {
             if (_server != null)
             {
                 NetworkServerClient serverClient = (NetworkServerClient)client.ExtraData;
                 lock (UdpPayloadLock) {                             //Don't let the TickingThread send before the client is deinitialized
                     _clients.Remove(serverClient);
                     DisconnectHandler(serverClient);
                 }
             }
         });
     }
 }
예제 #3
0
            public Action <BitBuffer> OnFullAuthentication(IDoubleServerClient client)
            {
                NetworkServerClient serverClient = (NetworkServerClient)client.ExtraData;

                serverClient.Initialize();
                UnityFixedDispatcher.InvokeNoDelay(() => {
                    if (_server != null)
                    {
                        lock (UdpPayloadLock) {                         //Don't let the TickingThread send before the client is initialized
                            _clients.Add(serverClient);
                            ConnectHandler(serverClient);
                        }
                    }
                });
                return(buffer => {
                    buffer.Write(serverClient.Id);
                    buffer.Write(NetworkUtils.GlobalBaseTimestamp);
                });
            }
예제 #4
0
            public void OnTcpReceived(IDoubleServerClient client, BitBuffer buffer)
            {
                if (buffer.TotalBitsLeft < 8)
                {
                    return;
                }

                byte packet = buffer.ReadByte();

                if (packet >= TcpHandlers.Length)
                {
                    return;
                }

                byte[] bytes = buffer.ReadBytes();
                NetworkServerClient serverClient = (NetworkServerClient)client.ExtraData;
                // ReSharper disable once ConvertToLocalFunction
                Action handler = () => {
                    if (_server != null)
                    {
                        OnPacketReceived action = TcpHandlers[packet];
                        if (action != null)
                        {
                            _handlerBuffer.SetContents(bytes);
                            action((NetworkServerClient)client.ExtraData, _handlerBuffer);
                        }
                    }
                };

                if (!NetworkUtils.SimulateNetworkConditions || NetworkUtils.IsLocal(serverClient.Id))
                {
                    UnityFixedDispatcher.InvokeNoDelay(handler);
                }
                else
                {
                    UnityFixedDispatcher.InvokeDelayed(NetworkUtils.SimulatedNetDelay, handler);
                }
            }