public static MobileStateHolder getAppState(Channel channel) { return getAppState(channel.pipeline()); }
@Override public void channelInactive(ChannelHandlerContext ctx) { var state = getAppState(ctx.channel()); if (state != null) { var session = sessionDao.get(state.userKey); if (session != null) { log.trace("Application channel disconnect. {}", ctx.channel()); for (var dashBoard : state.user.profile.dashBoards) { if (dashBoard.isAppConnectedOn && dashBoard.isActive) { log.trace("{}-{}. Sending App Disconnected event to hardware.", state.user.email, state.user.appName); session.sendMessageToHardware(dashBoard.id, Command.BLYNK_INTERNAL, 7777, "adis"); } } } } }
public static void messageReceived(ChannelHandlerContext ctx, MobileStateHolder state, StringMessage message) { String[] dashIdAndTargetIdString = split2Device(message.body); int dashId = Integer.parseInt(dashIdAndTargetIdString[0]); int targetId = MobileSyncWidget.ANY_TARGET; User user = state.user; DashBoard dash = user.profile.getDashByIdOrThrow(dashId); if (dashIdAndTargetIdString.length == 2) { targetId = Integer.parseInt(dashIdAndTargetIdString[1]); } ctx.write(ok(message.id), ctx.voidPromise()); Channel appChannel = ctx.channel(); MobileStateHolder mobileStateHolder = getAppState(appChannel); boolean isNewSyncFormat = mobileStateHolder != null && mobileStateHolder.isNewSyncFormat(); user.profile.sendAppSyncs(dash, appChannel, targetId, isNewSyncFormat); ctx.flush(); }
public static void processDeviceSelectorCommand(ChannelHandlerContext ctx, Session session, Profile profile, DashBoard dash, StringMessage message, String[] splitBody) { //in format "vu 200000 1" long widgetId = Long.parseLong(splitBody[1]); Widget deviceSelector = dash.getWidgetByIdOrThrow(widgetId); if (deviceSelector instanceof DeviceSelector) { int selectedDeviceId = Integer.parseInt(splitBody[2]); ((DeviceSelector) deviceSelector).value = selectedDeviceId; ctx.write(ok(message.id), ctx.voidPromise()); //sending to shared dashes and master-master apps session.sendToSharedApps(ctx.channel(), dash.sharedToken, APP_SYNC, message.id, message.body); //we need to send syncs not only to main app, but all to all shared apps for (Channel channel : session.appChannels) { MobileStateHolder mobileStateHolder = getAppState(channel); if (mobileStateHolder != null && mobileStateHolder.contains(dash.sharedToken)) { boolean isNewSyncFormat = mobileStateHolder.isNewSyncFormat(); profile.sendAppSyncs(dash, channel, selectedDeviceId, isNewSyncFormat); } channel.flush(); } } }
MobileStateHolder mobileStateHolder = getAppState(appChannel); if (appChannel != ctx.channel() && mobileStateHolder != null && appChannel.isWritable()) { appChannel.write(makeUTF8StringMessage(message.command, message.id, message.body));