package cc.blynk.server.core.model.widgets.outputs; import cc.blynk.server.core.model.Pin; import cc.blynk.server.core.model.enums.PinType; import cc.blynk.server.core.model.widgets.OnePinWidget; import cc.blynk.utils.JsonParser; import cc.blynk.utils.ParseUtil; import cc.blynk.utils.structure.LimitedArrayDeque; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import static cc.blynk.server.core.protocol.enums.Command.APP_SYNC; 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 Map extends OnePinWidget { private static final int POOL_SIZE = ParseUtil.parseInt(System.getProperty("map.strings.pool.size", "25")); private transient final LimitedArrayDeque<String> lastCommands = new LimitedArrayDeque<>(POOL_SIZE); public boolean isPinToLatestPoint; public boolean isMyLocationSupported; public String labelFormat; public int radius; //zoom level / radius which user selected. public float lat; // last user position on map public float lon; // last user position on map @Override public boolean updateIfSame(int deviceId, byte pin, PinType type, String value) { if (isSame(deviceId, pin, type)) { switch (value) { case "clr" : this.value = null; this.lastCommands.clear(); break; default: this.value = value; this.lastCommands.add(value); break; } return true; } return false; } @Override public void sendAppSync(Channel appChannel, int dashId, int targetId) { if (pin == Pin.NO_PIN || pinType == null || lastCommands.size() == 0) { return; } if (targetId == ANY_TARGET || this.deviceId == targetId) { for (String storedValue : lastCommands) { String body = prependDashIdAndDeviceId(dashId, deviceId, makeHardwareBody(pinType, pin, storedValue)); appChannel.write(makeUTF8StringMessage(APP_SYNC, SYNC_DEFAULT_MESSAGE_ID, body)); } } } @Override public void sendHardSync(ChannelHandlerContext ctx, int msgId, int deviceId) { } @Override public String getJsonValue() { return JsonParser.toJson(lastCommands); } @Override public String getModeType() { return "in"; } @Override public int getPrice() { return 600; } }