예제 #1
0
        public void OnTimeReturn(VNetMessageTimeReturn timeReturn)
        {
            double curTime     = VNetTimer.Inst.GetSystemTimeNow();
            double halfLatency = (curTime - timeReturn.clientTime) / 2;
            double difference  = timeReturn.serverTime - curTime + halfLatency;

            if (m_timeSyncsRemaining == VNetCommon.NET_TIME_NUM_SYNCS)
            {
                m_serverTimeDifference = difference;
            }

            // Pool it
            m_serverLatencies[VNetCommon.NET_TIME_NUM_SYNCS - m_timeSyncsRemaining] = difference;
            m_timeSyncsRemaining--;

            if (m_timeSyncsRemaining == 0)
            {
                for (int i = 0; i < VNetCommon.NET_TIME_NUM_SYNCS; i++)
                {
                    if (m_serverLatencies[i] < m_serverTimeDifference)
                    {
                        m_serverTimeDifference = m_serverLatencies[i];
                    }
                }
            }
        }
예제 #2
0
        public void OnTimeRequest(VNetMessageTimeRequest timeRequest)
        {
            VNetMessageTimeReturn nmtr = new VNetMessageTimeReturn();

            nmtr.clientTime = timeRequest.currentTime;
            nmtr.serverTime = VNetSessionTime.Inst.GetServerTimePrecise();
            timeRequest._client.SendNetMessage(nmtr, false);
        }
예제 #3
0
        public override VNetMessage Clone()
        {
            VNetMessageTimeReturn clone = (VNetMessageTimeReturn)base.Clone();

            clone.clientTime = clientTime;
            clone.serverTime = serverTime;
            return(clone);
        }