diff --git a/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/HardwareHandler.java b/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/HardwareHandler.java index 84f3d5dfb9..3c56d8472d 100644 --- a/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/HardwareHandler.java +++ b/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/HardwareHandler.java @@ -58,7 +58,8 @@ public HardwareHandler(Holder holder, HardwareStateHolder stateHolder) { holder.twitterWrapper, holder.limits.notificationPeriodLimitSec); this.smsLogic = new SmsLogic(holder.smsWrapper, holder.limits.notificationPeriodLimitSec); this.propertyLogic = new SetWidgetPropertyLogic(holder.sessionDao); - this.info = new BlynkInternalLogic(holder.otaManager, holder.limits.hardwareIdleTimeout); + this.info = new BlynkInternalLogic(holder.otaManager, holder.limits.hardwareIdleTimeout, + holder.props.getProperty("net.throttleBoardType", "")); this.state = stateHolder; } diff --git a/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/logic/BlynkInternalLogic.java b/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/logic/BlynkInternalLogic.java index 8e7223ed0e..1c3cff7388 100644 --- a/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/logic/BlynkInternalLogic.java +++ b/server/tcp-hardware-server/src/main/java/cc/blynk/server/hardware/handlers/hardware/logic/BlynkInternalLogic.java @@ -11,6 +11,7 @@ import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.traffic.ChannelTrafficShapingHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -37,10 +38,12 @@ public class BlynkInternalLogic { private final OTAManager otaManager; private final int hardwareIdleTimeout; + private final String throttleBoardType; - public BlynkInternalLogic(OTAManager otaManager, int hardwareIdleTimeout) { + public BlynkInternalLogic(OTAManager otaManager, int hardwareIdleTimeout, String throttleBoardType) { this.otaManager = otaManager; this.hardwareIdleTimeout = hardwareIdleTimeout; + this.throttleBoardType = throttleBoardType; } public void messageReceived(ChannelHandlerContext ctx, HardwareStateHolder state, StringMessage message) { @@ -98,6 +101,17 @@ private void parseHardwareInfo(ChannelHandlerContext ctx, String[] messageParts, otaManager.initiateHardwareUpdate(ctx, state.userKey, hardwareInfo, dashBoard, device); device.hardwareInfo = hardwareInfo; dashBoard.updatedAt = System.currentTimeMillis(); + + if (this.throttleBoardType.isEmpty() + || !hardwareInfo.boardType.equals(this.throttleBoardType)) { + try { + log.trace("Removing throttle for boardType '{}'.", + hardwareInfo.boardType, this.throttleBoardType); + ctx.pipeline().remove(ChannelTrafficShapingHandler.class); + } catch (Exception e) { + log.debug("Couldn't remove channel throttle."); + } + } } ctx.writeAndFlush(ok(msgId), ctx.voidPromise());