Ejemplo n.º 1
0
        public void OnReceiveEvents(NetStream events, int containerFrameId)
        {
            if (!isStarted)
            {
                return;
            }
            for (int num = events.ReadFrameId(containerFrameId); num > 0; num = events.ReadFrameId(containerFrameId))
            {
                NetStream netStream = events.ReadStream(forceIndependent: true);
                if (num > lastReceivedEventFrame)
                {
                    lock (frames.framesLock)
                    {
                        frames.PushEvents(num, netStream);
                    }
                    lastReceivedEventFrame = num;
                }
                else
                {
                    netStream.Release();
                }
            }
            ReportEvenBits(events.position);
            int       writeFrameId = NetGame.instance.server.GetWriteFrameId(containerFrameId);
            NetStream netStream2   = NetGame.BeginMessage(NetMsgId.Event);

            try
            {
                netStream2.WriteNetId(netId);
                netStream2.WriteFrameId(lastReceivedEventFrame, writeFrameId);
                NetGame.instance.SendUnreliableToServer(netStream2, writeFrameId);
                ackBps.ReportBits(netStream2.position);
            }
            finally
            {
                if (netStream2 != null)
                {
                    netStream2 = netStream2.Release();
                }
            }
        }
Ejemplo n.º 2
0
        public void OnReceiveEventAck(NetHost client, NetStream stream, int containerFrameId)
        {
            int b = stream.ReadFrameId(containerFrameId);

            lock (remoteStates)
            {
                if (!client.isDyingForScopes)
                {
                    RemoteState remoteState = GetRemoteState(client.hostId);
                    remoteState.acknowledgedEvent = Mathf.Max(remoteState.acknowledgedEvent, b);
                }
            }
        }
Ejemplo n.º 3
0
        public void OnReceiveDelta(NetStream delta, int containerFrameId)
        {
            if (exitingLevel || !isStarted)
            {
                return;
            }
            int num  = delta.ReadFrameId(containerFrameId);
            int num2 = delta.ReadFrameId(containerFrameId);

            if (num > 0)
            {
                NetGame.instance.clientLatency.ReportLatency(num2 - num - 1 + lagReceiveToRender);
            }
            NetGame.instance.clientBuffer.ReportLatency(maxLagFrames);
            bool      flag = true;
            NetStream netStream;

            lock (frames.framesLock)
            {
                frames.DropOldStates(Mathf.Min(num, lastFrame0idx));
                lastBaseFrame = num;
                if (frames.TestForState(num2) != -1)
                {
                    frames.LimitHistory();
                    netStream = null;
                    flag      = false;
                }
                else
                {
                    netStream = frames.GetState(num, rewind: true);
                    if (netStream == null && num > 0)
                    {
                        return;
                    }
                }
            }
            if (flag)
            {
                NetStream netStream2 = NetStream.AllocStream();
                for (int i = 0; i < list.Count; i++)
                {
                    list[i].AddDelta(netStream, delta, netStream2);
                }
                ReportDeltaBits(delta.position);
                lock (frames.framesLock)
                {
                    frames.PushState(num2, netStream2);
                    frames.LimitHistory();
                }
            }
            int       writeFrameId = NetGame.instance.server.GetWriteFrameId(num2);
            NetStream netStream3   = NetGame.BeginMessage(NetMsgId.Delta);

            try
            {
                netStream3.WriteNetId(netId);
                netStream3.WriteFrameId(num2, writeFrameId);
                NetGame.instance.SendUnreliableToServer(netStream3, writeFrameId);
                ackBps.ReportBits(netStream3.position);
            }
            finally
            {
                if (netStream3 != null)
                {
                    netStream3 = netStream3.Release();
                }
            }
        }