Exemplo n.º 1
0
        /// <summary>
        /// 下线移除缓存
        /// </summary>
        /// <param name="username"></param>
        public void Offline(MobaPeer peer)
        {
            Player player = UserManager.GetPlayer(peer.Username);

            if (!m_OnlineDict.ContainsKey(player.Identification))
            {
                return;
            }

            // 通知所有好友下线
            if (!string.IsNullOrEmpty(player.FriendIdList))
            {
                OperationResponse response   = new OperationResponse((byte)OperationCode.FriendStateChange);
                string[]          friendList = player.FriendIdList.Split(',');
                foreach (string friendId in friendList)
                {
                    int id = int.Parse(friendId);
                    if (IsOnline(id))
                    {
                        response.Parameters = new Dictionary <byte, object>();
                        MobaPeer tempPeer = GetPeer(id);

                        DtoFriend dto = new DtoFriend(id, player.Name, false);
                        response[(byte)ParameterCode.DtoFriend] = JsonMapper.ToJson(dto);
                        tempPeer.SendOperationResponse(response, new SendParameters());
                    }
                }
            }

            m_OnlineDict.Remove(player.Identification);
        }
Exemplo n.º 2
0
    /// <summary>
    /// 好友上线或下线的处理
    /// </summary>
    /// <param name="response"></param>
    public void OnFriendStateChange(OperationResponse response)
    {
        DtoFriend       friend = JsonMapper.ToObject <DtoFriend>(response.Parameters[(byte)ParameterCode.DtoFriend] as string);
        FriendListPanel panel  = (FriendListPanel)UIManager.Instance.GetPanel(UIPanelType.FriendList);

        panel.UpdateFriendItem(friend);
    }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 /// <summary>
 /// 更新好友状态
 /// </summary>
 public void UpdateFriendItem(DtoFriend friend)
 {
     foreach (ItemFriend item in m_friendList)
     {
         if (item.Name == friend.Name)
         {
             item.SetOnline(friend.IsOnline);
             return;
         }
     }
 }
Exemplo n.º 5
0
    /// <summary>
    /// 添加好友项
    /// </summary>
    /// <param name="friend"></param>
    public void AddFriend(DtoFriend friend)
    {
        GameObject go = null;

        go = Instantiate(ItemFriend);
        go.transform.SetParent(GridLayout);
        go.transform.localScale = Vector3.one;
        ItemFriend item = go.GetComponent <ItemFriend>();

        item.SetItem(friend.Name, friend.IsOnline);

        m_friendList.Add(item);
    }
Exemplo n.º 6
0
    /// <summary>
    /// 获取添加好友的结果
    /// </summary>
    /// <param name="response"></param>
    public void OnAddResult(OperationResponse response)
    {
        if (response.ReturnCode == (short)ReturnCode.Falied)
        {
            // 对方拒绝了 但我什么也不敢做
        }
        else if (response.ReturnCode == (short)ReturnCode.Suceess)
        {
            // 添加新的好友
            DtoFriend friend = JsonMapper.ToObject <DtoFriend>(response.Parameters[(byte)ParameterCode.DtoFriend] as string);

            FriendListPanel panel = (FriendListPanel)UIManager.Instance.GetPanel(UIPanelType.FriendList);
            panel.AddFriend(friend);
        }
    }