package cc.blynk.server.application.handlers.main.logic.sharing;
import cc.blynk.server.application.handlers.main.auth.AppStateHolder;
import cc.blynk.server.core.dao.SessionDao;
import cc.blynk.server.core.model.DashBoard;
import cc.blynk.server.core.model.auth.Session;
import cc.blynk.server.core.protocol.exceptions.IllegalCommandBodyException;
import cc.blynk.server.core.protocol.model.messages.StringMessage;
import cc.blynk.utils.ParseUtil;
import cc.blynk.utils.StringUtils;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import static cc.blynk.utils.AppStateHolderUtil.getAppState;
import static cc.blynk.utils.BlynkByteBufUtil.ok;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 2/1/2015.
*
*/
public class ShareLogic {
private final SessionDao sessionDao;
public ShareLogic(SessionDao sessionDao) {
this.sessionDao = sessionDao;
}
public void messageReceived(ChannelHandlerContext ctx, AppStateHolder state, StringMessage message) {
String[] splitted = message.body.split(StringUtils.BODY_SEPARATOR_STRING);
int dashId = ParseUtil.parseInt(splitted[0]);
DashBoard dash = state.user.profile.getDashByIdOrThrow(dashId);
switch (splitted[1]) {
case "on" :
dash.isShared = true;
break;
case "off" :
dash.isShared = false;
break;
default:
throw new IllegalCommandBodyException("Wrong share command body");
}
Session session = sessionDao.userSession.get(state.userKey);
for (Channel appChannel : session.appChannels) {
if (appChannel != ctx.channel() && getAppState(appChannel) != null) {
appChannel.writeAndFlush(message, appChannel.voidPromise());
}
}
ctx.writeAndFlush(ok(message.id), ctx.voidPromise());
}
}