/// </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>
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>();
--- /dev/null
+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);
+ }
+ }
+}
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;
{
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>();
}
public string Name { get; }
+ public Language Language { get; }
+
+ public QuickChatModes ChatMode { get; }
+
public int GameVersion { get; }
public IHazelConnection Connection { get; }
using System;
+using Impostor.Api.Innersloth;
using Impostor.Api.Net;
using Microsoft.Extensions.DependencyInjection;
_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;
}
-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);
}
}
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)
return;
}
- var client = _clientFactory.Create(connection, name, clientVersion);
+ var client = _clientFactory.Create(connection, name, clientVersion, language, chatMode);
var id = NextId();
client.Id = id;
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);
}
}
}
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;
using System.Threading.Tasks;
+using Impostor.Api.Innersloth;
using Impostor.Api.Net.Custom;
using Impostor.Api.Net.Messages;
using Impostor.Server.Config;
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;
// 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);