protected void OnUdpProtocolPeerEvent(UdpProtocolEvent evt, int queue) { OnUdpProtocolEvent(evt, QueueToPlayerHandle(queue)); switch (evt.EventType) { case UdpProtocolEvent.Type.Input: var inputEvt = evt as InputEvent; if (!localConnectStatus[queue].Disconnected) { int currentRemoteFrame = localConnectStatus[queue].LastFrame; int newRemoteFrame = inputEvt.Input.frame; Log($"currentRemoteFrame: {currentRemoteFrame} newRemoteFrame: {newRemoteFrame}"); Debug.Assert(currentRemoteFrame == -1 || newRemoteFrame == (currentRemoteFrame + 1)); GameInput input = inputEvt.Input; sync.AddRemoteInput(queue, ref input); // Notify the other endpoints which frame we received from a peer Log($"setting remote connect status for queue {queue} to {input.frame}"); localConnectStatus[queue].LastFrame = input.frame; } break; case UdpProtocolEvent.Type.Disconnected: DisconnectPlayer(QueueToPlayerHandle(queue)); break; } }
protected void OnUdpProtocolEvent(UdpProtocolEvent evt, int handle) { switch (evt.EventType) { case UdpProtocolEvent.Type.Connected: callbacks.OnConnected(handle); break; case UdpProtocolEvent.Type.Synchronizing: var syncEvent = evt as SynchronizingEvent; callbacks.OnSynchronizing(handle, syncEvent.Count, syncEvent.Total); break; case UdpProtocolEvent.Type.Synchronized: callbacks.OnSyncrhonized(handle); CheckInitialSync(); break; case UdpProtocolEvent.Type.NetworkInterrupted: var netEvent = evt as NetworkInterruptedEvent; callbacks.OnConnectionInterrupted(handle, netEvent.DisconnectTimeout); break; case UdpProtocolEvent.Type.NetworkResumed: callbacks.OnConnectionResumed(handle); break; } }
protected void LogEvent(string prefix, UdpProtocolEvent evt) { if (evt.EventType == UdpProtocolEvent.Type.Synchronized) { Log($"{prefix} (event: Syncrhonized)."); } }
protected void OnUdpProtocolSpectatorEvent(UdpProtocolEvent evt, int queue) { int handle = QueueToSpectatorHandle(queue); OnUdpProtocolPeerEvent(evt, handle); if (evt.EventType == UdpProtocolEvent.Type.Disconnected) { spectators[queue].Disconnect(); callbacks.OnDisconnected(handle); } }
public bool GetEvent(out UdpProtocolEvent evt) { if (eventQueue.IsEmpty) { evt = null; return(false); } evt = eventQueue.Front(); eventQueue.Pop(); return(true); }
protected void OnUdpProtocolEvent(UdpProtocolEvent evt) { switch (evt.EventType) { case UdpProtocolEvent.Type.Connected: callbacks.OnConnected(0); break; case UdpProtocolEvent.Type.Synchronizing: var syncEvt = evt as SynchronizingEvent; callbacks.OnSynchronizing(0, syncEvt.Count, syncEvt.Total); break; case UdpProtocolEvent.Type.Synchronized: if (isSynchronizing) { callbacks.OnSyncrhonized(0); callbacks.OnRunning(); isSynchronizing = false; } break; case UdpProtocolEvent.Type.NetworkInterrupted: var netEvt = evt as NetworkInterruptedEvent; callbacks.OnConnectionInterrupted(0, netEvt.DisconnectTimeout); break; case UdpProtocolEvent.Type.NetworkResumed: callbacks.OnConnectionResumed(0); break; case UdpProtocolEvent.Type.Disconnected: callbacks.OnDisconnected(0); break; case UdpProtocolEvent.Type.Input: var inputEvt = evt as InputEvent; host.SetLocalFrameNumber(inputEvt.Input.frame); host.SendInputAck(); inputs[inputEvt.Input.frame % SpectatorFrameBufferSize] = inputEvt.Input; break; } }
protected void QueueEvent(UdpProtocolEvent evt) { LogEvent("Queuing event", evt); eventQueue.Push(evt); }