/// <summary> /// Асинхронный запуск сервера /// </summary> /// <returns></returns> public Task StartAsync() { return(Task.Factory.StartNew(() => { try { if (MessageEncryptionEnabled) { Console.WriteLine($"Server run on {Port} with encryption channel"); } else { Console.WriteLine($"Server run on {Port}"); } _listener.Start(); while (true) { TcpClient client = _listener.AcceptTcpClient(); Task.Factory.StartNew(() => { var fluffyClient = new FluffyClient(client, this); AddConnectedClient(fluffyClient); StoreInit?.Invoke(fluffyClient); NewClientConnected?.Invoke(fluffyClient); fluffyClient.Disconnected += client1 => { ClientDisconnected?.Invoke(client1); }; fluffyClient.NewData += (data) => { NewData?.Invoke(fluffyClient, data); }; fluffyClient.NewPacket += (ref int id, PacketParser <Packet> parser, FluffyClient xFuffyClient) => { NewPacket?.Invoke(ref id, parser, xFuffyClient); }; }); } } catch (Exception e) { Console.WriteLine(e.Message + " " + e.StackTrace); } })); }
/// <summary> /// Удаляет пользователя с сервера /// </summary> /// <param name="client"></param> public void Kick(FluffyClient client) { client.CloseConnect(); }
/// <summary> /// Удаляет клиента из списка /// </summary> /// <param name="client">Подключенный клиент</param> public void RemoveConnectedClient(FluffyClient client) { lock (ConnectedClientsLocker) ConnectedClients.Remove(client); }
/// <summary> /// Добавляет клиента в список /// </summary> /// <param name="client">Подключенный клиент</param> public void AddConnectedClient(FluffyClient client) { lock (ConnectedClientsLocker) ConnectedClients.Add(client); }