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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }