public static void messageReceived(ChannelHandlerContext ctx, MobileStateHolder state,
StringMessage message, int maxWidgetSize) {
var appString = message.body;
if (appString == null || appString.isEmpty()) {
throw new IllegalCommandException("Income app message is empty.");
}
if (appString.length() > maxWidgetSize) {
throw new NotAllowedException("App is larger then limit.", message.id);
}
var newApp = JsonParser.parseApp(appString, message.id);
newApp.id = AppNameUtil.generateAppId();
if (newApp.isNotValid()) {
throw new NotAllowedException("App is not valid.", message.id);
}
log.debug("Creating new app {}.", newApp);
var user = state.user;
if (user.profile.apps.length > 25) {
throw new NotAllowedException("App limit is reached.", message.id);
}
for (App app : user.profile.apps) {
if (app.id.equals(newApp.id)) {
throw new NotAllowedException("App with same id already exists.", message.id);
}
}
user.profile.apps = ArrayUtil.add(user.profile.apps, newApp, App.class);
user.lastModifiedTs = System.currentTimeMillis();
ctx.writeAndFlush(makeUTF8StringMessage(CREATE_APP, message.id, JsonParser.toJson(newApp)), ctx.voidPromise());
}