/// <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); }
/// <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); }
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); }
/// <summary> /// 更新好友状态 /// </summary> public void UpdateFriendItem(DtoFriend friend) { foreach (ItemFriend item in m_friendList) { if (item.Name == friend.Name) { item.SetOnline(friend.IsOnline); return; } } }
/// <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); }
/// <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); } }