package cn.iocoder.yudao.module.iot.gateway.protocol.coap.handler.upstream;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.eclipse.californium.core.CoapResource;
|
import org.eclipse.californium.core.server.resources.CoapExchange;
|
import org.eclipse.californium.core.server.resources.Resource;
|
|
/**
|
* IoT 网关 CoAP 协议的【上行】Topic 资源
|
*
|
* 支持任意深度的路径匹配:
|
* - /topic/sys/{productKey}/{deviceName}/thing/property/post
|
* - /topic/sys/{productKey}/{deviceName}/thing/event/{eventId}/post
|
*
|
* @author 芋道源码
|
*/
|
@Slf4j
|
public class IotCoapUpstreamTopicResource extends CoapResource {
|
|
public static final String PATH = "topic";
|
|
private final String serverId;
|
private final IotCoapUpstreamHandler upstreamHandler;
|
|
/**
|
* 创建根资源(/topic)
|
*/
|
public IotCoapUpstreamTopicResource(String serverId,
|
IotCoapUpstreamHandler upstreamHandler) {
|
this(PATH, serverId, upstreamHandler);
|
log.info("[IotCoapUpstreamTopicResource][创建 CoAP 上行 Topic 资源: /{}]", PATH);
|
}
|
|
/**
|
* 创建子资源(动态路径)
|
*/
|
private IotCoapUpstreamTopicResource(String name,
|
String serverId,
|
IotCoapUpstreamHandler upstreamHandler) {
|
super(name);
|
this.serverId = serverId;
|
this.upstreamHandler = upstreamHandler;
|
}
|
|
@Override
|
public Resource getChild(String name) {
|
// 递归创建动态子资源,支持任意深度路径
|
return new IotCoapUpstreamTopicResource(name, serverId, upstreamHandler);
|
}
|
|
@Override
|
public void handleGET(CoapExchange exchange) {
|
upstreamHandler.handle(exchange);
|
}
|
|
@Override
|
public void handlePOST(CoapExchange exchange) {
|
upstreamHandler.handle(exchange);
|
}
|
|
@Override
|
public void handlePUT(CoapExchange exchange) {
|
upstreamHandler.handle(exchange);
|
}
|
|
}
|