package cc.blynk.server.core.model.widgets.others.rtc;
import cc.blynk.server.core.model.Pin;
import cc.blynk.server.core.model.widgets.OnePinWidget;
import cc.blynk.utils.DateTimeUtils;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.netty.channel.ChannelHandlerContext;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import static cc.blynk.server.core.protocol.enums.Command.HARDWARE;
import static cc.blynk.utils.BlynkByteBufUtil.makeUTF8StringMessage;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 21.03.15.
*/
//todo RTC should be NoPinWidget. fix after migration.
public class RTC extends OnePinWidget {
@JsonSerialize(using = ZoneIdToString.class)
@JsonDeserialize(using = StringToZoneId.class, as = ZoneId.class)
public ZoneId tzName;
@Override
public String getModeType() {
return null;
}
@Override
public String makeHardwareBody() {
return null;
}
@Override
public int getPrice() {
return 100;
}
@Override
//todo remove after migration.
public void sendHardSync(ChannelHandlerContext ctx, int msgId, int deviceId) {
if (this.deviceId == deviceId) {
final String body = Pin.makeHardwareBody(pinType, pin, getTime());
ctx.write(makeUTF8StringMessage(HARDWARE, msgId, body), ctx.voidPromise());
}
}
public String getTime() {
ZoneId zone;
if (tzName != null) {
zone = tzName;
} else {
zone = DateTimeUtils.UTC;
}
LocalDateTime ldt = LocalDateTime.now(zone);
return "" + ldt.toEpochSecond(ZoneOffset.UTC);
}
@Override
public String getJsonValue() {
return "[" + getTime() + "]";
}
}