public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理进入选择房间的请求"); DataBase.Model.Player player = UserManager.GetPlayer(peer.Username); SelectRoom room = Caches.Select.EnterRoom(player.Identification, peer); if (room == null) { return; } OperationResponse response = new OperationResponse(); // 先给客户端发送已经进入房间的玩家数据(房间模型) response.OperationCode = (byte)OperationCode.SelectGetInfo; response.Parameters = new Dictionary <byte, object>(); response[(byte)ParameterCode.TeamOneSelectData] = JsonMapper.ToJson(room.TeamOneDict.Values.ToArray()); response[(byte)ParameterCode.TeamTwoSelectData] = JsonMapper.ToJson(room.TeamTwoDict.Values.ToArray()); peer.SendOperationResponse(response, sendParameters); // 再给房间内的其他客户端发一条消息:有人进入了 Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add((byte)(ParameterCode.PlayerId), player.Identification); room.Brocast(OperationCode.EnterSelect, data); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理玩家上线的请求"); // 获取自身的Player数据 DataBase.Model.Player player = UserManager.GetPlayer(peer.Username); if (player == null) { MobaServer.LogError(">>>>>>>>>> 数据异常 : PlayerOnlineHandler"); return; } // 防止重复上线 if (Caches.Player.IsOnline(player.Identification)) { MobaServer.LogError(">>>>>>>>> Player:" + player.Name + " 已上线"); return; } Caches.Player.Online(player.Identification, peer); OperationResponse response = new OperationResponse(); // 上线通知好友 if (!String.IsNullOrEmpty(player.FriendIdList)) { string[] friends = player.FriendIdList.Split(','); MobaPeer tempPeer = null; response.OperationCode = (byte)OperationCode.FriendStateChange; foreach (string friend in friends) { if (string.IsNullOrEmpty(friend)) { continue; } int id = int.Parse(friend); if (!Caches.Player.IsOnline(id)) { continue; } tempPeer = Caches.Player.GetPeer(id); // 发送好友上线的消息 response.Parameters = new Dictionary <byte, object>(); DtoFriend dto = new DtoFriend(player.Identification, player.Name, true); response[(byte)ParameterCode.DtoFriend] = JsonMapper.ToJson(dto); tempPeer.SendOperationResponse(response, sendParameters); } } // 发送自身的玩家数据给客户端 response.OperationCode = request.OperationCode; response.Parameters = new Dictionary <byte, object>(); response[(byte)ParameterCode.DtoPlayer] = JsonMapper.ToJson(player.ConvertToDot()); peer.SendOperationResponse(response, sendParameters); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理是否添加好友的反馈"); // 是否同意 bool isAccept = (bool)request.Parameters.ExTryGet((byte)ParameterCode.AcceptAddFriend); // 请求添加的玩家数据 int fromId = (int)request.Parameters.ExTryGet((byte)ParameterCode.PlayerId); string fromName = (string)request.Parameters.ExTryGet((byte)ParameterCode.PlayerName); // 请求的客户端 MobaPeer fromPeer = Caches.Player.GetPeer(fromId); OperationResponse response = new OperationResponse((byte)OperationCode.PlayerAddResult); if (isAccept) { response.ReturnCode = (short)ReturnCode.Suceess; // 自身的数据 DataBase.Model.Player player = UserManager.GetPlayer(peer.Username); // 好友的数据 DataBase.Model.Player friend = PlayerManager.GetById(fromId); // 添加好友 PlayerManager.AddFriend(player.Identification, fromId); // 发送更新后的数据 DtoPlayer dtoPlayer = player.ConvertToDot(); response.Parameters = new Dictionary <byte, object>(); response[(byte)ParameterCode.DtoFriend] = JsonMapper.ToJson(dtoPlayer.Friends.Last()); peer.SendOperationResponse(response, sendParameters); dtoPlayer = friend.ConvertToDot(); response.Parameters = new Dictionary <byte, object>(); response[(byte)ParameterCode.DtoFriend] = JsonMapper.ToJson(dtoPlayer.Friends.Last()); fromPeer.SendOperationResponse(response, sendParameters); return; } else { response.ReturnCode = (short)ReturnCode.Falied; response.DebugMessage = fromName + " 拒绝添加你为好友"; } fromPeer.SendOperationResponse(response, sendParameters); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理创建角色的请求"); string playerName = request.Parameters.ExTryGet((byte)ParameterCode.PlayerName) as string; // 无效检测 if (String.IsNullOrEmpty(playerName)) { return; } User user = UserManager.GetByUsername(peer.Username); DataBase.Model.Player player = new DataBase.Model.Player(playerName, user); PlayerManager.Add(peer.Username, player); OperationResponse response = new OperationResponse(request.OperationCode); peer.SendOperationResponse(response, sendParameters); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理添加好友的请求"); // 请求添加的玩家名字 string name = request.Parameters.ExTryGet((byte)ParameterCode.PlayerName) as string; // 无效判断 if (String.IsNullOrEmpty(name)) { return; } // 获取添加好友的数据 OperationResponse response = new OperationResponse(request.OperationCode); DataBase.Model.Player player = PlayerManager.GetByName(name); if (player == null) { response.ReturnCode = (short)ReturnCode.Falied; response.DebugMessage = "没有此玩家"; peer.SendOperationResponse(response, sendParameters); return; } // 如果添加的玩家为自身 DataBase.Model.Player selfPlayer = UserManager.GetPlayer(peer.Username); if (selfPlayer.Identification == player.Identification) { response.ReturnCode = (short)ReturnCode.Falied; response.DebugMessage = "不能添加自身"; peer.SendOperationResponse(response, sendParameters); return; } // 如果已经是好友 string[] friends = UserManager.GetPlayer(peer.Username).FriendIdList.Split(','); foreach (string friend in friends) { if (String.IsNullOrEmpty(friend)) { continue; } if (int.Parse(friend) == player.Identification) { response.ReturnCode = (short)ReturnCode.Falied; response.DebugMessage = "玩家已经是你的好友"; peer.SendOperationResponse(response, sendParameters); return; } } // 判断是否在线 这里不提供离线处理 直接返回失败 // TODO 不能给离线的玩家发送信息 bool isOnline = Caches.Player.IsOnline(player.Identification); if (!isOnline) { response.ReturnCode = (short)ReturnCode.Falied; response.DebugMessage = "玩家离线"; peer.SendOperationResponse(response, sendParameters); return; } // 玩家在线 向玩家发送是否同意的响应 MobaPeer toPeer = Caches.Player.GetPeer(player.Identification); response.OperationCode = (byte)OperationCode.PlayerAddToClient; response.Parameters = new Dictionary <byte, object>(); // 传输玩家名和id response[(byte)(ParameterCode.PlayerName)] = selfPlayer.Name; response[(byte)(ParameterCode.PlayerId)] = selfPlayer.Identification; toPeer.SendOperationResponse(response, sendParameters); }