package cc.blynk.server.hardware; import cc.blynk.server.Holder; import cc.blynk.server.core.BaseServer; import cc.blynk.server.core.protocol.handlers.decoders.MessageDecoder; import cc.blynk.server.core.protocol.handlers.encoders.MessageEncoder; import cc.blynk.server.handlers.common.AlreadyLoggedHandler; import cc.blynk.server.handlers.common.HardwareNotLoggedHandler; import cc.blynk.server.hardware.handlers.hardware.HardwareChannelStateHandler; import cc.blynk.server.hardware.handlers.hardware.auth.HardwareLoginHandler; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.ReadTimeoutHandler; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 2/1/2015. */ public class HardwareSSLServer extends BaseServer { private final ChannelInitializer<SocketChannel> channelInitializer; public HardwareSSLServer(Holder holder) { super(holder.props.getProperty("listen.address"), holder.props.getIntProperty("hardware.ssl.port"), holder.transportTypeHolder); final HardwareLoginHandler hardwareLoginHandler = new HardwareLoginHandler(holder, port); final HardwareChannelStateHandler hardwareChannelStateHandler = new HardwareChannelStateHandler(holder.sessionDao, holder.gcmWrapper); final AlreadyLoggedHandler alreadyLoggedHandler = new AlreadyLoggedHandler(); final int hardTimeoutSecs = holder.limits.HARDWARE_IDLE_TIMEOUT; this.channelInitializer = new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { final ChannelPipeline pipeline = ch.pipeline(); if (hardTimeoutSecs > 0) { pipeline.addLast("HSSLReadTimeout", new ReadTimeoutHandler(hardTimeoutSecs)); } pipeline.addLast("HSSL", holder.sslContextHolder.sslCtx.newHandler(ch.alloc())) .addLast("HSSLChannelState", hardwareChannelStateHandler) .addLast("HSSLMessageDecoder", new MessageDecoder(holder.stats)) .addLast("HSSLMessageEncoder", new MessageEncoder(holder.stats)) .addLast("HSSLLogin", hardwareLoginHandler) .addLast("HSSLNotLogged", new HardwareNotLoggedHandler()) .addLast("HSSLAlreadyLogged", alreadyLoggedHandler); } }; } @Override public ChannelInitializer<SocketChannel> getChannelInitializer() { return channelInitializer; } @Override protected String getServerName() { return "Hardware SSL"; } @Override public void close() { System.out.println("Shutting down Hardware SSL server..."); super.close(); } }