Пример #1
0
        /// <summary>
        /// 获取连接
        /// </summary>
        /// <param name="peerConnectionId"></param>
        /// <returns></returns>
        public MyPeer GetPeer(int peerConnectionId)
        {
            MyPeer ret = null;

            mPeerDic.TryGetValue(peerConnectionId, out ret);
            return(ret);
        }
Пример #2
0
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            RqEnterRoom rqEnterRoom = Deserialization(operationRequest.Parameters);

            if (null == rqEnterRoom)
            {
                LBLogger.Info(LogTag, "解析请求进入房间消息失败");
            }
            else
            {
                LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);
                LBLogger.Info(LogTag, "临时日志   " + curPlayer.PlayerId + "  " + curPlayer.ConnectionId);
                if (null == curPlayer)
                {
                    LBLogger.Info(LogTag, "不存在的账号请求进入房间,连接id:" + peer.ConnectionId);
                }
                else
                {
                    if (LBRoomManager.Instance.IsPlayerInRoom(curPlayer.PlayerId))
                    {
                        LBLogger.Info(LogTag, "请求进入房间,但是已经在房间中");
                    }
                    else
                    {
                        if (!LBRoomManager.Instance.PlayerEnterRoom(rqEnterRoom.RoomId, curPlayer.PlayerId))
                        {
                            LBLogger.Info(LogTag, "请求进入房间失败");
                        }
                    }
                }
            }
        }
Пример #3
0
        public void CreateAccountResult(bool success, int accountId, string accountName, string password, int peerConnectionId)
        {
            MyPeer peer = LBPeerManager.Instance.GetPeer(peerConnectionId);

            if (null != peer)
            {
                peer.SendCustomEvent(RpId.CreateAccountResult, RpCreateAccountResult.Serialization(success, RpCreateAccountResult.CreateAccountErrorCode.AccountExist));
            }
        }
Пример #4
0
 /// <summary>
 /// 添加连接
 /// </summary>
 /// <param name="peerConnectionId"></param>
 /// <param name="peer"></param>
 public void AddPeer(int peerConnectionId, MyPeer peer)
 {
     if (mPeerDic.ContainsKey(peerConnectionId))
     {
         LBLogger.Error(LogTag, "连接管理器,插入已经存在的连接 " + peerConnectionId.ToString());
         return;
     }
     mPeerDic[peerConnectionId] = peer;
 }
Пример #5
0
        public void SendMessage(int peerConnectionId, RpId rpId, Dictionary <byte, object> dicParameters)
        {
            MyPeer peer = GetPeer(peerConnectionId);

            if (null != peer)
            {
                peer.SendCustomEvent(rpId, dicParameters);
            }
        }
Пример #6
0
        /// <summary>
        /// 断开连接
        /// </summary>
        /// <param name="peerConnectionId"></param>
        public void KickoutPeer(int peerConnectionId)
        {
            MyPeer peer = GetPeer(peerConnectionId);

            if (null != peer)
            {
                peer.Disconnect();
                mPeerDic.Remove(peerConnectionId);
            }
        }
Пример #7
0
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);

            if (null == curPlayer)
            {
                LBLogger.Info("RqLoadFinish", "账号不存在 " + peer.ConnectionId);
                return;
            }
            LBSceneManager.Instance.PlayerLoadFinish(curPlayer.PlayerId);
        }
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);

            if (curPlayer == null)
            {
                return;
            }
            if (LBRoomManager.Instance.PlayerRoomReady(curPlayer.PlayerId))
            {
            }
            else
            {
                LBLogger.Info("RqRoomReadyPlayHandler", "发起准备,失败 " + peer.ConnectionId);
            }
        }
