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 22 and 150 - Game Servers By ID - All #45

Merged
merged 1 commit into from
Mar 28, 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
2 changes: 1 addition & 1 deletion src/PFire.Core/Protocol/MessageSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ private static string GetAttributeName(BinaryReader reader, Type messageType)
// TODO: Be brave enough to find an elegant fix for this
// XFire decides not to follow its own rules. Message type 32 does not have a prefix byte for the length of the attribute name
// and breaks this code. Assume first byte after the attribute count as the attribute name
var count = messageType == typeof(StatusChange) ? 1 : reader.ReadByte();
var count = (messageType == typeof(StatusChange) || messageType == typeof(GameServerFetchAll)) ? 1 : reader.ReadByte();

var readBytes = reader.ReadBytes(count);
return Encoding.UTF8.GetString(readBytes);
Expand Down
19 changes: 19 additions & 0 deletions src/PFire.Core/Protocol/Messages/Inbound/GameServerFetchAll.cs
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 GameServerFetchAll : XFireMessage
{
public GameServerFetchAll() : base(XFireMessageType.GameServerFetchAll) { }

[XMessageField(0x21)]
public int GameId { get; set; }

public override async Task Process(IXFireClient context)
{
await context.SendAndProcessMessage(new GameServerSendAll(GameId));
}
}
}
39 changes: 39 additions & 0 deletions src/PFire.Core/Protocol/Messages/Outbound/GameServerSendAll.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
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 GameServerSendAll : XFireMessage
{
public GameServerSendAll(int gameId) : base(XFireMessageType.GameServerSendAll)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these be unsigned ints? Or are you planning to rebase this with the usigned ints fix and fix it there after?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I figure to fix it after, base this on the int base and then fix it when the time comes.

{
GameId = gameId;
GameIps = new List<int>();
GamePorts = new List<int>();
}

[XMessageField(0x21)]
public int GameId { get; set; }

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

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

public override Task Process(IXFireClient context)
{
//TODO: Have a Database of IPs and Ports that is fetched by gameid
// Send back the GameId sent
// Iterate that into Ips and Ports (unsigned ints on both)
// If no hits, send with empty List<int>s 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,
GameServerFetchAll = 22,
StatusChange = 32,
Unknown37 = 37,
Logout = 36,
Expand All @@ -33,6 +34,7 @@ public enum XFireMessageType : short
UserLookupResult = 143,
ServerPong = 144,
ServerList = 148,
GameServerSendAll = 150,
Groups = 151,
GroupsFriends = 152,
FriendStatusChange = 154,
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 @@ -35,6 +35,7 @@ private XFireMessageTypeFactory()
Add(new FriendRequestAccept());
Add(new FriendRequestDecline());
Add(new FriendRemoval());
Add(new GameServerFetchAll());
Add(new NicknameChange());
Add(new StatusChange());
Add(new Logout());
Expand Down
Loading