]> git.deb.at Git - rhonda/impostor.git/commitdiff
Language and chat mode api
authorjs6pak <kubastaron@hotmail.com>
Tue, 27 Jul 2021 14:58:20 +0000 (16:58 +0200)
committerjs6pak <kubastaron@hotmail.com>
Tue, 27 Jul 2021 14:59:09 +0000 (16:59 +0200)
12 files changed:
src/Impostor.Api/Net/IClient.cs
src/Impostor.Plugins.Example/ExamplePluginStartup.cs
src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs [new file with mode: 0644]
src/Impostor.Server/Net/Client.cs
src/Impostor.Server/Net/ClientBase.cs
src/Impostor.Server/Net/Factories/ClientFactory.cs
src/Impostor.Server/Net/Factories/IClientFactory.cs
src/Impostor.Server/Net/Manager/ClientManager.cs
src/Impostor.Server/Net/Matchmaker.cs
src/Impostor.Server/Net/Redirector/ClientRedirector.cs
src/Impostor.Server/Recorder/ClientRecorder.cs
src/Impostor.Tools.ServerReplay/Program.cs

index 66ab9c5efdfd97e416c5c934488effc814a6be02..02cdee8c24a00dc3ba3455e172c8d8e39ba2764c 100644 (file)
@@ -27,6 +27,16 @@ namespace Impostor.Api.Net
         /// </remarks>
         string Name { get; }
 
+        /// <summary>
+        ///     Gets the language.
+        /// </summary>
+        Language Language { get; }
+
+        /// <summary>
+        ///     Gets the quick chat mode.
+        /// </summary>
+        QuickChatModes ChatMode { get; }
+
         /// <summary>
         ///     Gets the connection of the client.
         /// </summary>
index 673026daac3d8e5fab5220cba0bdf74c1f971f9c..fbb282d287d003d1d6fcc5c57d83fb0b05b84a7c 100644 (file)
@@ -15,6 +15,7 @@ namespace Impostor.Plugins.Example
         public void ConfigureServices(IServiceCollection services)
         {
             services.AddSingleton<IEventListener, GameEventListener>();
+            services.AddSingleton<IEventListener, ClientEventListener>();
             services.AddSingleton<IEventListener, PlayerEventListener>();
             services.AddSingleton<IEventListener, MeetingEventListener>();
             services.AddSingleton<IEventListener, AnnouncementsListener>();
diff --git a/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs b/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs
new file mode 100644 (file)
index 0000000..062e266
--- /dev/null
@@ -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<ClientEventListener> _logger;
+
+        public ClientEventListener(ILogger<ClientEventListener> 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);
+        }
+    }
+}
index 75790346ed7922a4ebaa0cfcf52339b94007db52..e755a1ccc6fa5656fbd33be56959132061e8d46a 100644 (file)
@@ -24,8 +24,8 @@ namespace Impostor.Server.Net
         private readonly GameManager _gameManager;
         private readonly ICustomMessageManager<ICustomRootMessage> _customMessageManager;
 
-        public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, string name, int gameVersion, IHazelConnection connection)
-            : base(name, gameVersion, connection)
+        public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection)
+            : base(name, gameVersion, language, chatMode, connection)
         {
             _logger = logger;
             _antiCheatConfig = antiCheatOptions.Value;
index 909c0e9b89ec978cab6b43a47919db87048d5fe4..c1a63825c69ce599497ef9302844694631a07bab 100644 (file)
@@ -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<object, object>();
         }
@@ -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; }
index e7d3e668f26cc51862e170b1b02732232b6fe7bf..09e55d998dc140feca83f81044a862503f42d5ea 100644 (file)
@@ -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<TClient>(_serviceProvider, name, clientVersion, connection);
+            var client = ActivatorUtilities.CreateInstance<TClient>(_serviceProvider, name, clientVersion, language, chatMode, connection);
             connection.Client = client;
             return client;
         }
index 11a1ddc958b21a2bf91b7b47b9a9c741e9f34cb1..d0d392d12e12dcb683e1b27169e32b5017ecaea9 100644 (file)
@@ -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);
     }
 }
index c5070f1a45a71217611745c0ed24dd7e9fd837af..63e34985d2667b7154ec192d29bf9510b3689645 100644 (file)
@@ -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;
index 843cd0cfbffabb99ecc4f30c6273ac1411c927e4..3e9b1d01f0f4c99efe7bb8ea8816793643d646cb 100644 (file)
@@ -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);
         }
     }
 }
index 22dc0a7d111836ce0e9c9df7e3ec8d05729d303f..4503648b34bfac67d9b1b80b948524e37a353cad 100644 (file)
@@ -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;
index 0e01e0c556b011ad82e8a48ed6a5a5f41dde2085..20fa59e790ec5c9540edf6921c1061f9d9a5c4e9 100644 (file)
@@ -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<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, GameManager gameManager, string name, int gameVersion, HazelConnection connection, PacketRecorder recorder)
-            : base(logger, antiCheatOptions, clientManager, gameManager, customMessageManager, name, gameVersion, connection)
+        public ClientRecorder(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, ICustomMessageManager<ICustomRootMessage> 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;
index 6c8c08b33272271d5a436fc8c8c6eac8752e7e00..78c5b78f6b225d920b62d904854b3a7202408b26 100644 (file)
@@ -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);