示例#1
0
        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);
        }
示例#2
0
        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);
        }