Example #1
0
        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;
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
 protected void LogEvent(string prefix, UdpProtocolEvent evt)
 {
     if (evt.EventType == UdpProtocolEvent.Type.Synchronized)
     {
         Log($"{prefix} (event: Syncrhonized).");
     }
 }
Example #4
0
        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);
            }
        }
Example #5
0
        public bool GetEvent(out UdpProtocolEvent evt)
        {
            if (eventQueue.IsEmpty)
            {
                evt = null;
                return(false);
            }

            evt = eventQueue.Front();
            eventQueue.Pop();
            return(true);
        }
Example #6
0
        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;
            }
        }
Example #7
0
 protected void QueueEvent(UdpProtocolEvent evt)
 {
     LogEvent("Queuing event", evt);
     eventQueue.Push(evt);
 }