/// <summary> /// 玩家上线的处理 /// </summary> /// <param name="client"></param> private void OnPlayerOnline(MOBAClient client) { int accountID = accountCache.GetID(client); int playerID = playerCache.GetID(accountID); //防止重复在线 if (playerCache.IsOnLine(client)) { return; } //上线 playerCache.OnLine(client, playerID); //上线的时候,通知在线好友,显示在线状态 PlayerModel playerModel = playerCache.GetPlayerModel(playerID); if (playerModel != null) { foreach (int friendID in playerModel.FriendIdList) { if (!playerCache.IsOnLine(friendID)) //因为GetPlayerModel,GetClient是获取在线玩家的数据 { continue; } MOBAClient friendClient = playerCache.GetClient(friendID); Send(friendClient, OperationCode.PlayerCode, OpPlayer.FriendOnlineState, 0, "好友玩家上线", playerModel.Id); } } PlayerDto playerDto = ToDto(playerCache.GetPlayerModel(playerID)); //发送 Send(client, OperationCode.PlayerCode, OpPlayer.Online, 0, "上线成功", JsonMapper.ToJson(playerDto)); }
/// <summary> /// 上线 /// </summary> /// <param name="client"></param> private void OnLine(MobaClient client) { int accId = accountCache.GetId(client); int playerId = playerCache.GetId(accId); //防止重复在线 if (playerCache.IsOnLine(client)) { return; } //上线 playerCache.OnLine(client, playerId); //每次上线的时候要通知好友显示上线状态 PlayerModel myModel = playerCache.GetModel(client); if (myModel != null) { string[] friends = myModel.FriendIdList.Split(','); foreach (string item in friends) { if (item.Equals("")) { continue; } int itemId = int.Parse(item); if (!playerCache.IsOnLine(itemId)) { continue; } MobaClient tempClient = playerCache.GetClient(itemId); Send(tempClient, OpCode.PlayerCode, OpPlayer.FriendOnLine, 0, "此玩家上线", myModel.Id); } } PlayerModel model = playerCache.GetModel(playerId); PlayerDto dto = ToDto(model); Send(client, OpCode.PlayerCode, OpPlayer.OnLine, 0, "角色上线成功", JsonMapper.ToJson(dto)); }