コード例 #1
0
ファイル: NetScope.cs プロジェクト: chaojikugua/HumanFallFlat
        public int RenderState(NetFrames frames, int renderedFrame, float fraction)
        {
            bool      state;
            int       frame0id;
            float     mix;
            NetStream frame;
            NetStream frame2;

            lock (frames.framesLock)
            {
                state = frames.GetState(renderedFrame, fraction, out frame0id, out frame, out frame2, out mix);
            }
            try
            {
                if (!state)
                {
                    return(frame0id);
                }
                if (!(mix <= 0f))
                {
                    if (!(mix >= 1f))
                    {
                        frame.Seek(0);
                        frame2.Seek(0);
                        for (int i = 0; i < list.Count; i++)
                        {
                            list[i].ApplyLerpedState(frame, frame2, mix);
                        }
                        return(frame0id);
                    }
                    frame2.Seek(0);
                    for (int j = 0; j < list.Count; j++)
                    {
                        list[j].ApplyState(frame2);
                    }
                    return(frame0id);
                }
                frame.Seek(0);
                for (int k = 0; k < list.Count; k++)
                {
                    list[k].ApplyState(frame);
                }
                return(frame0id);
            }
            finally
            {
                if (frame != null)
                {
                    frame = frame.Release();
                }
                if (frame2 != null)
                {
                    frame2 = frame2.Release();
                }
            }
        }
コード例 #2
0
ファイル: NetScope.cs プロジェクト: chaojikugua/HumanFallFlat
        public void NotifyClients(int serverFrameId, int timeId, NetStream fullMaster, NetHost conn)
        {
            NetStream netStream = null;
            int       num       = -1;
            int       num2      = -1;

            try
            {
                lock (remoteStates)
                {
                    if (conn.isDyingForScopes)
                    {
                        Debug.LogFormat("Attempt to send delta to client (id {0}) that is disconnecting - caught and rejected", conn.hostId);
                        return;
                    }
                    RemoteState remoteState = GetRemoteState(conn.hostId);
                    num = remoteState.acknowledgedFrame;
                    if (num > 0)
                    {
                        lock (frames.framesLock)
                        {
                            NetStream state = frames.GetState(num);
                            if (state != null)
                            {
                                netStream = NetStream.AllocStream(state);
                            }
                        }
                    }
                    if (netStream != null)
                    {
                        remoteState.lastFullStateFrame  = -1;
                        remoteState.firstFullStateFrame = -1;
                    }
                    else
                    {
                        int num3 = (!(suppressThrottling <= 0f)) ? 1 : 30;
                        if (remoteState.lastFullStateFrame != -1 && timeId - remoteState.lastFullStateFrame < num3)
                        {
                            return;
                        }
                        remoteState.lastFullStateFrame = timeId;
                        if (remoteState.firstFullStateFrame == -1)
                        {
                            remoteState.firstFullStateFrame = serverFrameId;
                        }
                    }
                }
                num2 = conn.GetWriteFrameId(serverFrameId);
                bool flag = true;
                if (AllowSuspendCollect)
                {
                    flag = (netStream == null || serverFrameId != num);
                }
                if (flag)
                {
                    NetStream netStream2 = NetStream.AllocStream(fullMaster);
                    try
                    {
                        netStream2.Seek(0);
                        NetStream netStream3 = NetGame.BeginMessage(NetMsgId.Delta);
                        try
                        {
                            netStream3.WriteNetId(netId);
                            netStream3.WriteFrameId((netStream != null) ? num : 0, num2);
                            netStream3.WriteFrameId(serverFrameId, num2);
                            if (num > 0)
                            {
                                NetGame.instance.clientLatency.ReportLatency(serverFrameId - num - 1);
                            }
                            for (int i = 0; i < list.Count; i++)
                            {
                                list[i].CalculateDelta(netStream, netStream2, netStream3);
                            }
                            NetGame.instance.SendUnreliable(conn, netStream3, num2);
                            ReportDeltaBits(netStream3.position);
                        }
                        finally
                        {
                            if (netStream3 != null)
                            {
                                netStream3 = netStream3.Release();
                            }
                        }
                    }
                    finally
                    {
                        if (netStream2 != null)
                        {
                            netStream2 = netStream2.Release();
                        }
                    }
                }
            }
            finally
            {
                if (netStream != null)
                {
                    netStream = netStream.Release();
                }
            }
            num = -1;
            lock (remoteStates)
            {
                if (conn.isDyingForScopes)
                {
                    Debug.LogFormat("Attempt to send delta to client (id {0}) that is disconnecting - caught and rejected [2]", conn.hostId);
                    return;
                }
                num = GetRemoteState(conn.hostId).acknowledgedEvent;
            }
            NetStream netStream4 = NetGame.BeginMessage(NetMsgId.Event);

            try
            {
                netStream4.WriteNetId(netId);
                bool flag2 = false;
                lock (frames.framesLock)
                {
                    for (int j = 0; j < frames.eventQueue.Count; j++)
                    {
                        FrameState frameState = frames.eventQueue[j];
                        if (frameState.frameId > num)
                        {
                            flag2 = true;
                            NetStream  netStream5  = netStream4;
                            FrameState frameState2 = frames.eventQueue[j];
                            netStream5.WriteFrameId(frameState2.frameId, num2);
                            NetStream  netStream6  = netStream4;
                            FrameState frameState3 = frames.eventQueue[j];
                            netStream6.WriteStream(frameState3.stream);
                        }
                    }
                }
                if (flag2)
                {
                    netStream4.WriteFrameId(0, num2);
                    NetGame.instance.SendUnreliable(conn, netStream4, num2);
                    ReportEvenBits(netStream4.position);
                }
            }
            finally
            {
                if (netStream4 != null)
                {
                    netStream4 = netStream4.Release();
                }
            }
        }