Пример #1
0
        public ClientBase Create(IHazelConnection connection, string name, int clientVersion)
        {
            var client = ActivatorUtilities.CreateInstance <TClient>(_serviceProvider, name, connection);

            connection.Client = client;
            return(client);
        }
Пример #2
0
 protected ClientBase(string name, int gameVersion, IHazelConnection connection)
 {
     Name        = name;
     GameVersion = gameVersion;
     Connection  = connection;
     Items       = new ConcurrentDictionary <object, object>();
 }
        public static ReactorClientInfo?GetReactor(this IHazelConnection connection)
        {
            if (Table.TryGetValue(connection, out var clientInfo))
            {
                return(clientInfo);
            }

            return(null);
        }
Пример #4
0
        protected ClientBase(string name, IHazelConnection connection, ISet <Mod> mods)
        {
            Name       = name;
            Connection = connection;
            Mods       = mods;
            Items      = new ConcurrentDictionary <object, object>();

            ModIdMap = new Dictionary <int, string>();

            var i = -1;

            foreach (var mod in mods.OrderBy(x => x.Id))
            {
                if (mod.Side == PluginSide.Both)
                {
                    ModIdMap[i--] = mod.Id;
                }
            }
        }
Пример #5
0
        public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion, ISet <Mod>?mods)
        {
            if (!SupportedVersions.Contains(clientVersion))
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.IncorrectVersion);
                await connection.SendAsync(packet);

                return;
            }

            if (name.Length > 10)
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength);
                await connection.SendAsync(packet);

                return;
            }

            if (string.IsNullOrWhiteSpace(name) || !name.All(TextBox.IsCharAllowed))
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameIllegalCharacters);
                await connection.SendAsync(packet);

                return;
            }

            var client = _clientFactory.Create(connection, name, clientVersion, mods ?? new HashSet <Mod>(0));
            var id     = NextId();

            client.Id = id;
            _logger.LogTrace("Client connected.");
            _clients.TryAdd(id, client);

            using var writer = MessageWriter.Get(MessageType.Reliable);
            ModdedHandshakeS2C.Serialize(writer, ServerBrand);
            await connection.SendAsync(writer);
        }
Пример #6
0
        public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion)
        {
            if (!SupportedVersions.Contains(clientVersion))
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.IncorrectVersion);
                await connection.SendAsync(packet);

                return;
            }

            if (name.Length > 10)
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength);
                await connection.SendAsync(packet);

                return;
            }

            if (string.IsNullOrWhiteSpace(name) || !name.All(TextBox.IsCharAllowed))
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameIllegalCharacters);
                await connection.SendAsync(packet);

                return;
            }

            var client = _clientFactory.Create(connection, name, clientVersion);
            int id     = NextId();

            client.Id = id;
            _logger.LogTrace("Client connected.");
            _clients.TryAdd(id, client);

            await _eventManager.CallAsync(new ClientConnectedEvent(connection, client));
        }
Пример #7
0
 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)
 {
     _logger               = logger;
     _antiCheatConfig      = antiCheatOptions.Value;
     _clientManager        = clientManager;
     _gameManager          = gameManager;
     _customMessageManager = customMessageManager;
 }
 public ClientConnectedEvent(IHazelConnection connection, IClient client)
 {
     Connection = connection;
     Client     = client;
 }
Пример #9
0
 public Client(ILogger <Client> logger, IOptions <AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, string name, IHazelConnection connection, ISet <Mod> mods)
     : base(name, connection, mods)
 {
     _logger          = logger;
     _antiCheatConfig = antiCheatOptions.Value;
     _clientManager   = clientManager;
     _gameManager     = gameManager;
 }
 public ClientConnectionEvent(IHazelConnection connection, IMessageReader handshakeData)
 {
     Connection    = connection;
     HandshakeData = handshakeData;
 }
 internal static void SetReactor(this IHazelConnection connection, ReactorClientInfo clientInfo)
 {
     Table.AddOrUpdate(connection, clientInfo);
 }