Search in sources :

Example 1 with DebugBotIncomingMessageToEventMappingAction

use of won.bot.framework.eventbot.action.impl.debugbot.DebugBotIncomingMessageToEventMappingAction in project webofneeds by researchstudio-sat.

the class DebugBot method initializeEventListeners.

@Override
protected void initializeEventListeners() {
    String welcomeMessage = "Greetings! \nI am the DebugBot. I " + "can simulate multiple other users so you can test things. I understand a few commands. \nTo see which ones, " + "type 'usage'.";
    String welcomeHelpMessage = "When connecting with me, you can say 'ignore', or 'deny' to make me ignore or deny requests, and 'wait N' to make me wait N seconds (max 99) before reacting.";
    EventListenerContext ctx = getEventListenerContext();
    EventBus bus = getEventBus();
    // eagerly cache RDF data
    BotBehaviour eagerlyCacheBehaviour = new EagerlyPopulateCacheBehaviour(ctx);
    eagerlyCacheBehaviour.activate();
    // react to a bot command activating/deactivating eager caching
    bus.subscribe(SetCacheEagernessCommandEvent.class, new ActionOnEventListener(ctx, new BaseEventBotAction(ctx) {

        @Override
        protected void doRun(Event event, EventListener executingListener) throws Exception {
            if (event instanceof SetCacheEagernessCommandEvent) {
                if (((SetCacheEagernessCommandEvent) event).isEager()) {
                    eagerlyCacheBehaviour.activate();
                } else {
                    eagerlyCacheBehaviour.deactivate();
                }
            }
        }
    }));
    // react to a message that was not identified as a debug command
    BotBehaviour connectionMessageBehaviour = new ConnectionMessageBehaviour(ctx);
    connectionMessageBehaviour.activate();
    // react to the debug deactivate command (deactivate my need)
    BotBehaviour deactivateNeedBehaviour = new DeactivateNeedBehaviour(ctx);
    deactivateNeedBehaviour.activate();
    // react to the close behaviour
    BotBehaviour closeBehaviour = new CloseBevahiour(ctx);
    closeBehaviour.activate();
    // register with WoN nodes, be notified when new needs are created
    RegisterMatcherAction registerMatcherAction = new RegisterMatcherAction(ctx);
    this.matcherRegistrator = new ActionOnEventListener(ctx, registerMatcherAction, 1);
    bus.subscribe(ActEvent.class, this.matcherRegistrator);
    RandomDelayedAction delayedRegistration = new RandomDelayedAction(ctx, registrationMatcherRetryInterval, registrationMatcherRetryInterval, 0, registerMatcherAction);
    ActionOnEventListener matcherRetryRegistrator = new ActionOnEventListener(ctx, delayedRegistration);
    bus.subscribe(MatcherRegisterFailedEvent.class, matcherRetryRegistrator);
    // create the echo need for debug initial connect - if we're not reacting to the creation of our own echo need.
    CreateDebugNeedWithFacetsAction needForInitialConnectAction = new CreateDebugNeedWithFacetsAction(ctx, true, true);
    needForInitialConnectAction.setIsInitialForConnect(true);
    ActionOnEventListener initialConnector = new ActionOnEventListener(ctx, new NotFilter(new NeedUriInNamedListFilter(ctx, ctx.getBotContextWrapper().getNeedCreateListName())), needForInitialConnectAction);
    bus.subscribe(NeedCreatedEventForMatcher.class, initialConnector);
    // create the echo need for debug initial hint - if we're not reacting to the creation of our own echo need.
    CreateDebugNeedWithFacetsAction initialHinter = new CreateDebugNeedWithFacetsAction(ctx, true, true);
    initialHinter.setIsInitialForHint(true);
    ActionOnEventListener needForInitialHintListener = new ActionOnEventListener(ctx, new NotFilter(new NeedUriInNamedListFilter(ctx, ctx.getBotContextWrapper().getNeedCreateListName())), initialHinter);
    bus.subscribe(NeedCreatedEventForMatcher.class, needForInitialHintListener);
    // as soon as the echo need triggered by debug connect created, connect to original
    this.needConnector = new ActionOnEventListener(ctx, "needConnector", new RandomDelayedAction(ctx, CONNECT_DELAY_MILLIS, CONNECT_DELAY_MILLIS, 1, new ConnectWithAssociatedNeedAction(ctx, FacetType.OwnerFacet.getURI(), FacetType.OwnerFacet.getURI(), welcomeMessage + " " + welcomeHelpMessage)));
    bus.subscribe(NeedCreatedEventForDebugConnect.class, this.needConnector);
    // as soon as the echo need triggered by debug hint command created, hint to original
    this.needHinter = new ActionOnEventListener(ctx, "needHinter", new RandomDelayedAction(ctx, CONNECT_DELAY_MILLIS, CONNECT_DELAY_MILLIS, 1, new HintAssociatedNeedAction(ctx, FacetType.OwnerFacet.getURI(), FacetType.OwnerFacet.getURI(), matcherUri)));
    bus.subscribe(NeedCreatedEventForDebugHint.class, this.needHinter);
    // if the original need wants to connect - always open
    this.autoOpener = new ActionOnEventListener(ctx, new MultipleActions(ctx, new OpenConnectionDebugAction(ctx, welcomeMessage, welcomeHelpMessage), new PublishSetChattinessEventAction(ctx, true)));
    bus.subscribe(ConnectFromOtherNeedEvent.class, this.autoOpener);
    EventBotAction userCommandAction = new DebugBotIncomingMessageToEventMappingAction(ctx);
    // if the remote side opens, send a greeting and set to chatty.
    bus.subscribe(OpenFromOtherNeedEvent.class, new ActionOnEventListener(ctx, new MultipleActions(ctx, userCommandAction, new PublishSetChattinessEventAction(ctx, true))));
    // if the bot receives a text message - try to map the command of the text message to a DebugEvent
    messageFromOtherNeedListener = new ActionOnEventListener(ctx, userCommandAction);
    bus.subscribe(MessageFromOtherNeedEvent.class, messageFromOtherNeedListener);
    // react to usage command event
    this.usageMessageSender = new ActionOnEventListener(ctx, new SendMultipleMessagesAction(ctx, DebugBotIncomingMessageToEventMappingAction.USAGE_MESSAGES));
    bus.subscribe(UsageDebugCommandEvent.class, usageMessageSender);
    bus.subscribe(CloseCommandSuccessEvent.class, new ActionOnEventListener(ctx, "chattiness off", new PublishSetChattinessEventAction(ctx, false)));
    // react to close event: set connection to not chatty
    bus.subscribe(CloseFromOtherNeedEvent.class, new ActionOnEventListener(ctx, new PublishSetChattinessEventAction(ctx, false)));
    // react to the hint and connect commands by creating a need (it will fire correct need created for connect/hint
    // events)
    needCreator = new ActionOnEventListener(ctx, new CreateDebugNeedWithFacetsAction(ctx, true, true));
    bus.subscribe(HintDebugCommandEvent.class, needCreator);
    bus.subscribe(ConnectDebugCommandEvent.class, needCreator);
    bus.subscribe(SendNDebugCommandEvent.class, new ActionOnEventListener(ctx, new SendNDebugMessagesAction(ctx, DELAY_BETWEEN_N_MESSAGES, DebugBotIncomingMessageToEventMappingAction.N_MESSAGES)));
    MessageTimingManager timingManager = new MessageTimingManager(ctx, 20);
    // on every actEvent there is a chance we send a chatty message
    bus.subscribe(ActEvent.class, new ActionOnEventListener(ctx, new SendChattyMessageAction(ctx, CHATTY_MESSAGE_PROBABILITY, timingManager, DebugBotIncomingMessageToEventMappingAction.RANDOM_MESSAGES, DebugBotIncomingMessageToEventMappingAction.LAST_MESSAGES)));
    // set the chattiness of the connection
    bus.subscribe(SetChattinessDebugCommandEvent.class, new ActionOnEventListener(ctx, new SetChattinessAction(ctx)));
    // process eliza messages with eliza
    bus.subscribe(MessageToElizaEvent.class, new ActionOnEventListener(ctx, new AnswerWithElizaAction(ctx, 20)));
    // remember when we sent the last message
    bus.subscribe(WonMessageSentOnConnectionEvent.class, new ActionOnEventListener(ctx, new RecordMessageSentTimeAction(ctx, timingManager)));
    // remember when we got the last message
    bus.subscribe(WonMessageReceivedOnConnectionEvent.class, new ActionOnEventListener(ctx, new RecordMessageReceivedTimeAction(ctx, timingManager)));
    // initialize the sent timestamp when the open message is received
    bus.subscribe(OpenFromOtherNeedEvent.class, new ActionOnEventListener(ctx, new RecordMessageSentTimeAction(ctx, timingManager)));
    // initialize the sent timestamp when the connect message is received
    bus.subscribe(ConnectFromOtherNeedEvent.class, new ActionOnEventListener(ctx, new RecordMessageSentTimeAction(ctx, timingManager)));
}
Also used : EventListenerContext(won.bot.framework.eventbot.EventListenerContext) CreateDebugNeedWithFacetsAction(won.bot.framework.eventbot.action.impl.debugbot.CreateDebugNeedWithFacetsAction) SendMultipleMessagesAction(won.bot.framework.eventbot.action.impl.wonmessage.SendMultipleMessagesAction) NeedUriInNamedListFilter(won.bot.framework.eventbot.filter.impl.NeedUriInNamedListFilter) SendNDebugMessagesAction(won.bot.framework.eventbot.action.impl.debugbot.SendNDebugMessagesAction) EventBus(won.bot.framework.eventbot.bus.EventBus) HintAssociatedNeedAction(won.bot.framework.eventbot.action.impl.wonmessage.HintAssociatedNeedAction) MultipleActions(won.bot.framework.eventbot.action.impl.MultipleActions) PublishSetChattinessEventAction(won.bot.framework.eventbot.action.impl.debugbot.PublishSetChattinessEventAction) DebugBotIncomingMessageToEventMappingAction(won.bot.framework.eventbot.action.impl.debugbot.DebugBotIncomingMessageToEventMappingAction) OpenConnectionDebugAction(won.bot.framework.eventbot.action.impl.debugbot.OpenConnectionDebugAction) BaseEventListener(won.bot.framework.eventbot.listener.BaseEventListener) ActionOnEventListener(won.bot.framework.eventbot.listener.impl.ActionOnEventListener) EventListener(won.bot.framework.eventbot.listener.EventListener) RandomDelayedAction(won.bot.framework.eventbot.action.impl.RandomDelayedAction) CloseBevahiour(won.bot.framework.eventbot.behaviour.CloseBevahiour) ConnectWithAssociatedNeedAction(won.bot.framework.eventbot.action.impl.wonmessage.ConnectWithAssociatedNeedAction) BotBehaviour(won.bot.framework.eventbot.behaviour.BotBehaviour) RecordMessageSentTimeAction(won.bot.framework.eventbot.action.impl.debugbot.RecordMessageSentTimeAction) SetChattinessAction(won.bot.framework.eventbot.action.impl.debugbot.SetChattinessAction) AnswerWithElizaAction(won.bot.framework.eventbot.action.impl.debugbot.AnswerWithElizaAction) EagerlyPopulateCacheBehaviour(won.bot.framework.eventbot.behaviour.EagerlyPopulateCacheBehaviour) RecordMessageReceivedTimeAction(won.bot.framework.eventbot.action.impl.debugbot.RecordMessageReceivedTimeAction) SetCacheEagernessCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.SetCacheEagernessCommandEvent) RegisterMatcherAction(won.bot.framework.eventbot.action.impl.matcher.RegisterMatcherAction) ConnectionMessageBehaviour(won.bot.framework.eventbot.behaviour.ConnectionMessageBehaviour) NotFilter(won.bot.framework.eventbot.filter.impl.NotFilter) BaseEventBotAction(won.bot.framework.eventbot.action.BaseEventBotAction) UsageDebugCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.UsageDebugCommandEvent) MatcherRegisterFailedEvent(won.bot.framework.eventbot.event.impl.matcher.MatcherRegisterFailedEvent) HintDebugCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.HintDebugCommandEvent) OpenFromOtherNeedEvent(won.bot.framework.eventbot.event.impl.wonmessage.OpenFromOtherNeedEvent) Event(won.bot.framework.eventbot.event.Event) SendNDebugCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.SendNDebugCommandEvent) CloseFromOtherNeedEvent(won.bot.framework.eventbot.event.impl.wonmessage.CloseFromOtherNeedEvent) MessageFromOtherNeedEvent(won.bot.framework.eventbot.event.impl.wonmessage.MessageFromOtherNeedEvent) CloseCommandSuccessEvent(won.bot.framework.eventbot.event.impl.command.close.CloseCommandSuccessEvent) SetChattinessDebugCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.SetChattinessDebugCommandEvent) WonMessageReceivedOnConnectionEvent(won.bot.framework.eventbot.event.impl.wonmessage.WonMessageReceivedOnConnectionEvent) ConnectDebugCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.ConnectDebugCommandEvent) MessageToElizaEvent(won.bot.framework.eventbot.event.impl.debugbot.MessageToElizaEvent) ConnectFromOtherNeedEvent(won.bot.framework.eventbot.event.impl.wonmessage.ConnectFromOtherNeedEvent) WonMessageSentOnConnectionEvent(won.bot.framework.eventbot.event.impl.wonmessage.WonMessageSentOnConnectionEvent) ActEvent(won.bot.framework.eventbot.event.impl.lifecycle.ActEvent) SetCacheEagernessCommandEvent(won.bot.framework.eventbot.event.impl.debugbot.SetCacheEagernessCommandEvent) DeactivateNeedBehaviour(won.bot.framework.eventbot.behaviour.DeactivateNeedBehaviour) ActionOnEventListener(won.bot.framework.eventbot.listener.impl.ActionOnEventListener) MessageTimingManager(won.bot.framework.eventbot.action.impl.debugbot.MessageTimingManager) SendChattyMessageAction(won.bot.framework.eventbot.action.impl.debugbot.SendChattyMessageAction) EventBotAction(won.bot.framework.eventbot.action.EventBotAction) BaseEventBotAction(won.bot.framework.eventbot.action.BaseEventBotAction)

