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); } }
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); } } }); } }
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); }); }
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); } }