Пример #9
0
        public void AccountCreate(string accountName, string password, int peerConnectionId)
        {
            LBLogger.Info(LogTag, "请求创建账号");
            LBAccount curAccount = GetAccountByName(accountName);

            if (null != curAccount)
            {
                MyPeer peer = LBPeerManager.Instance.GetPeer(peerConnectionId);
                if (null != peer)
                {
                    peer.SendCustomEvent(RpId.CreateAccountResult, RpCreateAccountResult.Serialization(false, RpCreateAccountResult.CreateAccountErrorCode.AccountExist));
                }
            }
            else
            {
                LBSqlManager.Instance.CreateAccount(accountName, password, peerConnectionId);
            }
        }
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            LBLogger.Info(LogTag, "请求创建账号");
            RqCreateAccount rqCreateAccount = Deserialization(operationRequest.Parameters);

            if (null != rqCreateAccount)
            {
                LBAccountManager.Instance.AccountCreate(rqCreateAccount.AccountName, rqCreateAccount.Password, peer.ConnectionId);
            }
            else
            {
                if (ParseErrorCode == RqLoginErrorCode.Null)
                {
                    LBLogger.Error(LogTag, "登录游戏解析失败,但是没有错误码");
                    return;
                }
                peer.SendCustomEvent(RpId.CreateAccountResult, RpCreateAccountResult.Serialization(false, RpCreateAccountResult.CreateAccountErrorCode.ParseError));
            }
        }
Пример #11
0
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);

            if (curPlayer == null)
            {
                //LBLogger.Error("RqBattleInstructionHandler", "玩家没有登录");
                return;
            }
            byte[] byteArray = RqBattleInstruction.Deserialization(operationRequest.Parameters);
            int    index     = 0;
            BattleInstructionBase battleInstruction = BattleInstructionBase.Deserializetion(byteArray, ref index);

            if (null == battleInstruction)
            {
                LBLogger.Error("RqBattleInstructionHandler", "消息解析失败");
                return;
            }
            LBSceneManager.Instance.PlayerBattleInstruction(curPlayer.PlayerId, battleInstruction);
        }
Пример #12
0
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            RqLeaveRoom rqEnterRoom = Deserialization(operationRequest.Parameters);

            if (null == rqEnterRoom)
            {
                LBLogger.Info(LogTag, "请求离开Room,解析失败");
                peer.SendCustomEvent(RpId.LeaveRoom, RpLeaveRoom.Serialization(false));
            }
            else
            {
                LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);
                if (null == curPlayer)
                {
                    LBLogger.Info(LogTag, "请求离开Room,当前玩家不存在");
                    peer.SendCustomEvent(RpId.LeaveRoom, RpLeaveRoom.Serialization(false));
                }
                else
                {
                    if (!LBRoomManager.Instance.IsPlayerInRoom(curPlayer.PlayerId))
                    {
                        LBLogger.Info(LogTag, "请求离开房间,但是当前不在房间中 ");
                        peer.SendCustomEvent(RpId.LeaveRoom, RpLeaveRoom.Serialization(false));
                    }
                    else
                    {
                        bool leaveResult = LBRoomManager.Instance.PlayerLeaveRoom(curPlayer.PlayerId);
                        if (leaveResult)
                        {
                            LBLogger.Info(LogTag, "请求离开房间成功");
                            peer.SendCustomEvent(RpId.LeaveRoom, RpLeaveRoom.Serialization(true));
                        }
                        else
                        {
                            LBLogger.Info(LogTag, "请求离开失败");
                            peer.SendCustomEvent(RpId.LeaveRoom, RpLeaveRoom.Serialization(false));
                        }
                    }
                }
            }
        }
