Exemple #1
0
    public static System_HeartbeatReturnProto GetProto(byte[] buffer, bool isChild = false)
    {
        System_HeartbeatReturnProto proto = new System_HeartbeatReturnProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.LocalTime  = ms.ReadFloat();
        proto.ServerTime = ms.ReadLong();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
    public static System_HeartbeatReturnProto GetProto(MMO_MemoryStream ms, byte[] buffer)
    {
        System_HeartbeatReturnProto proto = new System_HeartbeatReturnProto();

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.LocalTime  = ms.ReadFloat();
        proto.ServerTime = ms.ReadLong();

        return(proto);
    }
Exemple #3
0
    public static void OnSystem_HeartbeatReturn(byte[] buffer)
    {
        System_HeartbeatReturnProto proto = System_HeartbeatReturnProto.GetProto(buffer);

#if DEBUG_LOG_PROTO
        Debug.Log("<color=#00eaff>接收消息:</color><color=#00ff9c>" + proto.ProtoEnName + " " + proto.ProtoCode + "</color>");
        Debug.Log("<color=#c5e1dc>==>>" + JsonUtility.ToJson(proto) + "</color>");
#endif
        float localTime  = proto.LocalTime;
        long  serverTime = proto.ServerTime;

        GameEntry.Socket.PingValue      = (int)((Time.realtimeSinceStartup * 1000 - localTime) * 0.5f); //ping值
        GameEntry.Socket.GameServerTime = serverTime - GameEntry.Socket.PingValue;                      //客户端计算出来的服务器时间
    }