Search in sources :

Example 1 with RuleToPluginMsg

use of org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg in project thingsboard by thingsboard.

the class RuleActorMessageProcessor method onRuleProcessingMsg.

protected void onRuleProcessingMsg(ActorContext context, RuleProcessingMsg msg) throws RuleException {
    if (state != ComponentLifecycleState.ACTIVE) {
        pushToNextRule(context, msg.getCtx(), RuleEngineError.NO_ACTIVE_RULES);
        return;
    }
    ChainProcessingContext chainCtx = msg.getCtx();
    ToDeviceActorMsg inMsg = chainCtx.getInMsg();
    ruleCtx.update(inMsg, chainCtx.getDeviceMetaData());
    logger.debug("[{}] Going to filter in msg: {}", entityId, inMsg);
    for (RuleFilter filter : filters) {
        if (!filter.filter(ruleCtx, inMsg)) {
            logger.debug("[{}] In msg is NOT valid for processing by current rule: {}", entityId, inMsg);
            pushToNextRule(context, msg.getCtx(), RuleEngineError.NO_FILTERS_MATCHED);
            return;
        }
    }
    RuleProcessingMetaData inMsgMd;
    if (processor != null) {
        logger.debug("[{}] Going to process in msg: {}", entityId, inMsg);
        inMsgMd = processor.process(ruleCtx, inMsg);
    } else {
        inMsgMd = new RuleProcessingMetaData();
    }
    logger.debug("[{}] Going to convert in msg: {}", entityId, inMsg);
    if (action != null) {
        Optional<RuleToPluginMsg<?>> ruleToPluginMsgOptional = action.convert(ruleCtx, inMsg, inMsgMd);
        if (ruleToPluginMsgOptional.isPresent()) {
            RuleToPluginMsg<?> ruleToPluginMsg = ruleToPluginMsgOptional.get();
            logger.debug("[{}] Device msg is converted to: {}", entityId, ruleToPluginMsg);
            context.parent().tell(new RuleToPluginMsgWrapper(pluginTenantId, pluginId, tenantId, entityId, ruleToPluginMsg), context.self());
            if (action.isOneWayAction()) {
                pushToNextRule(context, msg.getCtx(), RuleEngineError.NO_TWO_WAY_ACTIONS);
                return;
            } else {
                pendingMsgMap.put(ruleToPluginMsg.getUid(), msg);
                scheduleMsgWithDelay(context, new RuleToPluginTimeoutMsg(ruleToPluginMsg.getUid()), systemContext.getPluginProcessingTimeout());
                return;
            }
        }
    }
    logger.debug("[{}] Nothing to send to plugin: {}", entityId, pluginId);
    pushToNextRule(context, msg.getCtx(), RuleEngineError.NO_TWO_WAY_ACTIONS);
}
Also used : RuleToPluginMsgWrapper(org.thingsboard.server.actors.plugin.RuleToPluginMsgWrapper) ToDeviceActorMsg(org.thingsboard.server.common.msg.device.ToDeviceActorMsg) RuleToPluginMsg(org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg)

Aggregations

RuleToPluginMsgWrapper (org.thingsboard.server.actors.plugin.RuleToPluginMsgWrapper)1 ToDeviceActorMsg (org.thingsboard.server.common.msg.device.ToDeviceActorMsg)1 RuleToPluginMsg (org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg)1