/// <summary> /// 获取连接 /// </summary> /// <param name="peerConnectionId"></param> /// <returns></returns> public MyPeer GetPeer(int peerConnectionId) { MyPeer ret = null; mPeerDic.TryGetValue(peerConnectionId, out ret); return(ret); }
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, "请求进入房间失败"); } } } } }
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)); } }
/// <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; }
public void SendMessage(int peerConnectionId, RpId rpId, Dictionary <byte, object> dicParameters) { MyPeer peer = GetPeer(peerConnectionId); if (null != peer) { peer.SendCustomEvent(rpId, dicParameters); } }
/// <summary> /// 断开连接 /// </summary> /// <param name="peerConnectionId"></param> public void KickoutPeer(int peerConnectionId) { MyPeer peer = GetPeer(peerConnectionId); if (null != peer) { peer.Disconnect(); mPeerDic.Remove(peerConnectionId); } }
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); } }
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)); } }
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); }
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)); } } } } }
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)); } } } } }
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); } }
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)); }
/// <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); }
/// <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); }
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; } }
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);