private void login(ChannelHandlerContext ctx, int messageId, User user, Version version) { var pipeline = (DefaultChannelPipeline) ctx.pipeline(); cleanPipeline(pipeline); var appStateHolder = new MobileStateHolder(user, version); pipeline.addLast("AAppHandler", new MobileHandler(holder, appStateHolder)); var channel = ctx.channel(); //todo back compatibility code. remove in future. if (user.region == null || user.region.isEmpty()) { user.region = holder.props.region; } var session = holder.sessionDao.getOrCreateSessionByUser(appStateHolder.userKey, channel.eventLoop()); if (session.isSameEventLoop(channel)) { completeLogin(channel, session, user, messageId, version); } else { log.debug("Re registering app channel. {}", ctx.channel()); ReregisterChannelUtil.reRegisterChannel(ctx, session, channelFuture -> completeLogin(channelFuture.channel(), session, user, messageId, version)); } }
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(); } } }
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(); }
boolean isNewSyncFormat = mobileStateHolder != null && mobileStateHolder.isNewSyncFormat(); user.profile.sendAppSyncs(dash, appChannel, ANY_TARGET, isNewSyncFormat); appChannel.flush();