Пример #13
0
        public static void OnOperateRequest(MyPeer peer, OperationRequest operationRequest)
        {
            RqCreateRoom rqCreateRoom = Deserialization(operationRequest.Parameters);

            if (null == rqCreateRoom)
            {
                LBLogger.Info(LogTag, "请求创建房间,消息解析失败");
                peer.SendCustomEvent(RpId.CreateRoom, RpCreateRoom.Serialization(false, CommonDefine.InvalidRoomId, string.Empty));
            }
            else
            {
                LBPlayer curPlayer = LBPlayerManager.Instance.GetPlayerByConnectionId(peer.ConnectionId);
                if (null == curPlayer)
                {
                    LBLogger.Info(LogTag, "请求创建房间,账号未登陆,连接ID:" + peer.ConnectionId);
                    peer.SendCustomEvent(RpId.CreateRoom, RpCreateRoom.Serialization(false, CommonDefine.InvalidRoomId, string.Empty));
                }
                else
                {
                    if (LBRoomManager.Instance.IsPlayerInRoom(curPlayer.PlayerId))
                    {
                        LBLogger.Info(LogTag, "无法创建,因为当前已经处于房间");
                        peer.SendCustomEvent(RpId.CreateRoom, RpCreateRoom.Serialization(false, CommonDefine.InvalidRoomId, string.Empty));
                    }
                    else
                    {
                        int roomId = LBRoomManager.Instance.CreateRoom(rqCreateRoom.RoomName);
                        if (CommonDefine.InvalidRoomId == roomId)
                        {
                            LBLogger.Info(LogTag, "创建房间失败");
                            peer.SendCustomEvent(RpId.CreateRoom, RpCreateRoom.Serialization(false, CommonDefine.InvalidRoomId, string.Empty));
                        }
                        else
                        {
                            LBLogger.Info(LogTag, "创建房间成功 " + roomId);
                            peer.SendCustomEvent(RpId.CreateRoom, RpCreateRoom.Serialization(true, roomId, rqCreateRoom.RoomName));
                        }
                    }
                }
            }
        }
Пример #14
0
        public void AccountLogin(string accountName, string password, int peerConnectionId)
        {
            LBAccount curAccount = GetAccountByName(accountName);

            if (null != curAccount)
            {
                if (curAccount.IsCorrectPassword(password))
                {
                    if (peerConnectionId == curAccount.PeerConnectionId)
                    {
                        LBLogger.Error(LogTag, "当前连接重复发送登录 " + peerConnectionId);
                        return;
                    }
                    //TODO 这里的逻辑感觉有点不合理,应该抽出方法
                    mPeerIdDic.Remove(curAccount.PeerConnectionId);
                    curAccount.KickAccount();
                    curAccount.Login(peerConnectionId);
                    mPeerIdDic[curAccount.PeerConnectionId] = curAccount;
                    MyPeer peer = LBPeerManager.Instance.GetPeer(peerConnectionId);
                    if (null != peer)
                    {
                        peer.SendCustomEvent(RpId.LoginResult, RpLoginResult.Serialization(true, RpLoginResult.LoginErrorCode.ParseError));
                        LBSqlManager.Instance.PlayerLogin(curAccount.AccountName, curAccount.AccountId, peerConnectionId);
                    }
                }
                else
                {
                    //提示客户端密码错误
                    MyPeer peer = LBPeerManager.Instance.GetPeer(peerConnectionId);
                    if (null != peer)
                    {
                        peer.SendCustomEvent(RpId.LoginResult, RpLoginResult.Serialization(false, RpLoginResult.LoginErrorCode.PasswordError));
                    }
                }
            }
            else
            {
                LBSqlManager.Instance.CheckAccount(accountName, password, peerConnectionId);
            }
        }
Пример #15
0
        public void AccountLoginResult(bool success, int accountId, string accountName, string password, int peerConnectionId)
        {
            LBLogger.Info(LogTag, "数据服务器返回结果 " + success + " " + accountId + " " + peerConnectionId);
            LBAccount curAccount = GetAccountByName(accountName);

            if (null != curAccount)
            {
                //客户端发送了多条登录消息?
                LBLogger.Error(LogTag, "收到账号登录结果时,当前账号已经存,账号名 " + accountName);
                return;
            }
            curAccount = GetAccountById(accountId);
            if (null != curAccount)
            {
                //客户端发送了多条登录消息?
                LBLogger.Error(LogTag, "收到账号登录结果时,当前账号已经存。账号ID " + accountName + "  为什么mAccountNameDic中没有账号?");
                return;
            }
            MyPeer peer = LBPeerManager.Instance.GetPeer(peerConnectionId);

            if (null == peer)
            {
                //客户端主动断开连接了?
                LBLogger.Info(LogTag, "没有找到网络连接 " + peerConnectionId);
                return;
            }
            if (success)
            {
                LBAccount account = mAccountCacheMgr.GetObject();
                account.SetAccountInfo(accountName, password, accountId, peerConnectionId);
                mAccountIdDic[accountId]     = account;
                mAccountNameDic[accountName] = account;
                mPeerIdDic[peerConnectionId] = account;
            }
            peer.SendCustomEvent(RpId.LoginResult, RpLoginResult.Serialization(success, RpLoginResult.LoginErrorCode.PasswordError));
        }
