From: AeonLucid Date: Mon, 19 Oct 2020 13:05:44 +0000 (+0200) Subject: Adapt C2S / S2C for messages and move to Api namespace X-Git-Tag: v1.2.2~96^2~65 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=503cd221d5ef14eb7d9252bb876e854aa5cf00dd;p=rhonda%2Fimpostor.git Adapt C2S / S2C for messages and move to Api namespace --- diff --git a/src/Impostor.Api/Innersloth/GameOptionsData.cs b/src/Impostor.Api/Innersloth/GameOptionsData.cs index cac6371..cd26653 100644 --- a/src/Impostor.Api/Innersloth/GameOptionsData.cs +++ b/src/Impostor.Api/Innersloth/GameOptionsData.cs @@ -6,6 +6,8 @@ namespace Impostor.Api.Innersloth { public class GameOptionsData { + public const int LatestVersion = 2; + public byte Version { get; set; } public byte MaxPlayers { get; set; } public GameKeywords Keywords { get; set; } diff --git a/src/Impostor.Api/Net/Messages/C2S/Message00HostGameC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message00HostGameC2S.cs new file mode 100644 index 0000000..7245db2 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message00HostGameC2S.cs @@ -0,0 +1,23 @@ +using System.IO; +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Net.Messages.C2S +{ + public static class Message00HostGameC2S + { + public static void Serialize(IMessageWriter writer, GameOptionsData gameOptionsData) + { + using (var memory = new MemoryStream()) + using (var writerBin = new BinaryWriter(memory)) + { + gameOptionsData.Serialize(writerBin, GameOptionsData.LatestVersion); + writer.WriteBytesAndSize(memory.ToArray()); + } + } + + public static GameOptionsData Deserialize(IMessageReader reader) + { + return GameOptionsData.Deserialize(reader.ReadBytesAndSize()); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/C2S/Message01JoinGameC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message01JoinGameC2S.cs new file mode 100644 index 0000000..7e6baf3 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message01JoinGameC2S.cs @@ -0,0 +1,16 @@ +namespace Impostor.Api.Net.Messages.C2S +{ + public static class Message01JoinGameC2S + { + public static void Serialize(IMessageWriter writer) + { + throw new System.NotImplementedException(); + } + + public static void Deserialize(IMessageReader reader, out int gameCode, out byte unknown) + { + gameCode = reader.ReadInt32(); + unknown = reader.ReadByte(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/C2S/Message04RemovePlayerC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message04RemovePlayerC2S.cs new file mode 100644 index 0000000..99cdcfa --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message04RemovePlayerC2S.cs @@ -0,0 +1,16 @@ +namespace Impostor.Api.Net.Messages.C2S +{ + public class Message04RemovePlayerC2S + { + public static void Serialize(IMessageWriter writer) + { + throw new System.NotImplementedException(); + } + + public static void Deserialize(IMessageReader reader, out int playerId, out byte reason) + { + playerId = reader.ReadPackedInt32(); + reason = reader.ReadByte(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/C2S/Message10AlterGameC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message10AlterGameC2S.cs new file mode 100644 index 0000000..3a92e58 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message10AlterGameC2S.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Innersloth.Data; + +namespace Impostor.Api.Net.Messages.C2S +{ + public class Message10AlterGameC2S + { + public static void Serialize(IMessageWriter writer) + { + throw new System.NotImplementedException(); + } + + public static void Deserialize(IMessageReader reader, out AlterGameTags gameTag, out bool isPublic) + { + gameTag = (AlterGameTags)reader.ReadByte(); + isPublic = reader.ReadBoolean(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/C2S/Message11KickPlayerC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message11KickPlayerC2S.cs new file mode 100644 index 0000000..7c5b8b9 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message11KickPlayerC2S.cs @@ -0,0 +1,16 @@ +namespace Impostor.Api.Net.Messages.C2S +{ + public class Message11KickPlayerC2S + { + public static void Serialize(IMessageWriter writer) + { + throw new System.NotImplementedException(); + } + + public static void Deserialize(IMessageReader reader, out int playerId, out bool isBan) + { + playerId = reader.ReadPackedInt32(); + isBan = reader.ReadBoolean(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/C2S/Message16GetGameListC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message16GetGameListC2S.cs new file mode 100644 index 0000000..219374d --- /dev/null +++ b/src/Impostor.Api/Net/Messages/C2S/Message16GetGameListC2S.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Net.Messages.C2S +{ + public class Message16GetGameListC2S + { + public static void Serialize(IMessageWriter writer) + { + throw new System.NotImplementedException(); + } + + public static void Deserialize(IMessageReader reader, out GameOptionsData options) + { + reader.ReadPackedInt32(); // Hardcoded 0. + options = GameOptionsData.Deserialize(reader.ReadBytesAndSize()); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/IMessageWriter.cs b/src/Impostor.Api/Net/Messages/IMessageWriter.cs index 5eb5798..4f6765b 100644 --- a/src/Impostor.Api/Net/Messages/IMessageWriter.cs +++ b/src/Impostor.Api/Net/Messages/IMessageWriter.cs @@ -101,6 +101,12 @@ namespace Impostor.Api.Net.Messages /// Value to write. void Write(GameCode value); + void WriteBytesAndSize(byte[] bytes); + + void WriteBytesAndSize(byte[] bytes, int length); + + void WriteBytesAndSize(byte[] bytes, int offset, int length); + /// /// Starts a new message. /// diff --git a/src/Impostor.Api/Net/Messages/MessageFlags.cs b/src/Impostor.Api/Net/Messages/MessageFlags.cs new file mode 100644 index 0000000..aea0c60 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/MessageFlags.cs @@ -0,0 +1,22 @@ +namespace Impostor.Api.Net.Messages +{ + public static class MessageFlags + { + public const byte HostGame = 0; + public const byte JoinGame = 1; + public const byte StartGame = 2; + public const byte RemoveGame = 3; + public const byte RemovePlayer = 4; + public const byte GameData = 5; + public const byte GameDataTo = 6; + public const byte JoinedGame = 7; + public const byte EndGame = 8; + public const byte AlterGame = 10; + public const byte KickPlayer = 11; + public const byte WaitForHost = 12; + public const byte Redirect = 13; + public const byte ReselectServer = 14; + public const byte GetGameList = 9; + public const byte GetGameListV2 = 16; + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/MessageType.cs b/src/Impostor.Api/Net/Messages/MessageType.cs index 92fa153..1604358 100644 --- a/src/Impostor.Api/Net/Messages/MessageType.cs +++ b/src/Impostor.Api/Net/Messages/MessageType.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Impostor.Api.Net.Messages { diff --git a/src/Impostor.Api/Net/Messages/S2C/Message00HostGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message00HostGameS2C.cs new file mode 100644 index 0000000..8402d10 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message00HostGameS2C.cs @@ -0,0 +1,20 @@ +using System; +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Net.Messages.S2C +{ + public static class Message00HostGameS2C + { + public static void Serialize(IMessageWriter writer, int gameCode) + { + writer.StartMessage(MessageFlags.HostGame); + writer.Write(gameCode); + writer.EndMessage(); + } + + public static GameOptionsData Deserialize(IMessageReader reader) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs new file mode 100644 index 0000000..159ed2f --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs @@ -0,0 +1,50 @@ +using System; +using Impostor.Api.Innersloth.Data; + +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message01JoinGameS2C + { + public static void SerializeJoin(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.JoinGame); + writer.Write(gameCode); + writer.Write(playerId); + writer.Write(hostId); + writer.EndMessage(); + } + + public static void SerializeError(IMessageWriter writer, bool clear, DisconnectReason reason, string message = null) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.JoinGame); + writer.Write((int) reason); + + if (reason == DisconnectReason.Custom) + { + if (message == null) + { + throw new ArgumentNullException(nameof(message)); + } + + writer.Write(message); + } + + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message04RemovePlayerS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message04RemovePlayerS2C.cs new file mode 100644 index 0000000..abbb844 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message04RemovePlayerS2C.cs @@ -0,0 +1,29 @@ +using Impostor.Api.Innersloth.Data; + +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message04RemovePlayerS2C + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, DisconnectReason reason) + { + // Only a subset of DisconnectReason shows an unique message. + // ExitGame, Banned and Kicked. + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.RemovePlayer); + writer.Write(gameCode); + writer.Write(playerId); + writer.Write(hostId); + writer.Write((byte)reason); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs new file mode 100644 index 0000000..da6eb40 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs @@ -0,0 +1,31 @@ +namespace Impostor.Api.Net.Messages.S2C +{ + public static class Message07JoinedGameS2C + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, int[] otherPlayerIds) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.JoinedGame); + writer.Write(gameCode); + writer.Write(playerId); + writer.Write(hostId); + writer.WritePacked(otherPlayerIds.Length); + + foreach (var id in otherPlayerIds) + { + writer.WritePacked(id); + } + + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message10AlterGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message10AlterGameS2C.cs new file mode 100644 index 0000000..469cd84 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message10AlterGameS2C.cs @@ -0,0 +1,26 @@ +using Impostor.Api.Innersloth.Data; + +namespace Impostor.Api.Net.Messages.S2C +{ + public static class Message10AlterGameS2C + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, bool isPublic) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.AlterGame); + writer.Write(gameCode); + writer.Write((byte)AlterGameTags.ChangePrivacy); + writer.Write(isPublic); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message11KickPlayerS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message11KickPlayerS2C.cs new file mode 100644 index 0000000..1e2b6ef --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message11KickPlayerS2C.cs @@ -0,0 +1,24 @@ +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message11KickPlayerS2C + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, bool isBan) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.KickPlayer); + writer.Write(gameCode); + writer.WritePacked(playerId); + writer.Write(isBan); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message12WaitForHostS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message12WaitForHostS2C.cs new file mode 100644 index 0000000..5964b1c --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message12WaitForHostS2C.cs @@ -0,0 +1,23 @@ +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message12WaitForHostS2C + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.WaitForHost); + writer.Write(gameCode); + writer.Write(playerId); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message13RedirectS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message13RedirectS2C.cs new file mode 100644 index 0000000..4b93b0e --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message13RedirectS2C.cs @@ -0,0 +1,25 @@ +using System.Net; + +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message13RedirectS2C + { + public static void Serialize(IMessageWriter writer, bool clear, IPEndPoint ipEndPoint) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.Redirect); + writer.Write(ipEndPoint.Address); + writer.Write((ushort)ipEndPoint.Port); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Messages/S2C/Message16GetGameListS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message16GetGameListS2C.cs new file mode 100644 index 0000000..93386d7 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message16GetGameListS2C.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using Impostor.Api.Games; + +namespace Impostor.Api.Net.Messages.S2C +{ + public class Message16GetGameListS2C + { + public static void Serialize(IMessageWriter writer, int skeldGameCount, int miraHqGameCount, int polusGameCount, IEnumerable games) + { + writer.StartMessage(MessageFlags.GetGameListV2); + + // Count + writer.StartMessage(1); + writer.Write(skeldGameCount); // The Skeld + writer.Write(miraHqGameCount); // Mira HQ + writer.Write(polusGameCount); // Polus + writer.EndMessage(); + + // Listing + writer.StartMessage(0); + + foreach (var game in games) + { + writer.StartMessage(0); + writer.Write(game.PublicIp.Address); + writer.Write((ushort)game.PublicIp.Port); + writer.Write(game.Code); + writer.Write(game.Host.Client.Name); + writer.Write((byte)game.PlayerCount); + writer.WritePacked(1); // TODO: What does Age do? + writer.Write((byte)game.Options.MapId); + writer.Write((byte)game.Options.NumImpostors); + writer.Write((byte)game.Options.MaxPlayers); + writer.EndMessage(); + } + + writer.EndMessage(); + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Server/GameData/InnerNetObject.cs b/src/Impostor.Server/GameData/InnerNetObject.cs index 78ce960..d1a09e0 100644 --- a/src/Impostor.Server/GameData/InnerNetObject.cs +++ b/src/Impostor.Server/GameData/InnerNetObject.cs @@ -1,5 +1,4 @@ using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData { diff --git a/src/Impostor.Server/GameData/Objects/Components/InnerPlayerPhysics.cs b/src/Impostor.Server/GameData/Objects/Components/InnerPlayerPhysics.cs index df7f7aa..698f97e 100644 --- a/src/Impostor.Server/GameData/Objects/Components/InnerPlayerPhysics.cs +++ b/src/Impostor.Server/GameData/Objects/Components/InnerPlayerPhysics.cs @@ -1,5 +1,4 @@ using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects.Components { diff --git a/src/Impostor.Server/GameData/Objects/Components/InnerVoteBanSystem.cs b/src/Impostor.Server/GameData/Objects/Components/InnerVoteBanSystem.cs index 9c3d5de..e4a156b 100644 --- a/src/Impostor.Server/GameData/Objects/Components/InnerVoteBanSystem.cs +++ b/src/Impostor.Server/GameData/Objects/Components/InnerVoteBanSystem.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects.Components { diff --git a/src/Impostor.Server/GameData/Objects/InnerGameData.PlayerInfo.cs b/src/Impostor.Server/GameData/Objects/InnerGameData.PlayerInfo.cs index 2abf5c8..dfcdfab 100644 --- a/src/Impostor.Server/GameData/Objects/InnerGameData.PlayerInfo.cs +++ b/src/Impostor.Server/GameData/Objects/InnerGameData.PlayerInfo.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/GameData/Objects/InnerGameData.TaskInfo.cs b/src/Impostor.Server/GameData/Objects/InnerGameData.TaskInfo.cs index e317bd2..516a7a9 100644 --- a/src/Impostor.Server/GameData/Objects/InnerGameData.TaskInfo.cs +++ b/src/Impostor.Server/GameData/Objects/InnerGameData.TaskInfo.cs @@ -1,5 +1,4 @@ using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/GameData/Objects/InnerGameData.cs b/src/Impostor.Server/GameData/Objects/InnerGameData.cs index 5e23d17..3b27000 100644 --- a/src/Impostor.Server/GameData/Objects/InnerGameData.cs +++ b/src/Impostor.Server/GameData/Objects/InnerGameData.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using Impostor.Api.Games; using Impostor.Api.Net.Messages; using Impostor.Server.GameData.Objects.Components; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/GameData/Objects/InnerLobbyBehaviour.cs b/src/Impostor.Server/GameData/Objects/InnerLobbyBehaviour.cs index bdfcdf4..c9f96c0 100644 --- a/src/Impostor.Server/GameData/Objects/InnerLobbyBehaviour.cs +++ b/src/Impostor.Server/GameData/Objects/InnerLobbyBehaviour.cs @@ -1,6 +1,5 @@ using Impostor.Api.Games; using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/GameData/Objects/InnerMeetingHud.cs b/src/Impostor.Server/GameData/Objects/InnerMeetingHud.cs index 6fc30bc..7088526 100644 --- a/src/Impostor.Server/GameData/Objects/InnerMeetingHud.cs +++ b/src/Impostor.Server/GameData/Objects/InnerMeetingHud.cs @@ -1,6 +1,5 @@ using Impostor.Api.Games; using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/GameData/Objects/InnerPlayerControl.cs b/src/Impostor.Server/GameData/Objects/InnerPlayerControl.cs index 821f495..da7eec0 100644 --- a/src/Impostor.Server/GameData/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/GameData/Objects/InnerPlayerControl.cs @@ -2,7 +2,6 @@ using Impostor.Api.Games; using Impostor.Api.Net.Messages; using Impostor.Server.GameData.Objects.Components; -using Impostor.Server.Net.Messages; using Microsoft.Extensions.DependencyInjection; namespace Impostor.Server.GameData.Objects diff --git a/src/Impostor.Server/GameData/Objects/InnerShipStatus.cs b/src/Impostor.Server/GameData/Objects/InnerShipStatus.cs index 17f9931..00d38c4 100644 --- a/src/Impostor.Server/GameData/Objects/InnerShipStatus.cs +++ b/src/Impostor.Server/GameData/Objects/InnerShipStatus.cs @@ -1,6 +1,5 @@ using Impostor.Api.Games; using Impostor.Api.Net.Messages; -using Impostor.Server.Net.Messages; namespace Impostor.Server.GameData.Objects { diff --git a/src/Impostor.Server/Net/Client.cs b/src/Impostor.Server/Net/Client.cs index 42a17ce..d369a81 100644 --- a/src/Impostor.Server/Net/Client.cs +++ b/src/Impostor.Server/Net/Client.cs @@ -5,10 +5,11 @@ using Impostor.Api.Games; using Impostor.Api.Innersloth; using Impostor.Api.Innersloth.Data; using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.C2S; +using Impostor.Api.Net.Messages.S2C; using Impostor.Server.Data; using Impostor.Server.Net.Hazel; using Impostor.Server.Net.Manager; -using Impostor.Server.Net.Messages; using Microsoft.Extensions.Logging; namespace Impostor.Server.Net @@ -38,7 +39,7 @@ namespace Impostor.Server.Net case MessageFlags.HostGame: { // Read game settings. - var gameInfo = Message00HostGame.Deserialize(reader); + var gameInfo = Message00HostGameC2S.Deserialize(reader); // Create game. var game = await _gameManager.CreateAsync(gameInfo); @@ -46,7 +47,7 @@ namespace Impostor.Server.Net // Code in the packet below will be used in JoinGame. using (var writer = MessageWriter.Get(MessageType.Reliable)) { - Message00HostGame.Serialize(writer, game.Code); + Message00HostGameS2C.Serialize(writer, game.Code); await Connection.SendAsync(writer); } @@ -55,7 +56,7 @@ namespace Impostor.Server.Net case MessageFlags.JoinGame: { - Message01JoinGame.Deserialize( + Message01JoinGameC2S.Deserialize( reader, out var gameCode, out _); @@ -124,7 +125,7 @@ namespace Impostor.Server.Net return; } - Message04RemovePlayer.Deserialize( + Message04RemovePlayerC2S.Deserialize( reader, out var playerId, out var reason); @@ -186,7 +187,7 @@ namespace Impostor.Server.Net return; } - Message10AlterGame.Deserialize( + Message10AlterGameC2S.Deserialize( reader, out var gameTag, out var value); @@ -207,7 +208,7 @@ namespace Impostor.Server.Net return; } - Message11KickPlayer.Deserialize( + Message11KickPlayerC2S.Deserialize( reader, out var playerId, out var isBan); @@ -218,7 +219,7 @@ namespace Impostor.Server.Net case MessageFlags.GetGameListV2: { - Message16GetGameListV2.Deserialize(reader, out var options); + Message16GetGameListC2S.Deserialize(reader, out var options); await OnRequestGameList(options); break; } @@ -308,7 +309,7 @@ namespace Impostor.Server.Net var miraHqGameCount = _gameManager.GetGameCount(MapFlags.MiraHQ); var polusGameCount = _gameManager.GetGameCount(MapFlags.Polus); - Message16GetGameListV2.Serialize(message, skeldGameCount, miraHqGameCount, polusGameCount, games); + Message16GetGameListS2C.Serialize(message, skeldGameCount, miraHqGameCount, polusGameCount, games); return Connection.SendAsync(message); } @@ -321,7 +322,7 @@ namespace Impostor.Server.Net } using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGame.SerializeError(packet, false, reason, message); + Message01JoinGameS2C.SerializeError(packet, false, reason, message); return Connection.SendAsync(packet); } } diff --git a/src/Impostor.Server/Net/ClientBase.cs b/src/Impostor.Server/Net/ClientBase.cs index 3dda4ca..9ca4d36 100644 --- a/src/Impostor.Server/Net/ClientBase.cs +++ b/src/Impostor.Server/Net/ClientBase.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Impostor.Api.Net.Messages; using Impostor.Server.Net.Hazel; -using Impostor.Server.Net.Messages; using Impostor.Server.Net.State; namespace Impostor.Server.Net diff --git a/src/Impostor.Server/Net/Manager/ClientManager.cs b/src/Impostor.Server/Net/Manager/ClientManager.cs index 4a6a996..c5cb5d0 100644 --- a/src/Impostor.Server/Net/Manager/ClientManager.cs +++ b/src/Impostor.Server/Net/Manager/ClientManager.cs @@ -7,10 +7,10 @@ using Impostor.Api.Innersloth; using Impostor.Api.Innersloth.Data; using Impostor.Api.Net; using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.S2C; using Impostor.Server.Data; using Impostor.Server.Net.Factories; using Impostor.Server.Net.Hazel; -using Impostor.Server.Net.Messages; using Microsoft.Extensions.Logging; namespace Impostor.Server.Net.Manager @@ -58,7 +58,7 @@ namespace Impostor.Server.Net.Manager if (name.Length > 10) { using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGame.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength); await connection.SendAsync(packet); return; } @@ -66,7 +66,7 @@ namespace Impostor.Server.Net.Manager if (!SupportedVersions.Contains(clientVersion)) { using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGame.SerializeError(packet, false, DisconnectReason.IncorrectVersion); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.IncorrectVersion); await connection.SendAsync(packet); return; } diff --git a/src/Impostor.Server/Net/Messages/Message00HostGame.cs b/src/Impostor.Server/Net/Messages/Message00HostGame.cs deleted file mode 100644 index 835424b..0000000 --- a/src/Impostor.Server/Net/Messages/Message00HostGame.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Impostor.Api.Innersloth; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message00HostGame - { - public static void Serialize(IMessageWriter writer, int gameCode) - { - writer.StartMessage(MessageFlags.HostGame); - writer.Write(gameCode); - writer.EndMessage(); - } - - public static GameOptionsData Deserialize(IMessageReader reader) - { - return GameOptionsData.Deserialize(reader.ReadBytesAndSize()); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message01JoinGame.cs b/src/Impostor.Server/Net/Messages/Message01JoinGame.cs deleted file mode 100644 index fb254b5..0000000 --- a/src/Impostor.Server/Net/Messages/Message01JoinGame.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using Impostor.Api.Innersloth.Data; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message01JoinGame - { - public static void SerializeJoin(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.JoinGame); - writer.Write(gameCode); - writer.Write(playerId); - writer.Write(hostId); - writer.EndMessage(); - } - - public static void SerializeError(IMessageWriter writer, bool clear, DisconnectReason reason, string message = null) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.JoinGame); - writer.Write((int) reason); - - if (reason == DisconnectReason.Custom) - { - if (message == null) - { - throw new ArgumentNullException(nameof(message)); - } - - writer.Write(message); - } - - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out int gameCode, out byte unknown) - { - gameCode = reader.ReadInt32(); - unknown = reader.ReadByte(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message04RemovePlayer.cs b/src/Impostor.Server/Net/Messages/Message04RemovePlayer.cs deleted file mode 100644 index e8e669e..0000000 --- a/src/Impostor.Server/Net/Messages/Message04RemovePlayer.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Impostor.Api.Innersloth.Data; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message04RemovePlayer - { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, DisconnectReason reason) - { - // Only a subset of DisconnectReason shows an unique message. - // ExitGame, Banned and Kicked. - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.RemovePlayer); - writer.Write(gameCode); - writer.Write(playerId); - writer.Write(hostId); - writer.Write((byte)reason); - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out int playerId, out byte reason) - { - playerId = reader.ReadPackedInt32(); - reason = reader.ReadByte(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message07JoinedGame.cs b/src/Impostor.Server/Net/Messages/Message07JoinedGame.cs deleted file mode 100644 index d1957dc..0000000 --- a/src/Impostor.Server/Net/Messages/Message07JoinedGame.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message07JoinedGame - { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, int[] otherPlayerIds) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.JoinedGame); - writer.Write(gameCode); - writer.Write(playerId); - writer.Write(hostId); - writer.WritePacked(otherPlayerIds.Length); - - foreach (var id in otherPlayerIds) - { - writer.WritePacked(id); - } - - writer.EndMessage(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message10AlterGame.cs b/src/Impostor.Server/Net/Messages/Message10AlterGame.cs deleted file mode 100644 index eedf1bd..0000000 --- a/src/Impostor.Server/Net/Messages/Message10AlterGame.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Impostor.Api.Innersloth.Data; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message10AlterGame - { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, bool isPublic) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.AlterGame); - writer.Write(gameCode); - writer.Write((byte)AlterGameTags.ChangePrivacy); - writer.Write(isPublic); - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out AlterGameTags gameTag, out bool isPublic) - { - gameTag = (AlterGameTags) reader.ReadByte(); - isPublic = reader.ReadBoolean(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message11KickPlayer.cs b/src/Impostor.Server/Net/Messages/Message11KickPlayer.cs deleted file mode 100644 index 4d36f20..0000000 --- a/src/Impostor.Server/Net/Messages/Message11KickPlayer.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message11KickPlayer - { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, bool isBan) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.KickPlayer); - writer.Write(gameCode); - writer.WritePacked(playerId); - writer.Write(isBan); - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out int playerId, out bool isBan) - { - playerId = reader.ReadPackedInt32(); - isBan = reader.ReadBoolean(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message12WaitForHost.cs b/src/Impostor.Server/Net/Messages/Message12WaitForHost.cs deleted file mode 100644 index 67b75b9..0000000 --- a/src/Impostor.Server/Net/Messages/Message12WaitForHost.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message12WaitForHost - { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.WaitForHost); - writer.Write(gameCode); - writer.Write(playerId); - writer.EndMessage(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message13Redirect.cs b/src/Impostor.Server/Net/Messages/Message13Redirect.cs deleted file mode 100644 index 3b8a092..0000000 --- a/src/Impostor.Server/Net/Messages/Message13Redirect.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Net; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message13Redirect - { - public static void Serialize(IMessageWriter writer, bool clear, IPEndPoint ipEndPoint) - { - if (clear) - { - writer.Clear(MessageType.Reliable); - } - - writer.StartMessage(MessageFlags.Redirect); - writer.Write(ipEndPoint.Address); - writer.Write((ushort)ipEndPoint.Port); - writer.EndMessage(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/Message16GetGameListV2.cs b/src/Impostor.Server/Net/Messages/Message16GetGameListV2.cs deleted file mode 100644 index da8f630..0000000 --- a/src/Impostor.Server/Net/Messages/Message16GetGameListV2.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using Impostor.Api.Games; -using Impostor.Api.Innersloth; -using Impostor.Api.Net.Messages; - -namespace Impostor.Server.Net.Messages -{ - internal static class Message16GetGameListV2 - { - public static void Deserialize(IMessageReader reader, out GameOptionsData options) - { - reader.ReadPackedInt32(); // Hardcoded 0. - options = GameOptionsData.Deserialize(reader.ReadBytesAndSize()); - } - - public static void Serialize(IMessageWriter writer, int skeldGameCount, int miraHqGameCount, int polusGameCount, IEnumerable games) - { - writer.StartMessage(MessageFlags.GetGameListV2); - - // Count - writer.StartMessage(1); - writer.Write(skeldGameCount); // The Skeld - writer.Write(miraHqGameCount); // Mira HQ - writer.Write(polusGameCount); // Polus - writer.EndMessage(); - - // Listing - writer.StartMessage(0); - - foreach (var game in games) - { - writer.StartMessage(0); - writer.Write(game.PublicIp.Address); - writer.Write((ushort) game.PublicIp.Port); - writer.Write(game.Code); - writer.Write(game.Host.Client.Name); - writer.Write((byte) game.PlayerCount); - writer.WritePacked(1); // TODO: What does Age do? - writer.Write((byte) game.Options.MapId); - writer.Write((byte) game.Options.NumImpostors); - writer.Write((byte) game.Options.MaxPlayers); - writer.EndMessage(); - } - - writer.EndMessage(); - writer.EndMessage(); - } - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Messages/MessageFlags.cs b/src/Impostor.Server/Net/Messages/MessageFlags.cs deleted file mode 100644 index 595c02e..0000000 --- a/src/Impostor.Server/Net/Messages/MessageFlags.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace Impostor.Server.Net.Messages -{ - internal static class MessageFlags - { - public const byte HostGame = 0; - public const byte JoinGame = 1; - public const byte StartGame = 2; - public const byte RemoveGame = 3; - public const byte RemovePlayer = 4; - public const byte GameData = 5; - public const byte GameDataTo = 6; - public const byte JoinedGame = 7; - public const byte EndGame = 8; - public const byte AlterGame = 10; - public const byte KickPlayer = 11; - public const byte WaitForHost = 12; - public const byte Redirect = 13; - public const byte ReselectServer = 14; - public const byte GetGameList = 9; - public const byte GetGameListV2 = 16; - } -} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs index a9ffa68..0d001f3 100644 --- a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs +++ b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs @@ -3,10 +3,11 @@ using Hazel; using Impostor.Api.Innersloth; using Impostor.Api.Innersloth.Data; using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.C2S; +using Impostor.Api.Net.Messages.S2C; using Impostor.Server.Data; using Impostor.Server.Net.Hazel; using Impostor.Server.Net.Manager; -using Impostor.Server.Net.Messages; using Serilog; using ILogger = Serilog.ILogger; @@ -44,14 +45,14 @@ namespace Impostor.Server.Net.Redirector case MessageFlags.HostGame: { using var packet = MessageWriter.Get(MessageType.Reliable); - Message13Redirect.Serialize(packet, false, _nodeProvider.Get()); + Message13RedirectS2C.Serialize(packet, false, _nodeProvider.Get()); await Connection.SendAsync(packet); break; } case MessageFlags.JoinGame: { - Message01JoinGame.Deserialize( + Message01JoinGameC2S.Deserialize( reader, out var gameCode, out _); @@ -60,11 +61,11 @@ namespace Impostor.Server.Net.Redirector var endpoint = _nodeLocator.Find(GameCodeParser.IntToGameName(gameCode)); if (endpoint == null) { - Message01JoinGame.SerializeError(packet, false, DisconnectReason.GameMissing); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.GameMissing); } else { - Message13Redirect.Serialize(packet, false, endpoint); + Message13RedirectS2C.Serialize(packet, false, endpoint); } await Connection.SendAsync(packet); @@ -75,7 +76,7 @@ namespace Impostor.Server.Net.Redirector { // TODO: Implement. using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGame.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented); await Connection.SendAsync(packet); break; } diff --git a/src/Impostor.Server/Net/State/Game.Outgoing.cs b/src/Impostor.Server/Net/State/Game.Outgoing.cs index bc832e4..ddbf2c7 100644 --- a/src/Impostor.Server/Net/State/Game.Outgoing.cs +++ b/src/Impostor.Server/Net/State/Game.Outgoing.cs @@ -3,8 +3,8 @@ using System.Threading.Tasks; using Impostor.Api.Innersloth.Data; using Impostor.Api.Net; using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.S2C; using Impostor.Server.Net.Hazel; -using Impostor.Server.Net.Messages; namespace Impostor.Server.Net.State { @@ -44,7 +44,7 @@ namespace Impostor.Server.Net.State private void WriteRemovePlayerMessage(IMessageWriter message, bool clear, int playerId, DisconnectReason reason) { - Message04RemovePlayer.Serialize(message, clear, Code, playerId, HostId, reason); + Message04RemovePlayerS2C.Serialize(message, clear, Code, playerId, HostId, reason); } private void WriteJoinedGameMessage(IMessageWriter message, bool clear, IClientPlayer player) @@ -54,22 +54,22 @@ namespace Impostor.Server.Net.State .Select(x => x.Key) .ToArray(); - Message07JoinedGame.Serialize(message, clear, Code, player.Client.Id, HostId, playerIds); + Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, playerIds); } private void WriteAlterGameMessage(IMessageWriter message, bool clear, bool isPublic) { - Message10AlterGame.Serialize(message, clear, Code, isPublic); + Message10AlterGameS2C.Serialize(message, clear, Code, isPublic); } private void WriteKickPlayerMessage(IMessageWriter message, bool clear, int playerId, bool isBan) { - Message11KickPlayer.Serialize(message, clear, Code, playerId, isBan); + Message11KickPlayerS2C.Serialize(message, clear, Code, playerId, isBan); } private void WriteWaitForHostMessage(IMessageWriter message, bool clear, IClientPlayer player) { - Message12WaitForHost.Serialize(message, clear, Code, player.Client.Id); + Message12WaitForHostS2C.Serialize(message, clear, Code, player.Client.Id); } } } \ No newline at end of file diff --git a/src/Impostor.Server/Net/State/Game.cs b/src/Impostor.Server/Net/State/Game.cs index 4b7f014..14179d6 100644 --- a/src/Impostor.Server/Net/State/Game.cs +++ b/src/Impostor.Server/Net/State/Game.cs @@ -11,10 +11,10 @@ using Impostor.Api.Innersloth; using Impostor.Api.Innersloth.Data; using Impostor.Api.Net; using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.S2C; using Impostor.Server.Hazel; using Impostor.Server.Net.Hazel; using Impostor.Server.Net.Manager; -using Impostor.Server.Net.Messages; using Impostor.Server.Net.Redirector; using Serilog; using ILogger = Serilog.ILogger; @@ -99,7 +99,7 @@ namespace Impostor.Server.Net.State private ValueTask BroadcastJoinMessage(IMessageWriter message, bool clear, ClientPlayer player) { - Message01JoinGame.SerializeJoin(message, clear, Code, player.Client.Id, HostId); + Message01JoinGameS2C.SerializeJoin(message, clear, Code, player.Client.Id, HostId); return SendToAllExceptAsync(message, player.Client.Id); }