Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }