diff --git a/src/PFire.Core/Protocol/Messages/Inbound/GameServerFetchFriendsFavorites.cs b/src/PFire.Core/Protocol/Messages/Inbound/GameServerFetchFriendsFavorites.cs new file mode 100644 index 0000000..db6b9cb --- /dev/null +++ b/src/PFire.Core/Protocol/Messages/Inbound/GameServerFetchFriendsFavorites.cs @@ -0,0 +1,19 @@ +using PFire.Core.Protocol.Messages.Outbound; +using PFire.Core.Session; +using System.Threading.Tasks; + +namespace PFire.Core.Protocol.Messages.Inbound +{ + internal sealed class GameServerFetchFriendsFavorites : XFireMessage + { + public GameServerFetchFriendsFavorites() : base(XFireMessageType.GameServerFetchFriendsFavorites) { } + + [XMessageField("gameid")] + public int GameId { get; set; } + + public override async Task Process(IXFireClient context) + { + await context.SendAndProcessMessage(new GameServerSendFriendsFavorites(GameId)); + } + } +} diff --git a/src/PFire.Core/Protocol/Messages/Outbound/GameServerSendFriendsFavorites.cs b/src/PFire.Core/Protocol/Messages/Outbound/GameServerSendFriendsFavorites.cs new file mode 100644 index 0000000..1f932f8 --- /dev/null +++ b/src/PFire.Core/Protocol/Messages/Outbound/GameServerSendFriendsFavorites.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using PFire.Core.Session; + +namespace PFire.Core.Protocol.Messages.Outbound +{ + internal sealed class GameServerSendFriendsFavorites : XFireMessage + { + public GameServerSendFriendsFavorites(int gameId) : base(XFireMessageType.GameServerSendFriendsFavorites) + { + GameId = gameId; + GameIps = new List(); + GamePorts = new List(); + FriendIds = new List>(); + } + + [XMessageField("gameid")] + public int GameId { get; set; } + + [XMessageField("gip")] + public List GameIps { get; set; } + + [XMessageField("gport")] + public List GamePorts { get; set; } + + [XMessageField("friends")] + public List> FriendIds { get; set; } + + public override Task Process(IXFireClient context) + { + //TODO: Have a Database of IPs and Ports, with a user id who favorited it that is fetched by gameid + // Probably reads from the favorites database based on userid and gameid. + // + // You will need to start off processing with making a new temporary List to put inside of FriendIds to satisfy the nested list need, this will hold the userid who favorited the server. + // Start off with sending back the GameId sent + // Iterate that list of favorites into Ips and Ports (unsigned ints on both) and your new userid List + // If no hits, send GameIps and GamePorts with empty Lists, for FriendIds send back an empty List> regardless, because the client expects a response. + + return Task.CompletedTask; + } + } +} diff --git a/src/PFire.Core/Protocol/Messages/XFireMessageType.cs b/src/PFire.Core/Protocol/Messages/XFireMessageType.cs index 2f5d05f..c121cb9 100644 --- a/src/PFire.Core/Protocol/Messages/XFireMessageType.cs +++ b/src/PFire.Core/Protocol/Messages/XFireMessageType.cs @@ -17,6 +17,7 @@ public enum XFireMessageType : short NicknameChange = 14, ClientConfiguration = 16, ConnectionInformation = 17, + GameServerFetchFriendsFavorites = 21, GameServerFetchAll = 22, StatusChange = 32, Unknown37 = 37, @@ -34,6 +35,7 @@ public enum XFireMessageType : short UserLookupResult = 143, ServerPong = 144, ServerList = 148, + GameServerSendFriendsFavorites = 149, GameServerSendAll = 150, Groups = 151, GroupsFriends = 152, diff --git a/src/PFire.Core/Protocol/XFireMessageTypeFactory.cs b/src/PFire.Core/Protocol/XFireMessageTypeFactory.cs index 648ea12..4108c2c 100644 --- a/src/PFire.Core/Protocol/XFireMessageTypeFactory.cs +++ b/src/PFire.Core/Protocol/XFireMessageTypeFactory.cs @@ -36,6 +36,7 @@ private XFireMessageTypeFactory() Add(new FriendRequestDecline()); Add(new FriendRemoval()); Add(new GameServerFetchAll()); + Add(new GameServerFetchFriendsFavorites()); Add(new NicknameChange()); Add(new StatusChange()); Add(new Logout());