Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Packets 21 and 149 - Fetch Friend Favorite Game Server List #46

Merged
merged 1 commit into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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));
}
}
}
Original file line number Diff line number Diff line change
@@ -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<int>();
GamePorts = new List<int>();
FriendIds = new List<List<int>>();
}

[XMessageField("gameid")]
public int GameId { get; set; }

[XMessageField("gip")]
public List<int> GameIps { get; set; }

[XMessageField("gport")]
public List<int> GamePorts { get; set; }

[XMessageField("friends")]
public List<List<int>> 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<int> 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<List>
// If no hits, send GameIps and GamePorts with empty List<int>s, for FriendIds send back an empty List<List<int>> regardless, because the client expects a response.

return Task.CompletedTask;
}
}
}
2 changes: 2 additions & 0 deletions src/PFire.Core/Protocol/Messages/XFireMessageType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public enum XFireMessageType : short
NicknameChange = 14,
ClientConfiguration = 16,
ConnectionInformation = 17,
GameServerFetchFriendsFavorites = 21,
GameServerFetchAll = 22,
StatusChange = 32,
Unknown37 = 37,
Expand All @@ -34,6 +35,7 @@ public enum XFireMessageType : short
UserLookupResult = 143,
ServerPong = 144,
ServerList = 148,
GameServerSendFriendsFavorites = 149,
GameServerSendAll = 150,
Groups = 151,
GroupsFriends = 152,
Expand Down
1 change: 1 addition & 0 deletions src/PFire.Core/Protocol/XFireMessageTypeFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Loading