package cc.blynk.server.hardware.handlers.hardware; import cc.blynk.server.Holder; import cc.blynk.server.core.protocol.model.messages.StringMessage; import cc.blynk.server.core.session.HardwareStateHolder; import cc.blynk.server.core.session.StateHolderBase; import cc.blynk.server.handlers.BaseSimpleChannelInboundHandler; import cc.blynk.server.handlers.common.PingLogic; import cc.blynk.server.hardware.handlers.hardware.logic.*; import io.netty.channel.ChannelHandlerContext; import static cc.blynk.server.core.protocol.enums.Command.*; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 29.07.15. */ public class HardwareHandler extends BaseSimpleChannelInboundHandler<StringMessage> { public final HardwareStateHolder state; private final HardwareLogic hardware; private final MailLogic email; private final BridgeLogic bridge; private final PushLogic push; private final TwitLogic tweet; private final SmsLogic smsLogic; private final SetWidgetPropertyLogic propertyLogic; private final BlynkInternalLogic info; public HardwareHandler(Holder holder, HardwareStateHolder stateHolder) { super(StringMessage.class, holder.limits); this.hardware = new HardwareLogic(holder, stateHolder.user.email); this.bridge = new BridgeLogic(holder.sessionDao, hardware); this.email = new MailLogic(holder.blockingIOProcessor, holder.mailWrapper, holder.limits.NOTIFICATION_PERIOD_LIMIT_SEC); this.push = new PushLogic(holder.gcmWrapper, holder.limits.NOTIFICATION_PERIOD_LIMIT_SEC); this.tweet = new TwitLogic(holder.blockingIOProcessor, holder.twitterWrapper, holder.limits.NOTIFICATION_PERIOD_LIMIT_SEC); this.smsLogic = new SmsLogic(holder.smsWrapper, holder.limits.NOTIFICATION_PERIOD_LIMIT_SEC); this.propertyLogic = new SetWidgetPropertyLogic(holder.sessionDao); this.info = new BlynkInternalLogic(holder.limits.HARDWARE_IDLE_TIMEOUT); this.state = stateHolder; } @Override public void messageReceived(ChannelHandlerContext ctx, StringMessage msg) { switch (msg.command) { case HARDWARE: hardware.messageReceived(ctx, state, msg); break; case PING: PingLogic.messageReceived(ctx, msg.id); break; case BRIDGE: bridge.messageReceived(ctx, state, msg); break; case EMAIL: email.messageReceived(ctx, state, msg); break; case PUSH_NOTIFICATION: push.messageReceived(ctx, state, msg); break; case TWEET: tweet.messageReceived(ctx, state, msg); break; case SMS: smsLogic.messageReceived(ctx, state, msg); break; case HARDWARE_SYNC: HardwareSyncLogic.messageReceived(ctx, state, msg); break; case BLYNK_INTERNAL: info.messageReceived(ctx, state, msg); break; case SET_WIDGET_PROPERTY: propertyLogic.messageReceived(ctx, state, msg); break; } } @Override public StateHolderBase getState() { return state; } }