Adapt C2S / S2C for messages and move to Api namespace

This commit is contained in:
AeonLucid committed 2020-10-19 15:05:44 +02:00
1 parent e630863e72
commit 503cd221d5
35 files changed
+201 -97

No files matched your search

@@ -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; }
@@ -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());
}
}
}
@@ -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();
}
}
}
@@ -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();
}
}
}
@@ -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();
}
}
}
@@ -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();
}
}
}
@@ -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());
}
}
}
@@ -101,6 +101,12 @@ namespace Impostor.Api.Net.Messages
/// <param name="value">Value to write.</param>
void Write(GameCode value);
void WriteBytesAndSize(byte[] bytes);
void WriteBytesAndSize(byte[] bytes, int length);
void WriteBytesAndSize(byte[] bytes, int offset, int length);
/// <summary>
/// Starts a new message.
/// </summary>
@@ -1,6 +1,6 @@
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages
{
internal static class MessageFlags
public static class MessageFlags
{
public const byte HostGame = 0;
public const byte JoinGame = 1;
+1 -1
View File
@@ -1,4 +1,4 @@
using System;
using System;
namespace Impostor.Api.Net.Messages
{
@@ -1,9 +1,9 @@
using Impostor.Api.Innersloth;
using Impostor.Api.Net.Messages;
using System;
using Impostor.Api.Innersloth;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message00HostGame
public static class Message00HostGameS2C
{
public static void Serialize(IMessageWriter writer, int gameCode)
{
@@ -14,7 +14,7 @@ namespace Impostor.Server.Net.Messages
public static GameOptionsData Deserialize(IMessageReader reader)
{
return GameOptionsData.Deserialize(reader.ReadBytesAndSize());
throw new NotImplementedException();
}
}
}
@@ -1,10 +1,9 @@
using System;
using Impostor.Api.Innersloth.Data;
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message01JoinGame
public class Message01JoinGameS2C
{
public static void SerializeJoin(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId)
{
@@ -43,10 +42,9 @@ namespace Impostor.Server.Net.Messages
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader, out int gameCode, out byte unknown)
public static void Deserialize(IMessageReader reader)
{
gameCode = reader.ReadInt32();
unknown = reader.ReadByte();
throw new System.NotImplementedException();
}
}
}
@@ -1,9 +1,8 @@
using Impostor.Api.Innersloth.Data;
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message04RemovePlayer
public class Message04RemovePlayerS2C
{
public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, DisconnectReason reason)
{
@@ -22,10 +21,9 @@ namespace Impostor.Server.Net.Messages
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader, out int playerId, out byte reason)
public static void Deserialize(IMessageReader reader)
{
playerId = reader.ReadPackedInt32();
reason = reader.ReadByte();
throw new System.NotImplementedException();
}
}
}
@@ -1,8 +1,6 @@
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message07JoinedGame
public static class Message07JoinedGameS2C
{
public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, int[] otherPlayerIds)
{
@@ -24,5 +22,10 @@ namespace Impostor.Server.Net.Messages
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader)
{
throw new System.NotImplementedException();
}
}
}
@@ -1,9 +1,8 @@
using Impostor.Api.Innersloth.Data;
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message10AlterGame
public static class Message10AlterGameS2C
{
public static void Serialize(IMessageWriter writer, bool clear, int gameCode, bool isPublic)
{
@@ -19,10 +18,9 @@ namespace Impostor.Server.Net.Messages
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader, out AlterGameTags gameTag, out bool isPublic)
public static void Deserialize(IMessageReader reader)
{
gameTag = (AlterGameTags) reader.ReadByte();
isPublic = reader.ReadBoolean();
throw new System.NotImplementedException();
}
}
}
@@ -1,8 +1,6 @@
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message11KickPlayer
public class Message11KickPlayerS2C
{
public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, bool isBan)
{
@@ -18,10 +16,9 @@ namespace Impostor.Server.Net.Messages
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader, out int playerId, out bool isBan)
public static void Deserialize(IMessageReader reader)
{
playerId = reader.ReadPackedInt32();
isBan = reader.ReadBoolean();
throw new System.NotImplementedException();
}
}
}
@@ -1,8 +1,6 @@
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message12WaitForHost
public class Message12WaitForHostS2C
{
public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId)
{
@@ -16,5 +14,10 @@ namespace Impostor.Server.Net.Messages
writer.Write(playerId);
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader)
{
throw new System.NotImplementedException();
}
}
}
@@ -1,9 +1,8 @@
using System.Net;
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message13Redirect
public class Message13RedirectS2C
{
public static void Serialize(IMessageWriter writer, bool clear, IPEndPoint ipEndPoint)
{
@@ -17,5 +16,10 @@ namespace Impostor.Server.Net.Messages
writer.Write((ushort)ipEndPoint.Port);
writer.EndMessage();
}
public static void Deserialize(IMessageReader reader)
{
throw new System.NotImplementedException();
}
}
}
@@ -1,18 +1,10 @@
using System.Collections.Generic;
using Impostor.Api.Games;
using Impostor.Api.Innersloth;
using Impostor.Api.Net.Messages;
namespace Impostor.Server.Net.Messages
namespace Impostor.Api.Net.Messages.S2C
{
internal static class Message16GetGameListV2
public class Message16GetGameListS2C
{
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<IGame> games)
{
writer.StartMessage(MessageFlags.GetGameListV2);
@@ -31,19 +23,24 @@ namespace Impostor.Server.Net.Messages
{
writer.StartMessage(0);
writer.Write(game.PublicIp.Address);
writer.Write((ushort) game.PublicIp.Port);
writer.Write((ushort)game.PublicIp.Port);
writer.Write(game.Code);
writer.Write(game.Host.Client.Name);
writer.Write((byte) game.PlayerCount);
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.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();
}
}
}
@@ -1,5 +1,4 @@
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData
{
@@ -1,5 +1,4 @@
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData.Objects.Components
{
@@ -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
{
@@ -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
{
@@ -1,5 +1,4 @@
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData.Objects
{
@@ -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
{
@@ -1,6 +1,5 @@
using Impostor.Api.Games;
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData.Objects
{
@@ -1,6 +1,5 @@
using Impostor.Api.Games;
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData.Objects
{
@@ -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
@@ -1,6 +1,5 @@
using Impostor.Api.Games;
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.Messages;
namespace Impostor.Server.GameData.Objects
{
+11 -10
View File
@@ -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);
}
}
-1
View File
@@ -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
@@ -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;
}
@@ -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;
}
@@ -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);
}
}
}
+2 -2
View File
@@ -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);
}