Aggregations

EventListenerContext (won.bot.framework.eventbot.EventListenerContext)1 BaseEventBotAction (won.bot.framework.eventbot.action.BaseEventBotAction)1 EventBotAction (won.bot.framework.eventbot.action.EventBotAction)1 MultipleActions (won.bot.framework.eventbot.action.impl.MultipleActions)1 RandomDelayedAction (won.bot.framework.eventbot.action.impl.RandomDelayedAction)1 AnswerWithElizaAction (won.bot.framework.eventbot.action.impl.debugbot.AnswerWithElizaAction)1 CreateDebugNeedWithFacetsAction (won.bot.framework.eventbot.action.impl.debugbot.CreateDebugNeedWithFacetsAction)1 DebugBotIncomingMessageToEventMappingAction (won.bot.framework.eventbot.action.impl.debugbot.DebugBotIncomingMessageToEventMappingAction)1 MessageTimingManager (won.bot.framework.eventbot.action.impl.debugbot.MessageTimingManager)1 OpenConnectionDebugAction (won.bot.framework.eventbot.action.impl.debugbot.OpenConnectionDebugAction)1 PublishSetChattinessEventAction (won.bot.framework.eventbot.action.impl.debugbot.PublishSetChattinessEventAction)1 RecordMessageReceivedTimeAction (won.bot.framework.eventbot.action.impl.debugbot.RecordMessageReceivedTimeAction)1 RecordMessageSentTimeAction (won.bot.framework.eventbot.action.impl.debugbot.RecordMessageSentTimeAction)1 SendChattyMessageAction (won.bot.framework.eventbot.action.impl.debugbot.SendChattyMessageAction)1 SendNDebugMessagesAction (won.bot.framework.eventbot.action.impl.debugbot.SendNDebugMessagesAction)1 SetChattinessAction (won.bot.framework.eventbot.action.impl.debugbot.SetChattinessAction)1 RegisterMatcherAction (won.bot.framework.eventbot.action.impl.matcher.RegisterMatcherAction)1 ConnectWithAssociatedNeedAction (won.bot.framework.eventbot.action.impl.wonmessage.ConnectWithAssociatedNeedAction)1 HintAssociatedNeedAction (won.bot.framework.eventbot.action.impl.wonmessage.HintAssociatedNeedAction)1 SendMultipleMessagesAction (won.bot.framework.eventbot.action.impl.wonmessage.SendMultipleMessagesAction)1