From 86c27402e2329cee53d6d780224df8e65af26604 Mon Sep 17 00:00:00 2001 From: js6pak Date: Tue, 27 Jul 2021 16:58:20 +0200 Subject: [PATCH] Language and chat mode api --- src/Impostor.Api/Net/IClient.cs | 10 +++++++++ .../ExamplePluginStartup.cs | 1 + .../Handlers/ClientEventListener.cs | 22 +++++++++++++++++++ src/Impostor.Server/Net/Client.cs | 4 ++-- src/Impostor.Server/Net/ClientBase.cs | 8 ++++++- .../Net/Factories/ClientFactory.cs | 5 +++-- .../Net/Factories/IClientFactory.cs | 5 +++-- .../Net/Manager/ClientManager.cs | 4 ++-- src/Impostor.Server/Net/Matchmaker.cs | 4 ++-- .../Net/Redirector/ClientRedirector.cs | 4 +++- .../Recorder/ClientRecorder.cs | 5 +++-- src/Impostor.Tools.ServerReplay/Program.cs | 2 +- 12 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs diff --git a/src/Impostor.Api/Net/IClient.cs b/src/Impostor.Api/Net/IClient.cs index 66ab9c5..02cdee8 100644 --- a/src/Impostor.Api/Net/IClient.cs +++ b/src/Impostor.Api/Net/IClient.cs @@ -27,6 +27,16 @@ namespace Impostor.Api.Net /// string Name { get; } + /// + /// Gets the language. + /// + Language Language { get; } + + /// + /// Gets the quick chat mode. + /// + QuickChatModes ChatMode { get; } + /// /// Gets the connection of the client. /// diff --git a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs index 673026d..fbb282d 100644 --- a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs +++ b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs @@ -15,6 +15,7 @@ namespace Impostor.Plugins.Example public void ConfigureServices(IServiceCollection services) { services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs b/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs new file mode 100644 index 0000000..062e266 --- /dev/null +++ b/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs @@ -0,0 +1,22 @@ +using Impostor.Api.Events; +using Impostor.Api.Events.Client; +using Microsoft.Extensions.Logging; + +namespace Impostor.Plugins.Example.Handlers +{ + public class ClientEventListener : IEventListener + { + private readonly ILogger _logger; + + public ClientEventListener(ILogger logger) + { + _logger = logger; + } + + [EventListener] + public void OnClientConnected(IClientConnectedEvent e) + { + _logger.LogInformation("Client {name} > connected (language: {language}, chat mode: {chatMode})", e.Client.Name, e.Client.Language, e.Client.ChatMode); + } + } +} diff --git a/src/Impostor.Server/Net/Client.cs b/src/Impostor.Server/Net/Client.cs index 7579034..e755a1c 100644 --- a/src/Impostor.Server/Net/Client.cs +++ b/src/Impostor.Server/Net/Client.cs @@ -24,8 +24,8 @@ namespace Impostor.Server.Net private readonly GameManager _gameManager; private readonly ICustomMessageManager _customMessageManager; - public Client(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager customMessageManager, string name, int gameVersion, IHazelConnection connection) - : base(name, gameVersion, connection) + public Client(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager customMessageManager, string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection) + : base(name, gameVersion, language, chatMode, connection) { _logger = logger; _antiCheatConfig = antiCheatOptions.Value; diff --git a/src/Impostor.Server/Net/ClientBase.cs b/src/Impostor.Server/Net/ClientBase.cs index 909c0e9..c1a6382 100644 --- a/src/Impostor.Server/Net/ClientBase.cs +++ b/src/Impostor.Server/Net/ClientBase.cs @@ -13,10 +13,12 @@ namespace Impostor.Server.Net { internal abstract class ClientBase : IClient { - protected ClientBase(string name, int gameVersion, IHazelConnection connection) + protected ClientBase(string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection) { Name = name; GameVersion = gameVersion; + Language = language; + ChatMode = chatMode; Connection = connection; Items = new ConcurrentDictionary(); } @@ -25,6 +27,10 @@ namespace Impostor.Server.Net public string Name { get; } + public Language Language { get; } + + public QuickChatModes ChatMode { get; } + public int GameVersion { get; } public IHazelConnection Connection { get; } diff --git a/src/Impostor.Server/Net/Factories/ClientFactory.cs b/src/Impostor.Server/Net/Factories/ClientFactory.cs index e7d3e66..09e55d9 100644 --- a/src/Impostor.Server/Net/Factories/ClientFactory.cs +++ b/src/Impostor.Server/Net/Factories/ClientFactory.cs @@ -1,4 +1,5 @@ using System; +using Impostor.Api.Innersloth; using Impostor.Api.Net; using Microsoft.Extensions.DependencyInjection; @@ -14,9 +15,9 @@ namespace Impostor.Server.Net.Factories _serviceProvider = serviceProvider; } - public ClientBase Create(IHazelConnection connection, string name, int clientVersion) + public ClientBase Create(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode) { - var client = ActivatorUtilities.CreateInstance(_serviceProvider, name, clientVersion, connection); + var client = ActivatorUtilities.CreateInstance(_serviceProvider, name, clientVersion, language, chatMode, connection); connection.Client = client; return client; } diff --git a/src/Impostor.Server/Net/Factories/IClientFactory.cs b/src/Impostor.Server/Net/Factories/IClientFactory.cs index 11a1ddc..d0d392d 100644 --- a/src/Impostor.Server/Net/Factories/IClientFactory.cs +++ b/src/Impostor.Server/Net/Factories/IClientFactory.cs @@ -1,9 +1,10 @@ -using Impostor.Api.Net; +using Impostor.Api.Innersloth; +using Impostor.Api.Net; namespace Impostor.Server.Net.Factories { internal interface IClientFactory { - ClientBase Create(IHazelConnection connection, string name, int clientVersion); + ClientBase Create(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode); } } diff --git a/src/Impostor.Server/Net/Manager/ClientManager.cs b/src/Impostor.Server/Net/Manager/ClientManager.cs index c5070f1..63e3498 100644 --- a/src/Impostor.Server/Net/Manager/ClientManager.cs +++ b/src/Impostor.Server/Net/Manager/ClientManager.cs @@ -65,7 +65,7 @@ namespace Impostor.Server.Net.Manager return clientId; } - public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion) + public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode) { var versionCompare = CompareVersion(clientVersion); if (versionCompare != VersionCompareResult.Compatible) @@ -105,7 +105,7 @@ namespace Impostor.Server.Net.Manager return; } - var client = _clientFactory.Create(connection, name, clientVersion); + var client = _clientFactory.Create(connection, name, clientVersion, language, chatMode); var id = NextId(); client.Id = id; diff --git a/src/Impostor.Server/Net/Matchmaker.cs b/src/Impostor.Server/Net/Matchmaker.cs index 843cd0c..3e9b1d0 100644 --- a/src/Impostor.Server/Net/Matchmaker.cs +++ b/src/Impostor.Server/Net/Matchmaker.cs @@ -62,14 +62,14 @@ namespace Impostor.Server.Net private async ValueTask OnNewConnection(NewConnectionEventArgs e) { // Handshake. - HandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name, out _, out _, out _); + HandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name, out _, out var language, out var chatMode); var connection = new HazelConnection(e.Connection, _connectionLogger); await _eventManager.CallAsync(new ClientConnectionEvent(connection, e.HandshakeData)); // Register client - await _clientManager.RegisterConnectionAsync(connection, name, clientVersion); + await _clientManager.RegisterConnectionAsync(connection, name, clientVersion, language, chatMode); } } } diff --git a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs index 22dc0a7..4503648 100644 --- a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs +++ b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs @@ -22,11 +22,13 @@ namespace Impostor.Server.Net.Redirector public ClientRedirector( string name, int gameVersion, + Language language, + QuickChatModes chatMode, HazelConnection connection, ClientManager clientManager, INodeProvider nodeProvider, INodeLocator nodeLocator) - : base(name, gameVersion, connection) + : base(name, gameVersion, language, chatMode, connection) { _clientManager = clientManager; _nodeProvider = nodeProvider; diff --git a/src/Impostor.Server/Recorder/ClientRecorder.cs b/src/Impostor.Server/Recorder/ClientRecorder.cs index 0e01e0c..20fa59e 100644 --- a/src/Impostor.Server/Recorder/ClientRecorder.cs +++ b/src/Impostor.Server/Recorder/ClientRecorder.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Impostor.Api.Innersloth; using Impostor.Api.Net.Custom; using Impostor.Api.Net.Messages; using Impostor.Server.Config; @@ -17,8 +18,8 @@ namespace Impostor.Server.Recorder private bool _createdGame; private bool _recordAfter; - public ClientRecorder(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, ICustomMessageManager customMessageManager, GameManager gameManager, string name, int gameVersion, HazelConnection connection, PacketRecorder recorder) - : base(logger, antiCheatOptions, clientManager, gameManager, customMessageManager, name, gameVersion, connection) + public ClientRecorder(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, ICustomMessageManager customMessageManager, GameManager gameManager, string name, int gameVersion, Language language, QuickChatModes chatMode, HazelConnection connection, PacketRecorder recorder) + : base(logger, antiCheatOptions, clientManager, gameManager, customMessageManager, name, gameVersion, language, chatMode, connection) { _recorder = recorder; _isFirst = true; diff --git a/src/Impostor.Tools.ServerReplay/Program.cs b/src/Impostor.Tools.ServerReplay/Program.cs index 6c8c08b..78c5b78 100644 --- a/src/Impostor.Tools.ServerReplay/Program.cs +++ b/src/Impostor.Tools.ServerReplay/Program.cs @@ -170,7 +170,7 @@ namespace Impostor.Tools.ServerReplay // Create and register connection. var connection = new MockHazelConnection(address); - await _clientManager.RegisterConnectionAsync(connection, name, gameVersion); + await _clientManager.RegisterConnectionAsync(connection, name, gameVersion, Language.English, QuickChatModes.FreeChatOrQuickChat); // Store reference for ourselfs. Connections.Add(clientId, connection); -- 2.39.5