private void OnLoginReq(IMessage msg, object ext) { int playerId = (int)ext; LoginRsp rsp = new LoginRsp(); rsp.PlayerId = playerId; ServerUDPMgr.GetInstance().SendMsgToAll(MsgID.LoginRsp, rsp); _loginInPlayerCount++; }
private void FixedUpdate() { // 2个客户端都登录后,才开始帧同步 if (_loginInPlayerCount < 2) { return; } _nextKeyFrame = _currKeyFrame + Config.SYN_RATE_SERVER; if (_currFrame % Config.SYN_RATE_SERVER == 0) { // 当前关键帧结束 LockStepEnd lockStepEnd = new LockStepEnd(); lockStepEnd.KeyFrame = _nextKeyFrame; lockStepEnd.MsgTotal = _msgIndex; ServerUDPMgr.GetInstance().SendMsgToAll(MsgID.LockStepEnd, lockStepEnd); _currKeyFrame = _currFrame; _msgIndex = 0; } if (_msgQueue.Count != 0) { foreach (LockStepServerMsgItem serverMsgItem in _msgQueue) { if (serverMsgItem.msgId == MsgID.SteerPositionReq) { SteerPositionReq steerPositionReq = (SteerPositionReq)serverMsgItem.msg; SteerPositionRsp steerPositionRsp = new SteerPositionRsp(); steerPositionRsp.PlayerId = serverMsgItem.sendPlayerId; steerPositionRsp.X = steerPositionReq.X; steerPositionRsp.Y = steerPositionReq.Y; // 客户端将要执行该命令的帧 steerPositionRsp.KeyFrame = _nextKeyFrame; steerPositionRsp.MsgIndex = _msgIndex; ServerUDPMgr.GetInstance().SendMsgToAll(MsgID.SteerPositionRsp, steerPositionRsp); _msgIndex++; } } _msgQueue.Clear(); } _currFrame++; }