/// <summary> /// Handles a connected client /// </summary> /// <param name="client"></param> /// <param name="clientInfo"></param> private async Task HandleClient(TcpClientInfo client) { // trigger connected event _ = TaskUtil.RunAction(() => ClientConnectedAction?.Invoke(client.Info), _logger); // add client to repository PutClientToRepository(client); // continuously reads data (stops here until cancelled await ReadData(client); // remove client from repository RemoveClientFromRepository(client.Info.Id); // raise clinet disconnected _ = TaskUtil.RunAction(() => ClientDisconnectedAction?.Invoke(client.Info), _logger); }
/// <summary> /// Handles a connected client /// </summary> /// <param name="client"></param> /// <param name="ct"></param> private async Task HandleClient() { // client connected _ = TaskUtil.RunAction(() => ClientConnectedAction?.Invoke(_client.Info), _logger); // continuously reads data await ReadData(_client); // remove client from repository var client = Interlocked.Exchange(ref _client, null); _client?.Client.GetStream().Close(); _client?.Client?.Close(); _client = null; // trigger diconnected event _ = TaskUtil.RunAction(() => ClientDisconnectedAction?.Invoke(client?.Info), _logger); }