private static async ETVoid SessionPingAsync(PingComponent self) { long time1 = TimeHelper.ClientNow(); Session session = self.GetParent <Session>(); long instanceId = self.InstanceId; G2C_Ping response = await session.Call(self.C2G_Ping) as G2C_Ping; if (self.InstanceId != instanceId) { return; } long time2 = TimeHelper.ClientNow(); self.Ping = time2 - time1; Game.TimeInfo.ServerMinusClientTime = response.Time + (time2 - time1) / 2 - time2; }
private static async ETTask PingAsync(PingComponent self) { Session session = self.GetParent <Session>(); long instanceId = self.InstanceId; while (true) { if (self.InstanceId != instanceId) { return; } long time1 = TimeHelper.ClientNow(); try { G2C_Ping response = await session.Call(self.C2G_Ping) as G2C_Ping; if (self.InstanceId != instanceId) { return; } long time2 = TimeHelper.ClientNow(); self.Ping = time2 - time1; Game.TimeInfo.ServerMinusClientTime = response.Time + (time2 - time1) / 2 - time2; await TimerComponent.Instance.WaitAsync(2000); } catch (RpcException e) { // session断开导致ping rpc报错,记录一下即可,不需要打成error Log.Info($"ping error: {self.Id} {e.Error}"); return; } catch (Exception e) { Log.Error($"ping error: \n{e}"); } } }