public override IEnumerable <CooperativeTaskStatus> DoWork()
        {
            IConversationPartner partner = ConversationRequest.GetPartner(Context.LocalKnowledge);

            if (partner != null && DialogMachine != null)
            {
                DialogMachine.Name = Context.Name;
                ConversationRequest.SetPartner(DialogMachine.LocalKnowledge, partner);

                partner.Begin();
                DialogMachine.Restart();
                DialogMachine.IsEnabled = true;
                while (!DialogMachine.IsInEndState)
                {
                    yield return(Wait());
                }
                DialogMachine.IsEnabled = false;
                ConversationRequest.UnsetPartner(Context.LocalKnowledge);
                ConversationRequest.UnsetPartner(DialogMachine.LocalKnowledge);
                partner.End();
                yield return(Finished(true));
            }

            yield return(Finished(false));
        }
        public override IEnumerable <CooperativeTaskStatus> DoWork()
        {
            IConversationPartner partner = ConversationRequest.GetPartner(Context.LocalKnowledge);

            if (partner != null)
            {
                IEnumerable <string> responses = ((StateMachine)Context).CurrentState.Transitions.OfType <ConversationTransition>().Select(t => t.Response);
                partner.Say(Context.Name, Text, responses);
                yield return(Finished(true));
            }
            else
            {
                yield return(Finished(false));
            }
        }