protected override async Task OnSignInInvokeAsync(ITurnContext <IInvokeActivity> turnContext, CancellationToken cancellationToken) { await _conversationState.LoadAsync(turnContext, true, cancellationToken); await _userState.LoadAsync(turnContext, true, cancellationToken); await _dialog.RunAsync(turnContext, _conversationState.CreateProperty <DialogState>(nameof(DialogState)), cancellationToken); }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { // for signin, just use an oauth prompt to get the exchangeable token // also ensure that the channelId is not emulator if (turnContext.Activity.ChannelId != "emulator") { if (_magicCodeRegex.IsMatch(turnContext.Activity.Text) || turnContext.Activity.Text == "login") { // start an oauth prompt await _conversationState.LoadAsync(turnContext, true, cancellationToken); await _userState.LoadAsync(turnContext, true, cancellationToken); await _dialog.RunAsync(turnContext, _conversationState.CreateProperty <DialogState>(nameof(DialogState)), cancellationToken); } else if (turnContext.Activity.Text == "logout") { var adapter = turnContext.Adapter as IExtendedUserTokenProvider; await adapter.SignOutUserAsync(turnContext, _connectionName, turnContext.Activity.From.Id, cancellationToken); await turnContext.SendActivityAsync(MessageFactory.Text("logout from parent bot successful"), cancellationToken); } else if (turnContext.Activity.Text == "skill login" || turnContext.Activity.Text == "skill logout") { // incoming activity needs to be cloned for buffered replies var cloneActivity = MessageFactory.Text(turnContext.Activity.Text); cloneActivity.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); cloneActivity.DeliveryMode = DeliveryModes.ExpectReplies; var response1 = await _client.PostActivityAsync <ExpectedReplies>( _fromBotId, _toBotId, new Uri("http://localhost:2303/api/messages"), new Uri("http://tempuri.org/whatever"), turnContext.Activity.Conversation.Id, cloneActivity, cancellationToken); if (response1.Status == (int)HttpStatusCode.OK && response1.Body?.Activities != null) { var activities = response1.Body.Activities.ToArray(); if (!(await InterceptOAuthCards(activities, turnContext, cancellationToken))) { await turnContext.SendActivitiesAsync(activities, cancellationToken); } } } return; } await turnContext.SendActivityAsync(MessageFactory.Text("parent: before child"), cancellationToken); var activity = MessageFactory.Text("parent to child"); activity.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); activity.DeliveryMode = DeliveryModes.ExpectReplies; var response = await _client.PostActivityAsync <ExpectedReplies>( _fromBotId, _toBotId, new Uri("http://localhost:2303/api/messages"), new Uri("http://tempuri.org/whatever"), Guid.NewGuid().ToString(), activity, cancellationToken); if (response.Status == (int)HttpStatusCode.OK) { await turnContext.SendActivitiesAsync(response.Body?.Activities?.ToArray(), cancellationToken); } await turnContext.SendActivityAsync(MessageFactory.Text("parent: after child"), cancellationToken); }