public async Task Handle(TcpClient client)
        {
            var wordSuggestionStream = new WordSuggestionStream(new StringNetworkStream(client.GetStream(), Encoding.ASCII));

            while (true)
            {
                //Асинхронно ждем данных. При обрыве соединения завершаем обработку клиента.
                var suggestionToken = await wordSuggestionStream.ReadAsync().ConfigureAwait(false) ?? string.Empty;

                if (_log.IsInfoEnabled)
                {
                    _log.Info(m => m("recieved {0}", suggestionToken));
                }

                var suggestions = _suggestionService.Suggest(suggestionToken);

                var suggestionsMessage = String.Join(Environment.NewLine, suggestions);
                await wordSuggestionStream.WriteAsync(suggestionsMessage).ConfigureAwait(false);

                if (_log.IsInfoEnabled)
                {
                    _log.Info(m => m("sent {0}", suggestionsMessage));
                }
            }
        }
Exemplo n.º 2
0
        public async Task <string[]> GetSuggestions(string token)
        {
            var suggestionSteam = new WordSuggestionStream(new StringNetworkStream(_tcpClient.GetStream(), Encoding.ASCII));

            await suggestionSteam.WriteAsync(token).ConfigureAwait(false);

            var rawSuggestions = await suggestionSteam.ReadAsync(new CancellationTokenSource(TimeSpan.FromMinutes(1)).Token).ConfigureAwait(false);

            return(rawSuggestions.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
        }