package cc.blynk.server.core.model.widgets.controls; import cc.blynk.server.core.model.Pin; import cc.blynk.server.core.model.widgets.HardwareSyncWidget; import cc.blynk.server.core.model.widgets.MultiPinWidget; import cc.blynk.utils.StringUtils; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import java.util.StringJoiner; import static cc.blynk.server.core.protocol.enums.Command.APP_SYNC; import static cc.blynk.server.core.protocol.enums.Command.HARDWARE; import static cc.blynk.utils.BlynkByteBufUtil.makeUTF8StringMessage; import static cc.blynk.utils.StringUtils.prependDashIdAndDeviceId; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 21.03.15. */ public class RGB extends MultiPinWidget implements HardwareSyncWidget { public boolean splitMode; public boolean sendOnReleaseOn; public int frequency; @Override public void sendHardSync(ChannelHandlerContext ctx, int msgId, int deviceId) { if (pins == null || this.deviceId != deviceId) { return; } if (isSplitMode()) { for (Pin pin : pins) { if (pin.notEmpty()) { ctx.write(makeUTF8StringMessage(HARDWARE, msgId, pin.makeHardwareBody()), ctx.voidPromise()); } } } else { if (pins[0].notEmpty()) { ctx.write(makeUTF8StringMessage(HARDWARE, msgId, pins[0].makeHardwareBody()), ctx.voidPromise()); } } } @Override public void sendAppSync(Channel appChannel, int dashId, int targetId) { if (pins == null) { return; } if (targetId == ANY_TARGET || this.deviceId == targetId) { if (isSplitMode()) { for (Pin pin : pins) { if (pin.notEmpty()) { String body = prependDashIdAndDeviceId(dashId, deviceId, pin.makeHardwareBody()); appChannel.write(makeUTF8StringMessage(APP_SYNC, SYNC_DEFAULT_MESSAGE_ID, body), appChannel.voidPromise()); } } } else { if (pins[0].notEmpty()) { String body = prependDashIdAndDeviceId(dashId, deviceId, pins[0].makeHardwareBody()); appChannel.write(makeUTF8StringMessage(APP_SYNC, SYNC_DEFAULT_MESSAGE_ID, body), appChannel.voidPromise()); } } } } @Override public String getJsonValue() { if (pins == null) { return "[]"; } if (isSplitMode()) { return super.getJsonValue(); } else { StringJoiner sj = new StringJoiner(",", "[", "]"); if (pins[0].notEmpty()) { for (String pinValue : pins[0].value.split(StringUtils.BODY_SEPARATOR_STRING)) { sj.add("\"" + pinValue + "\""); } } return sj.toString(); } } public boolean isSplitMode() { return splitMode; } @Override public String getModeType() { return "out"; } @Override public int getPrice() { return 400; } }