using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; namespace GameServer.PacketHandler; [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetReceivedFriendRequestListReq), typeof(GetReceivedFriendRequestsPacketHandler), typeof(GameLoginListener))] public class GetReceivedFriendRequestsPacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var result = new Result(); var owner = session as Player; NullReferenceCheckHelper.throwIfNull(owner, () => $"Player is null !!!"); var server_logic = GameServerApp.getServerLogic(); FriendReqCacheRequest cache = new FriendReqCacheRequest(owner, owner.getUserGuid(), "", server_logic.getRedisConnector()); var infos = await cache.getReceivedFriendRequests(); await send_GS2C_ACK_RECEIVED_FRIEND_REQUEST(owner, result, infos); return result; } public static async Task send_GS2C_ACK_RECEIVED_FRIEND_REQUEST(Player owner, Result result, List friendRquests) { var ack_packet = new ClientToGame(); ack_packet.Response = new ClientToGameRes(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.GetReceivedFriendRequestListRes = new(); foreach (var request in friendRquests) { FriendRequestInfo info = new(); var (nick_result, nick_attrib ) = await NicknameDoc.findNicknameFromGuid(request.m_sender_guid); if (nick_result.isFail() || null == nick_attrib) { info.NickName = string.Empty; } else { info.NickName = nick_attrib.Nickname; } info.RequestTime = Timestamp.FromDateTime(request.m_request_time); info.Guid = request.m_sender_guid; info.IsNew = request.m_is_new; ack_packet.Response.GetReceivedFriendRequestListRes.RequestList.Add(info); } if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { string err_msg = $"send_GS2C_ACK_RECEIVED_FRIEND_REQUEST Fail !!! : owner:{owner.toBasicString()}"; result.setFail(ServerErrorCode.ProudNetException, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } }