public async Task StartChat(CancellationToken cancellationToken = default(CancellationToken)) { RenderSettings(); using (var dlGatewayProxy = new DirectLineGatewayProxy(new Uri(_gatewayUrl))) { var initActivity = GetInitActivity(new ChannelAccount(_fromId), _locale, GetChannelData(Configuration)); var stopWatch = Stopwatch.StartNew(); Console.WriteLine("Initializing..."); var lastResponse = await dlGatewayProxy.InitAssistantAsync(initActivity, cancellationToken); ConsoleOut.WriteTiming("Total time:", stopWatch.ElapsedMilliseconds); while (true) { ConsoleOut.WriteFlowerLine(); var utterance = await GetUtterance(); if (string.IsNullOrEmpty(utterance)) { continue; } if (utterance.ToLower().Trim().StartsWith("quit")) { break; } Console.WriteLine($"Utterance: \"{utterance}\""); stopWatch.Restart(); lastResponse = await HandleUtterance(lastResponse.ConversationId, utterance, lastResponse.Watermark, dlGatewayProxy, cancellationToken); ConsoleOut.WriteTiming("Total time:", stopWatch.ElapsedMilliseconds); Console.WriteLine(); } } }
private async Task <BotGatewayResponse> HandleUtterance(string conversationId, string utterance, string watermark, DirectLineGatewayProxy dlGatewayProxy, CancellationToken cancellationToken) { var activity = BuildMessageActivity(new ChannelAccount(_fromId), utterance, _locale, GetChannelData(Configuration)); var lastResponse = await SendActivityAsync(conversationId, watermark, dlGatewayProxy, cancellationToken, activity); var lastActivity = lastResponse.Activities[lastResponse.Activities.Count - 1]; while (lastActivity.InputHint != InputHints.AcceptingInput && lastActivity.InputHint != InputHints.ExpectingInput) { RenderResponses(lastResponse.Activities); // Get next message until we get a new message Console.WriteLine("Getting next message..."); var stopWatch = Stopwatch.StartNew(); var nextResponse = await dlGatewayProxy.GetNextMessageAsync(conversationId, lastResponse.Watermark, cancellationToken); var elapsedMilliseconds = stopWatch.ElapsedMilliseconds; Console.WriteLine("Done."); RenderResponse(nextResponse, elapsedMilliseconds); lastResponse = nextResponse; lastActivity = lastResponse.Activities[lastResponse.Activities.Count - 1]; } RenderResponses(lastResponse.Activities); return(lastResponse); }
private async Task <BotGatewayResponse> SendActivityAsync(string conversationId, string watermark, DirectLineGatewayProxy dlGatewayProxy, CancellationToken cancellationToken, Activity activity) { Console.WriteLine("Sending activity..."); if (_renderOutgoingActivities) { ConsoleOut.RenderActivity(activity, ConsoleColor.Blue); } var stopWatch = Stopwatch.StartNew(); var lastResponse = await dlGatewayProxy.SendActivityAsync(conversationId, watermark, activity, cancellationToken); var clientRoundtripTime = stopWatch.ElapsedMilliseconds; Console.WriteLine("Done."); RenderResponse(lastResponse, clientRoundtripTime); return(lastResponse); }