Пример #16
0
    /// <summary>
    /// 处理客户端的注册请求
    /// </summary>
    /// <param name="operationRequest"></param>
    /// <param name="sendParameters"></param>
    /// <param name="peer"></param>
    public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyPeer peer)
    {
        string            username = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)UserCode.Username) as string;
        string            password = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)UserCode.Password) as string;
        UserManager       manager  = new UserManager();
        UserInfo          user     = manager.GetByUsername(username);
        OperationResponse response = new OperationResponse(operationRequest.OperationCode);

        if (user == null)
        {
            user = new UserInfo()
            {
                Username = username, Password = password
            };
            manager.Add(user);
            response.ReturnCode = (short)ReturnCode.Success;
        }
        else
        {
            response.ReturnCode = (short)ReturnCode.Failed;
        }
        peer.SendOperationResponse(response, sendParameters);
    }
Пример #17
0
    /// <summary>
    /// 处理客户端端的登录请求
    /// </summary>
    /// <param name="operationRequest"></param>
    /// <param name="sendParameters"></param>
    /// <param name="peer"></param>
    public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyPeer peer)
    {
        string      username  = DictTool.GetValue(operationRequest.Parameters, (byte)UserCode.Username) as string;
        string      password  = DictTool.GetValue(operationRequest.Parameters, (byte)UserCode.Password) as string;
        UserManager manager   = new UserManager();
        bool        isSuccess = manager.VerifyUser(username, password);

        OperationResponse response = new OperationResponse(operationRequest.OperationCode);

        if (isSuccess)
        {
            response.ReturnCode = (short)ReturnCode.Success;
            peer.username       = username;
        }
        else
        {
            response.ReturnCode = (short)ReturnCode.Failed;
        }
        peer.SendOperationResponse(response, sendParameters);
    }
Пример #18
0
    public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyPeer peer)
    {
        switch (operationRequest.OperationCode)//通过OpCode区分请求
        {
        case 1:
            Dictionary <byte, object> data = operationRequest.Parameters;
            object intValue;
            object stringValue;
            data.TryGetValue(1, out intValue);
            data.TryGetValue(2, out stringValue);
            MyGameServer.LogInfo("服务器:得到客户端传来的参数数据是:" + intValue.ToString() + "  " + stringValue.ToString());

            //向客户端作出响应
            OperationResponse opResponse = new OperationResponse(1);

            //向客户端发送参数
            Dictionary <byte, object> data2 = new Dictionary <byte, object>();
            data2.Add(1, 300);
            data2.Add(2, "服务器:给客户端发送参数数据");
            opResponse.SetParameters(data2);
            peer.SendOperationResponse(opResponse, sendParameters);    //给客户端一个响应,只能在这里调用,在其它地方无效

            ///客户端在没有向服务器端发送请求,但服务器端想通知或发送数据给客户端时,就可以使用SendEvent方法,
            ///SendEvent方法可以在服务器任何地方调用。
            //EventData ed = new EventData(1);
            //ed.Parameters = data2;
            //SendEvent(ed, new SendParameters());
            break;

        case 2:
            break;

        default:
            break;
        }
    }
Пример #19
0
    public OperateCode OpCode;//请求代码

    /// <summary>
    /// 响应请求的抽象类
    /// </summary>
    /// <param name="operationRequest"></param>
    /// <param name="sendParameters"></param>
    /// <param name="peer"></param>
    public abstract void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyPeer peer);