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); }
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; //客户端计算出来的服务器时间 }