public MQTTHardwareServer(Holder holder) { super(holder.props.getProperty("listen.address"), holder.props.getIntProperty("hardware.mqtt.port"), holder.transportTypeHolder); var hardTimeoutSecs = holder.limits.hardwareIdleTimeout; var mqttHardwareLoginHandler = new MqttHardwareLoginHandler(holder); var alreadyLoggedHandler = new AlreadyLoggedHandler(); var hardwareChannelStateHandler = new HardwareChannelStateHandler(holder); channelInitializer = new ChannelInitializer<>() { @Override protected void initChannel(SocketChannel ch) { ch.pipeline() .addLast("MqttIdleStateHandler", new IdleStateHandler(hardTimeoutSecs, hardTimeoutSecs, 0)) .addLast(hardwareChannelStateHandler) .addLast(new MqttDecoder()) .addLast(MqttEncoder.INSTANCE) .addLast(mqttHardwareLoginHandler) .addLast(alreadyLoggedHandler); } }; log.debug("hard.socket.idle.timeout = {}", hardTimeoutSecs); }
private void sentOfflineMessage(ChannelHandlerContext ctx, Session session, DashBoard dashBoard, Device device) { //this is special case. //in case hardware quickly reconnects we do not mark it as disconnected //as it is already online after quick disconnect. //https://github.com/blynkkk/blynk-server/issues/403 boolean isHardwareConnected = session.isHardwareConnected(dashBoard.id, device.id); if (!isHardwareConnected) { log.trace("Changing device status. DeviceId {}, dashId {}", device.id, dashBoard.id); device.disconnected(); } if (!dashBoard.isActive) { return; } Notification notification = dashBoard.getNotificationWidget(); if (notification != null && notification.notifyWhenOffline) { sendPushNotification(ctx, notification, dashBoard.id, device); } else if (!dashBoard.isNotificationsOff) { session.sendOfflineMessageToApps(dashBoard.id, device.id); } }
@Override public void channelInactive(ChannelHandlerContext ctx) { var hardwareChannel = ctx.channel(); var state = getHardState(hardwareChannel); if (state != null) { var session = sessionDao.get(state.userKey); if (session != null) { var device = state.device; log.trace("Hardware channel disconnect for {}, dashId {}, deviceId {}, token {}.", state.userKey, state.dash.id, device.id, device.token); sentOfflineMessage(ctx, session, state.dash, device); } } }
HardwareChannelStateHandler hardwareChannelStateHandler = new HardwareChannelStateHandler(holder); AlreadyLoggedHandler alreadyLoggedHandler = new AlreadyLoggedHandler(); int maxWebLength = holder.limits.webRequestMaxSize;
var appIdleTimeout = holder.limits.appIdleTimeout; var hardwareChannelStateHandler = new HardwareChannelStateHandler(holder); var hardwareLoginHandler = new HardwareLoginHandler(holder, port);