예제 #1
0
        ////////////////////////////////////// 响应 ////////////////////////////////////
        private void LoginResponse(bool send, DecodeRspResult res, Action <ResponseEvent> callback)
        {
            if (send)
            {
                UserStatus.SetStatus(UserStatus.StatusType.Logout);
            }

            var rsp = (LoginRsp)res.Body;
            var eve = new ResponseEvent(res.RspWrap1.ErrCode, res.RspWrap1.ErrMsg, res.RspWrap1.Seq, rsp);

            Debugger.Log("LoginResponse {0}", eve);

            NetClient.HandleSuccess(eve.Code, () => {
                if (eve.Code == ErrCode.EcOk)
                {
                    RequestHeader.AuthKey  = rsp.Token;
                    RequestHeader.PlayerId = rsp.PlayerId;
                    var messageData        = rsp;

                    // 更新状态
                    UserStatus.SetStatus(UserStatus.StatusType.Login);

                    // 设置 PlayerInfo
                    if (string.IsNullOrEmpty(GamePlayerInfo.GetInfo().Id))
                    {
                        GamePlayerInfo.SetInfo(messageData.PlayerId);
                    }
                }
            });
            UserStatus.SetErrCode(eve.Code, eve.Msg);
            callback?.Invoke(eve);
        }
예제 #2
0
파일: Net.cs 프로젝트: moto2002/FrameLock
        private int GetReadyCode(ProtoCmd subcmd)
        {
            if (!SdkStatus.IsInited() && subcmd != ProtoCmd.ECmdLoginReq)
            {
                // 发送失败: 没有初始化 (login不需要初始化)
                var info = new PlayerInfo {
                    Id = ""
                };
                GamePlayerInfo.SetInfo(info);
                UserStatus.SetStatus(UserStatus.StatusType.Logout);
                return(ErrCode.EcSdkUninit);
            }

            // 检测 socket
            if (Socket == null || string.IsNullOrEmpty(Socket.Url))
            {
                return((int)QAppProtoErrCode.EcSdkSendFail);
            }

            if (!UserStatus.IsStatus(UserStatus.StatusType.Login) && subcmd != ProtoCmd.ECmdLoginReq && subcmd != ProtoCmd.ECmdLogoutReq)
            {
                return((int)QAppProtoErrCode.EcSdkNoLogin);
            }

            if (Socket.Id == (int)ConnectionType.Relay && !CheckLoginStatus.IsChecked() &&
                (subcmd == ProtoCmd.ECmdRelaySendFrameReq || subcmd == ProtoCmd.ECmdRelayRequestFrameReq ||
                 subcmd == ProtoCmd.ECmdHeartBeatReq || subcmd == ProtoCmd.ECmdRelayClientSendtoGamesvrReq))
            {
                return((int)QAppProtoErrCode.EcSdkNoCheckLogin);
            }

            // 发送消息
            return(0);
        }
예제 #3
0
        public void SetRoomInfo(RoomInfo roomInfo)
        {
            // if(roomInfo!=null) Debugger.Log("setRoomInfo {0}", roomInfo.PlayerList);
            if (roomInfo == null)
            {
                roomInfo = new RoomInfo();
            }
            var oldRoomInfo = _room.RoomInfo ?? new RoomInfo();

            _room.RoomInfo = roomInfo;

            // 更新玩家信息
            if (_room.IsInRoom())
            {
                foreach (var info in _room.RoomInfo.PlayerList.Where(info => info.Id == RequestHeader.PlayerId))
                {
                    GamePlayerInfo.SetInfo((PlayerInfo)info);
                    break;
                }
            }

            // 重置帧广播信息:
            // 1 切换房间
            // 2 不存在房间id
            // 3 不在房间中
            // 4 房间的开始帧同步时间发生变化
            if (!oldRoomInfo.Id.Equals(_room.RoomInfo.Id) || string.IsNullOrEmpty(_room.RoomInfo.Id) || !_room.IsInRoom() || oldRoomInfo.StartGameTime != this._room.RoomInfo.StartGameTime)
            {
                _room.RoomBroadcast?.FrameBroadcastFrameIdReset(0);
            }

            // 激活第二条链接
            if (_room.RoomInfo != null && _room.RoomInfo.PlayerList != null)
            {
                if (_room.RoomInfo.PlayerList.Any(info => Listener.IsMe(info.Id)))
                {
                    this.ActiveFrame();
                }
            }
            _room.OnUpdate(this._room);
        }
예제 #4
0
        private static void LogoutResponse(bool send, DecodeRspResult res, Action <ResponseEvent> callback)
        {
            var wrap1 = res.RspWrap1;
            var eve   = new ResponseEvent(wrap1.ErrCode, wrap1.ErrMsg, wrap1.Seq, null);

            Debugger.Log("LogoutResponse {0}", eve);

            void HandleSuccess()
            {
                RequestHeader.AuthKey  = null;
                RequestHeader.PlayerId = null;

                UserStatus.SetStatus(UserStatus.StatusType.Logout);

                var playerInfo = new PlayerInfo {
                    Id = null
                };

                GamePlayerInfo.SetInfo(playerInfo);
            }

            NetClient.HandleSuccess(eve.Code, HandleSuccess);
            callback?.Invoke(eve);
        }