8 Commits

Author SHA1 Message Date
wujiawei
ca87968469 [fix] 修改唯一索引问题 2025-06-07 01:25:08 +08:00
wujiawei
903ba88787 [fix] 修改枚举问题 2025-06-07 00:36:20 +08:00
wujiawei
0505d6d201 [fix] 添加代理流量统计 2025-06-07 00:27:02 +08:00
wujiawei
556cb3fd1b [fix] 添加代理流量统计 2025-06-07 00:26:37 +08:00
wujiawei
ddb709c3a8 [fix] socks、http代理 添加流量计费 2025-06-06 23:13:01 +08:00
wujiawei
9cd85abe1d [fix] socks、http代理 添加流量计费 2025-06-06 23:01:52 +08:00
wujiawei
664bafdc86 Merge remote-tracking branch 'origin/master' 2025-06-06 22:14:20 +08:00
wujiawei
3b9379a7aa [fix] socks、http代理 添加流量计费 2025-06-06 21:25:31 +08:00
87 changed files with 5335 additions and 118 deletions

View File

@@ -10,8 +10,8 @@ mvn native:build -Pnative
### 构建docker镜像 ### 构建docker镜像
```shell ```shell
docker build -t docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest -f Native-Dockerfile . docker build -t docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-NATIVE-SNAPSHOT_latest -f Native-Dockerfile .
docker push docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest docker push docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-NATIVE-SNAPSHOT_latest
``` ```
## BUILD IMAGE ## BUILD IMAGE

View File

@@ -25,12 +25,14 @@ public class NettyHttpClientProxyClientRealHandler extends SimpleChannelInboundH
log.debug("客户端代理客户端,接收目标客户端真实服务数据:{}", new String(bytes)); log.debug("客户端代理客户端,接收目标客户端真实服务数据:{}", new String(bytes));
String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel());
String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel());
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(ctx.channel());
// 访客通信通道 上报服务端代理完成 // 访客通信通道 上报服务端代理完成
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel()); Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel());
NettyProxyMsg returnMessage = new NettyProxyMsg(); NettyProxyMsg returnMessage = new NettyProxyMsg();
returnMessage.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_); returnMessage.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
returnMessage.setVisitorId(visitorId); returnMessage.setVisitorId(visitorId);
returnMessage.setClientId(clientId); returnMessage.setClientId(clientId);
returnMessage.setVisitorPort(visitorPort);
returnMessage.setData(bytes); returnMessage.setData(bytes);
nextChannel.writeAndFlush(returnMessage); nextChannel.writeAndFlush(returnMessage);

View File

@@ -28,8 +28,8 @@ public class NettyHttpClientProxyClientRealSocket {
public static void buildRealServer(String clientId, public static void buildRealServer(String clientId,
String clientTargetIp, String targetIp,
Integer clientTargetPort, Integer targetPort,
String visitorId, String visitorId,
NettyClientProperties nettyClientProperties, NettyClientProperties nettyClientProperties,
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList) { List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList) {
@@ -52,25 +52,26 @@ public class NettyHttpClientProxyClientRealSocket {
; ;
bootstrap.connect(clientTargetIp, clientTargetPort).addListener((ChannelFutureListener) future -> { bootstrap.connect(targetIp, targetPort).addListener((ChannelFutureListener) future -> {
if (future.isSuccess()) { if (future.isSuccess()) {
// 客户端链接真实服务成功 设置自动读写false 等待访客连接成功后设置成true // 客户端链接真实服务成功 设置自动读写false 等待访客连接成功后设置成true
Channel realChannel = future.channel(); Channel realChannel = future.channel();
// realChannel.config().setOption(ChannelOption.AUTO_READ, false); // realChannel.config().setOption(ChannelOption.AUTO_READ, false);
log.info("访客通过 客户端:【{}】,visitorId:{},绑定本地服务,IP:{},端口:{} 新建通道成功", clientId, visitorId, clientTargetIp, clientTargetPort); log.info("访客通过 客户端:【{}】,visitorId:{},绑定本地服务,IP:{},端口:{} 新建通道成功", clientId, visitorId, targetIp, targetPort);
// 客户端真实通道 // 客户端真实通道
NettyRealIdContext.pushReal(realChannel, visitorId); NettyRealIdContext.pushReal(realChannel, visitorId);
// 绑定访客ID到当前真实通道属性 // 绑定访客ID到当前真实通道属性
ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId); ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId);
ChannelAttributeKeyUtils.buildClientId(realChannel, clientId); ChannelAttributeKeyUtils.buildClientId(realChannel, clientId);
ChannelAttributeKeyUtils.buildVisitorPort(realChannel, targetPort);
// 连接服务端 然后绑定通道 // 连接服务端 然后绑定通道
// 新建一个通道处理 // 新建一个通道处理
newVisitorConnect2Server( newVisitorConnect2Server(
clientId, clientId,
clientTargetIp, targetIp,
clientTargetPort, targetPort,
visitorId, visitorId,
realChannel, realChannel,
nettyClientProperties, nettyClientProperties,
@@ -79,7 +80,7 @@ public class NettyHttpClientProxyClientRealSocket {
} else { } else {
log.error("客户:【{}】,无法连接当前网络内的目标IP【{}】,目标端口:【{}】", clientId, clientTargetIp, clientTargetPort); log.error("客户:【{}】,无法连接当前网络内的目标IP【{}】,目标端口:【{}】", clientId, targetIp, targetPort);
} }
}); });
} catch (Exception e) { } catch (Exception e) {

View File

@@ -72,7 +72,7 @@ public class NettyHttpClientProxyServerProxySocket {
if (futureListener.isSuccess()) { if (futureListener.isSuccess()) {
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_); nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_);
// other clientId // other clientId
nettyProxyMsg.setClientId(clientId); nettyProxyMsg.setClientId(clientId);

View File

@@ -72,6 +72,7 @@ public class NettySocksClientProxyServerSocket {
nettyProxyMsg.setClientTargetIp(targetIp); nettyProxyMsg.setClientTargetIp(targetIp);
nettyProxyMsg.setClientTargetPort(targetPort); nettyProxyMsg.setClientTargetPort(targetPort);
nettyProxyMsg.setClientId(clientId);
nettyProxyMsg.setVisitorId(visitorId); nettyProxyMsg.setVisitorId(visitorId);
nettyProxyMsg.setData(new byte[]{socks5AddressTypeByteValue}); nettyProxyMsg.setData(new byte[]{socks5AddressTypeByteValue});
transferChannel.writeAndFlush(nettyProxyMsg); transferChannel.writeAndFlush(nettyProxyMsg);

View File

@@ -0,0 +1,65 @@
package org.framework.lazy.cloud.network.heartbeat.common.adapter;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.HandleChannelFlowAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.HandleChannelProxyFlowAdvanced;
import java.util.List;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 通道流量适配器
*
* @see HandleChannelFlowAdvanced
*/
@Slf4j
public class ChannelProxyFlowAdapter {
ThreadPoolExecutor CHANNEL_FLOW_ADAPTER_EXECUTOR =
new ThreadPoolExecutor(20, 200, 3L, TimeUnit.MINUTES,
new LinkedBlockingDeque<>(500),new ThreadPoolExecutor.AbortPolicy());
// 线程使用完后使用主线程执行
protected final List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList;
public ChannelProxyFlowAdapter(List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList) {
this.handleChannelProxyFlowAdvancedList = handleChannelProxyFlowAdvancedList;
}
/**
* 处理当前数据
*
* @param channelProxyFlow 通道数据
*/
public void handler(Channel channel, ChannelProxyFlow channelProxyFlow) {
for (HandleChannelProxyFlowAdvanced handleChannelProxyFlowAdvanced : handleChannelProxyFlowAdvancedList) {
if (handleChannelProxyFlowAdvanced.support(channelProxyFlow)) {
try {
handleChannelProxyFlowAdvanced.handler(channel, channelProxyFlow);
} catch (Exception e) {
log.error("流量统计失败:{}", e.getMessage());
}
return;
}
}
}
/**
* 异步处理当前数据
*
* @param channelProxyFlow 通道数据
*/
public void asyncHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
// TODO 流量并发异常
CHANNEL_FLOW_ADAPTER_EXECUTOR.submit(() -> handler(channel, channelProxyFlow));
}
}

View File

@@ -0,0 +1,49 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
import io.netty.channel.Channel;
/**
* 处理通道流量适配者 抽象类
*
* @see HandleChannelProxyFlowAdvanced
*/
public abstract class AbstractHandleChannelProxyFlowAdvanced implements HandleChannelProxyFlowAdvanced {
/**
* 是否支持当前这种类型
*
* @param channelProxyFlow 数据
* @return boolean
*/
@Override
public boolean support(ChannelProxyFlow channelProxyFlow) {
return doSupport(channelProxyFlow);
}
/**
* 处理是否支持这种类型
*
* @param channelProxyFlow 数据
* @return boolean
*/
protected abstract boolean doSupport(ChannelProxyFlow channelProxyFlow);
/**
* 处理当前数据
*
* @param channel 当前通道
* @param channelProxyFlow 通道数据
*/
@Override
public void handler(Channel channel, ChannelProxyFlow channelProxyFlow) {
doHandler(channel, channelProxyFlow);
}
/**
* 处理当前数据
*
* @param channel 当前通道
* @param channelProxyFlow 通道数据
*/
protected abstract void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow);
}

View File

@@ -0,0 +1,57 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
public interface ChannelProxyFlow {
/**
* 通道客户端ID
*
* @return 通道客户端ID
*/
String clientId();
/**
* ip
* @return ip
*/
String ip();
/**
* 通道使用的端口(服务端访客端口、客户端真实端口)
*
* @return 端口
*/
Integer port();
/**
* 通道流量类型
*
* @return ChannelFlowEnum
* @see ChannelFlowEnum
*/
ChannelFlowEnum channelFlowEnum();
/**
* 代理流量类型
* @see ChannelProtocolType
*/
ChannelProtocolType channelProtocolType();
/**
* 代理类型
* @see ChannelProxyType
*/
ChannelProxyType channelProxyType();
/**
* 流量
*
* @return 流量
*/
Integer flow();
}

View File

@@ -0,0 +1,25 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
import io.netty.channel.Channel;
/**
* 处理通道流量适配者
*/
public interface HandleChannelProxyFlowAdvanced {
/**
* 是否支持当前这种类型
*
* @param channelProxyFlow 数据
* @return boolean
*/
boolean support(ChannelProxyFlow channelProxyFlow);
/**
* 处理当前数据
*
* @param channel 当前通道
* @param channelProxyFlow 通道数据
*/
void handler(Channel channel, ChannelProxyFlow channelProxyFlow);
}

View File

@@ -201,6 +201,24 @@ public class NettyProxyMsg {
return new String(clientTargetPort, StandardCharsets.UTF_8); return new String(clientTargetPort, StandardCharsets.UTF_8);
} }
/**
* 获取访客ID
* @return
*/
public String getVisitorIdString() {
if (ObjectUtils.isEmpty(visitorId)) {
return null;
}
return new String(visitorId, StandardCharsets.UTF_8);
}
public Integer getVisitorPortInt() {
if (ObjectUtils.isEmpty(visitorPort)) {
return null;
}
return Integer.valueOf(new String(visitorPort, StandardCharsets.UTF_8));
}
public void setClientTargetIp(byte[] clientTargetIp) { public void setClientTargetIp(byte[] clientTargetIp) {
this.clientTargetIp = clientTargetIp; this.clientTargetIp = clientTargetIp;
} }
@@ -253,4 +271,6 @@ public class NettyProxyMsg {
public void setIsSsl(byte isSsl) { public void setIsSsl(byte isSsl) {
this.isSsl = isSsl; this.isSsl = isSsl;
} }
} }

View File

@@ -0,0 +1,21 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
public abstract class AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型 是、否
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@@ -9,7 +9,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeE
* 服务端处理客户端上报的代理请求数据 * 服务端处理客户端上报的代理请求数据
* @param <MSG> * @param <MSG>
*/ */
public abstract class AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced { public abstract class AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/** /**
@@ -20,6 +20,6 @@ public abstract class AbstractHandleHttpReportClientProxyServerTransferTypeAdvan
*/ */
@Override @Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_.getTypeByte() == nettyProxyMsg.getType(); return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
} }
} }

View File

@@ -0,0 +1,25 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
/**
* 服务端处理客户端上报的代理请求数据
* @param <MSG>
*/
public abstract class AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型 是、否
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@@ -0,0 +1,21 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
public abstract class AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型 是、否
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@@ -0,0 +1,21 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
public abstract class AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型 是、否
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return ProxyMessageTypeEnums.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@@ -42,19 +42,29 @@ public class ProxyMessageType {
*/ */
public static final byte HTTP_CLIENT_PROXY_SERVER_ = HTTP_CLIENT_PROXY_CLIENT_ + 1; public static final byte HTTP_CLIENT_PROXY_SERVER_ = HTTP_CLIENT_PROXY_CLIENT_ + 1;
/** /**
* http 远程服务端代理传输数据上报 * http 远程服务端代理传输数据上报请求
* *
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ * @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_
* @see AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced * @see AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
*/ */
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ = HTTP_CLIENT_PROXY_SERVER_ + 1; public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ = HTTP_CLIENT_PROXY_SERVER_ + 1;
/**
* http 远程服务端代理传输数据上报请求结果
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
* @see AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
*/
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1;
/** /**
* http 远程代理服务通道关闭 * http 远程代理服务通道关闭
* *
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ * @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_
* @see AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced * @see AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced
*/ */
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ + 1; public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ + 1;
/** /**
@@ -74,6 +84,14 @@ public class ProxyMessageType {
*/ */
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + 1; public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + 1;
/**
* http 另一个客户端将返回数据通过传输通道返回
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
*/
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1;
/** /**
* http 另一个客户端将返回数据通过传输通道返回 * http 另一个客户端将返回数据通过传输通道返回
@@ -81,7 +99,7 @@ public class ProxyMessageType {
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ * @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_
* @see AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced * @see AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
*/ */
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1; public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + 1;
/** /**
* 上报传输通道关闭 * 上报传输通道关闭
@@ -165,6 +183,14 @@ public class ProxyMessageType {
*/ */
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CONNECTION_ + 1; public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CONNECTION_ + 1;
/**
* socket 上报客户端代理服务端结果
*
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
* @see AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
*/
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1;
/** /**
* socket 上报客户端代理服务端传输通道关闭 * socket 上报客户端代理服务端传输通道关闭
@@ -172,7 +198,7 @@ public class ProxyMessageType {
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_
* @see AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced * @see AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced
*/ */
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1; public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ + 1;
@@ -253,13 +279,21 @@ public class ProxyMessageType {
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ = SOCKS_SERVER_PROXY_CLIENT_ + 1; public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ = SOCKS_SERVER_PROXY_CLIENT_ + 1;
/**
* socket 上报客户端代理服务端 请求
*
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced
*/
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ + 1;
/** /**
* socket 上报客户端代理服务端 结果返回 * socket 上报客户端代理服务端 结果返回
* *
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_ * @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_
* @see AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced * @see AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced
*/ */
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ + 1; public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_ + 1;
/** /**
* socket 上报客户端代理服务端 传输通道关闭 * socket 上报客户端代理服务端 传输通道关闭

View File

@@ -0,0 +1,17 @@
package org.framework.lazy.cloud.network.heartbeat.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代理流量类型
*/
@Getter
@AllArgsConstructor
public enum ChannelProtocolType {
// HTTP
HTTP,
// Socks
SOCKS
}

View File

@@ -0,0 +1,19 @@
package org.framework.lazy.cloud.network.heartbeat.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代理类型
*/
@Getter
@AllArgsConstructor
public enum ChannelProxyType {
SERVER_PROXY_SERVER("服务端代理服务端"),
SERVER_PROXY_CLIENT("服务端远程客户端"),
CLIENT_PROXY_CLIENT("客户端远程客户端"),
CLIENT_PROXY_SEVER("客户端远程服务端");
private final String desc;
}

View File

@@ -40,9 +40,16 @@ public enum ProxyMessageTypeEnums {
HTTP_CLIENT_PROXY_SERVER_(ProxyMessageType.HTTP_CLIENT_PROXY_SERVER_, "http远程服务端代理"), HTTP_CLIENT_PROXY_SERVER_(ProxyMessageType.HTTP_CLIENT_PROXY_SERVER_, "http远程服务端代理"),
/** /**
* http 远程服务端代理传输数据上报 * http 远程服务端代理传输数据上报
* @see AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced * @see AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
*/ */
HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_, "http远程服务端代理传输数据上报"), HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_, "远程服务端代理传输数据上报请求"),
/**
* http 远程服务端代理传输数据上报请求结果
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
* @see AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
*/
HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_, "远程服务端代理传输数据上报请求结果"),
/** /**
* http 远程服务端代理传输数据下发 * http 远程服务端代理传输数据下发
* @see AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced * @see AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced
@@ -103,6 +110,14 @@ public enum ProxyMessageTypeEnums {
* @see AbstractHandleHttpDistributeClientProxyClientTransferRequestTypeAdvanced * @see AbstractHandleHttpDistributeClientProxyClientTransferRequestTypeAdvanced
*/ */
HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 下发数据到另一个客户端"), HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 下发数据到另一个客户端"),
/**
* http 另一个客户端将返回数据通过传输通道 请求
*
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
*/
HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 另一个客户端将返回数据通过传输通道请求"),
/** /**
* http 另一个客户端将返回数据通过传输通道返回 * http 另一个客户端将返回数据通过传输通道返回
* *
@@ -214,6 +229,13 @@ public enum ProxyMessageTypeEnums {
* @see AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced * @see AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
*/ */
SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_, "socket 上报客户端代理服务端请求"), SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_, "socket 上报客户端代理服务端请求"),
/**
* socket 上报客户端代理服务端结果
*
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
* @see AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
*/
SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_, "socket 上报客户端代理服务端结果"),
/** /**
* socket 下发客户端代理服务端数据返回 * socket 下发客户端代理服务端数据返回
* *
@@ -344,6 +366,14 @@ public enum ProxyMessageTypeEnums {
* @see AbstractHandleSocksDistributeServerProxyClientRequestTypeAdvanced * @see AbstractHandleSocksDistributeServerProxyClientRequestTypeAdvanced
*/ */
SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 下发客户端代理服务端 请求数据"), SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 下发客户端代理服务端 请求数据"),
/**
* socket 上报客户端代理服务端 请求
*
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_
* @see AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced
*/
SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 上报客户端代理服务端 请求"),
/** /**
* socket 上报客户端代理服务端 结果返回 * socket 上报客户端代理服务端 结果返回
* *

View File

@@ -16,6 +16,9 @@ public class ChannelAttributeKeyUtils {
private static final AttributeKey<String> APP_KEY = AttributeKey.newInstance("appKey"); private static final AttributeKey<String> APP_KEY = AttributeKey.newInstance("appKey");
private static final AttributeKey<String> APP_SECRET = AttributeKey.newInstance("appSecret"); private static final AttributeKey<String> APP_SECRET = AttributeKey.newInstance("appSecret");
private static final AttributeKey<String> ORIGINAL_IP = AttributeKey.newInstance("originalIp"); private static final AttributeKey<String> ORIGINAL_IP = AttributeKey.newInstance("originalIp");
private static final AttributeKey<String> TARGET_IP = AttributeKey.newInstance("targetIp");
private static final AttributeKey<Integer> TARGET_PORT = AttributeKey.newInstance("targetPort");
private static final AttributeKey<String> TARGET_CLIENT_ID = AttributeKey.newInstance("targetClientId");
private static final AttributeKey<Integer> OUT_FLOW = AttributeKey.newInstance("outFlow"); private static final AttributeKey<Integer> OUT_FLOW = AttributeKey.newInstance("outFlow");
private static final AttributeKey<Integer> IN_FLOW = AttributeKey.newInstance("inFlow"); private static final AttributeKey<Integer> IN_FLOW = AttributeKey.newInstance("inFlow");
@@ -85,6 +88,36 @@ public class ChannelAttributeKeyUtils {
} }
/**
* 为通道绑定 访客属性
*
* @param channel 通道
* @param targetClientId 客户端ID
*/
public static void buildTargetClientId(Channel channel, byte[] targetClientId) {
channel.attr(TARGET_CLIENT_ID).set(new String(targetClientId));
}
/**
* 为通道绑定 访客属性
*
* @param channel 通道
* @param targetClientId 客户端ID
*/
public static void buildTargetClientId(Channel channel, String targetClientId) {
channel.attr(TARGET_CLIENT_ID).set(targetClientId);
}
/**
* 获取 通道中访客ID
*
* @param channel 通道
*/
public static String getTargetClientId(Channel channel) {
return channel.attr(TARGET_CLIENT_ID).get();
}
/** /**
* 为通道绑定 出口流量 * 为通道绑定 出口流量
* *
@@ -259,6 +292,45 @@ public class ChannelAttributeKeyUtils {
return channel.attr(ORIGINAL_IP).get(); return channel.attr(ORIGINAL_IP).get();
} }
/**
* 为通道绑定 目标IP
*
* @param channel 通道
* @param targetIp 目标IP
*/
public static void buildTargetIp(Channel channel, String targetIp) {
channel.attr(TARGET_IP).set(targetIp);
}
/**
* 获取 通道中 目标IP
*
* @param channel 通道
*/
public static String getTargetIp(Channel channel) {
return channel.attr(TARGET_IP).get();
}
/**
* 为通道绑定 目标端口
*
* @param channel 通道
* @param targetIp 目标端口
*/
public static void buildTargetPort(Channel channel, Integer targetPort) {
channel.attr(TARGET_PORT).set(targetPort);
}
/**
* 获取 通道中 目标端口
*
* @param channel 通道
*/
public static Integer getTargetPort(Channel channel) {
return channel.attr(TARGET_PORT).get();
}
/** /**
* 为通道绑定 请求地址类型 * 为通道绑定 请求地址类型
* *

View File

@@ -2,6 +2,7 @@ package org.framework.lazy.cloud.network.heartbeat.server.config;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.tcp.advanced.*; import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.tcp.advanced.*;
import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.udp.advanced.*; import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.udp.advanced.*;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advanced.*; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advanced.*;
@@ -202,18 +203,24 @@ public class ServerAutoConfiguration {
@Configuration() @Configuration()
static class ServerHttpProxyConfiguration { static class ServerHttpProxyConfiguration {
@Bean @Bean
public ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced() { public ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced(); return new ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean
public ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced(channelProxyFlowAdapter);
}
@Bean @Bean
public ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced serverHandleHttpReportClientProxyServerTransferCloseTypeAdvanced() { public ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced serverHandleHttpReportClientProxyServerTransferCloseTypeAdvanced() {
return new ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced(); return new ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced();
} }
@Bean @Bean
public ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced serverHandleHttpReportClientProxyClientConnectTransferTypeAdvanced() { public ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced serverHandleHttpReportClientProxyClientConnectTransferTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced(); return new ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
@@ -222,8 +229,8 @@ public class ServerAutoConfiguration {
} }
@Bean @Bean
public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced serverHandleHttpReportClientProxyClientTransferResponseTypeAdvanced() { public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced serverHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(); return new ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
public ServerHandleHttpReportServerProxyClientTransferTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced1() { public ServerHandleHttpReportServerProxyClientTransferTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced1() {
@@ -235,13 +242,13 @@ public class ServerAutoConfiguration {
} }
@Bean @Bean
public ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced serverHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced() { public ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced serverHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced(); return new ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced serverHandleHttpReportServerProxyClientTransferResponseTypeAdvanced() { public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced serverHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(); return new ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
@@ -261,8 +268,13 @@ public class ServerAutoConfiguration {
return new ServerHandleSocksReportClientProxyServerTransferCloseTypeAdvanced(); return new ServerHandleSocksReportClientProxyServerTransferCloseTypeAdvanced();
} }
@Bean @Bean
public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced serverHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(){ public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced serverHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(); return new ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(channelProxyFlowAdapter);
}
@Bean
public ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced serverHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
@@ -276,8 +288,8 @@ public class ServerAutoConfiguration {
} }
@Bean @Bean
public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced serverHandleSocksReportClientProxyClientTransferRequestTypeAdvanced() { public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced serverHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
return new ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(); return new ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
@@ -285,8 +297,8 @@ public class ServerAutoConfiguration {
return new ServerHandleSocksReportClientProxyClientOtherConnectionTransferSuccessTypeAdvanced(); return new ServerHandleSocksReportClientProxyClientOtherConnectionTransferSuccessTypeAdvanced();
} }
@Bean @Bean
public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced serverHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(){ public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced serverHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
return new ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(); return new ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
@@ -300,8 +312,12 @@ public class ServerAutoConfiguration {
return new ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced(); return new ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced();
} }
@Bean @Bean
public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced serverHandleSocksReportServerProxyClientResponseTypeAdvanced(){ public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced serverHandleSocksReportServerProxyClientResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
return new ServerHandleSocksReportServerProxyClientResponseTypeAdvanced(); return new ServerHandleSocksReportServerProxyClientResponseTypeAdvanced(channelProxyFlowAdapter);
}
@Bean
public ServerHandleSocksReportServerProxyClientRequestTypeAdvanced serverHandleSocksReportServerProxyClientRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
return new ServerHandleSocksReportServerProxyClientRequestTypeAdvanced(channelProxyFlowAdapter);
} }
@Bean @Bean
public ServerHandleSocksReportServerProxyClientTransferCloseTypeAdvanced serverHandleSocksReportServerProxyClientTransferCloseTypeAdvanced(){ public ServerHandleSocksReportServerProxyClientTransferCloseTypeAdvanced serverHandleSocksReportServerProxyClientTransferCloseTypeAdvanced(){

View File

@@ -1,8 +1,13 @@
package org.framework.lazy.cloud.network.heartbeat.server.config; package org.framework.lazy.cloud.network.heartbeat.server.config;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.HandleChannelProxyFlowAdvanced;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerInFlowHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerInFlowHandler;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerHandlerInProxyFlowHandler;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerOutFlowHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerOutFlowHandler;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerHandlerOutProxyFlowHandler;
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties; import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -55,4 +60,43 @@ public class ServerFlowConfiguration {
return new ChannelFlowAdapter(handleChannelFlowAdvancedList); return new ChannelFlowAdapter(handleChannelFlowAdvancedList);
} }
/**
* 进口数据处理
*
* @return serverHandlerInProxyFlowHandler
*/
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Bean
public ServerHandlerInProxyFlowHandler serverHandlerInProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication,ServerNodeProperties serverNodeProperties) {
return new ServerHandlerInProxyFlowHandler(lazyProxyFlowApplication,serverNodeProperties);
}
/**
* 出口数据处理
*
* @return serverHandlerOutProxyFlowHandler
*/
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Bean
public ServerHandlerOutProxyFlowHandler serverHandlerOutProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
return new ServerHandlerOutProxyFlowHandler(lazyProxyFlowApplication,serverNodeProperties);
}
/**
* 服务端流量适配器
*
* @param handleChannelProxyFlowAdvancedList 服务端流量适配者
* @return 服务端流量适配器
*/
@ConditionalOnMissingBean(ChannelProxyFlowAdapter.class)
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public ChannelProxyFlowAdapter channelProxyFlowAdapter(List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList) {
return new ChannelProxyFlowAdapter(handleChannelProxyFlowAdvancedList);
}
} }

View File

@@ -0,0 +1,91 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
import lombok.Builder;
import lombok.Data;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
@Builder
@Data
public class ServerChannelProxyFlow implements ChannelProxyFlow {
private String clientId;
private String ip;
private Integer port;
private ChannelFlowEnum channelFlowEnum;
private ChannelProtocolType channelProtocolType;
private ChannelProxyType channelProxyType;
private Integer flow;
/**
* 通道客户端ID
*
* @return 通道客户端ID
*/
@Override
public String clientId() {
return clientId;
}
/**
* ip
*
* @return
*/
@Override
public String ip() {
return ip;
}
/**
* 通道使用的端口(服务端访客端口、客户端真实端口)
*
* @return 端口
*/
@Override
public Integer port() {
return port;
}
/**
* 通道流量类型
*
* @return ChannelFlowEnum
* @see ChannelFlowEnum
*/
@Override
public ChannelFlowEnum channelFlowEnum() {
return channelFlowEnum;
}
/**
* 代理流量类型
*
* @see ChannelProtocolType
*/
@Override
public ChannelProtocolType channelProtocolType() {
return channelProtocolType;
}
/**
* 代理类型
*
* @see ChannelProxyType
*/
@Override
public ChannelProxyType channelProxyType() {
return channelProxyType;
}
/**
* 流量
*
* @return 流量
*/
@Override
public Integer flow() {
return flow;
}
}

View File

@@ -0,0 +1,70 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
import io.netty.channel.Channel;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.AbstractHandleChannelProxyFlowAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
/**
* 进口流量处理
*/
public class ServerHandlerInProxyFlowHandler extends AbstractHandleChannelProxyFlowAdvanced {
private final LazyProxyFlowApplication lazyProxyFlowApplication;
private final ServerNodeProperties serverNodeProperties;
public ServerHandlerInProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
this.lazyProxyFlowApplication = lazyProxyFlowApplication;
this.serverNodeProperties = serverNodeProperties;
}
/**
* 处理是否支持这种类型
*
* @param channelProxyFlow 数据
* @return boolean
*/
@Override
protected boolean doSupport(ChannelProxyFlow channelProxyFlow) {
if (serverNodeProperties.getEnableFlowControl()) {
return ChannelFlowEnum.IN_FLOW.equals(channelProxyFlow.channelFlowEnum());
} else {
return false;
}
}
/**
* 处理当前数据
*
* @param channel 当前通道
* @param channelProxyFlow 通道数据
*/
@Override
protected void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
String clientId = channelProxyFlow.clientId();
String ip = channelProxyFlow.ip();
Integer port = channelProxyFlow.port();
Integer flow = channelProxyFlow.flow();
ChannelProtocolType channelProtocolType = channelProxyFlow.channelProtocolType();
ChannelProxyType channelProxyType = channelProxyFlow.channelProxyType();
// TODO
// 进口流量处理
LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand = new LazyProxyFlowStoryCommand();
lazyProxyFlowStoryCommand.setInFlow(flow);
lazyProxyFlowStoryCommand.setClientId(clientId);
lazyProxyFlowStoryCommand.setIp(ip);
lazyProxyFlowStoryCommand.setPort(port);
lazyProxyFlowStoryCommand.setProtocolType(channelProtocolType);
lazyProxyFlowStoryCommand.setProxyType(channelProxyType);
lazyProxyFlowStoryCommand.setIsDeleted(false);
lazyProxyFlowApplication.flowIncreaseStory(lazyProxyFlowStoryCommand);
}
}

View File

@@ -0,0 +1,73 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
import io.netty.channel.Channel;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.AbstractHandleChannelProxyFlowAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.ChannelFlow;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowStoryCommand;
/**
* 出口流量处理
*/
public class ServerHandlerOutProxyFlowHandler extends AbstractHandleChannelProxyFlowAdvanced {
private final LazyProxyFlowApplication lazyProxyFlowApplication;
private final ServerNodeProperties serverNodeProperties;
public ServerHandlerOutProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
this.lazyProxyFlowApplication = lazyProxyFlowApplication;
this.serverNodeProperties = serverNodeProperties;
}
/**
* 处理是否支持这种类型
*
* @param channelProxyFlow 数据
* @return boolean
*/
@Override
protected boolean doSupport(ChannelProxyFlow channelProxyFlow) {
if (serverNodeProperties.getEnableFlowControl()) {
return ChannelFlowEnum.OUT_FLOW.equals(channelProxyFlow.channelFlowEnum());
} else {
return false;
}
}
/**
* 处理当前数据
*
* @param channel 当前通道
* @param channelProxyFlow 通道数据
*/
@Override
protected void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
String clientId = channelProxyFlow.clientId();
String ip = channelProxyFlow.ip();
Integer port = channelProxyFlow.port();
Integer flow = channelProxyFlow.flow();
ChannelProtocolType channelProtocolType = channelProxyFlow.channelProtocolType();
ChannelProxyType channelProxyType = channelProxyFlow.channelProxyType();
// 出口流量处理
LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand = new LazyProxyFlowStoryCommand();
lazyProxyFlowStoryCommand.setOutFlow(flow);
lazyProxyFlowStoryCommand.setClientId(clientId);
lazyProxyFlowStoryCommand.setIp(ip);
lazyProxyFlowStoryCommand.setPort(port);
lazyProxyFlowStoryCommand.setProtocolType(channelProtocolType);
lazyProxyFlowStoryCommand.setProxyType(channelProxyType);
lazyProxyFlowStoryCommand.setIsDeleted(false);
lazyProxyFlowApplication.flowIncreaseStory(lazyProxyFlowStoryCommand);
}
}

View File

@@ -43,6 +43,6 @@ public class NettyHttpClientProxyServerTransfer {
/** /**
* 是否是ssl * 是否是ssl
*/ */
private boolean isSsl; private boolean isSsl;
} }

View File

@@ -5,12 +5,17 @@ import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf; import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -23,9 +28,15 @@ import org.springframework.stereotype.Component;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j @Slf4j
@Component @Component
public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced public class ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
extends AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced<NettyProxyMsg> { extends AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -38,6 +49,7 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
Channel channel = nettyChannelContext.channel(); Channel channel = nettyChannelContext.channel();
// 创建链接发送数据 // 创建链接发送数据
String targetPortString = nettyProxyMsg.getTargetPortString(); String targetPortString = nettyProxyMsg.getTargetPortString();
Integer targetPort = Integer.parseInt(targetPortString);
String targetIpString = nettyProxyMsg.getTargetIpString(); String targetIpString = nettyProxyMsg.getTargetIpString();
byte[] data = nettyProxyMsg.getData(); byte[] data = nettyProxyMsg.getData();
byte[] visitorId = nettyProxyMsg.getVisitorId(); byte[] visitorId = nettyProxyMsg.getVisitorId();
@@ -45,6 +57,9 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
String msgVisitorId = new String(visitorId); String msgVisitorId = new String(visitorId);
ChannelAttributeKeyUtils.buildClientId(channel, clientId); ChannelAttributeKeyUtils.buildClientId(channel, clientId);
ChannelAttributeKeyUtils.buildVisitorId(channel, msgVisitorId); ChannelAttributeKeyUtils.buildVisitorId(channel, msgVisitorId);
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientId);
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
ChannelAttributeKeyUtils.buildTargetPort(channel, targetPort);
NettyTransferChannelContext.pushVisitor(channel, msgVisitorId); NettyTransferChannelContext.pushVisitor(channel, msgVisitorId);
NettyByteBuf nettyByteBuf = new NettyByteBuf(); NettyByteBuf nettyByteBuf = new NettyByteBuf();
@@ -56,7 +71,7 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg(); NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg();
clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId); clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId);
clientConnectTagetNettyProxyMsg.setClientTargetIp(targetIpString); clientConnectTagetNettyProxyMsg.setClientTargetIp(targetIpString);
clientConnectTagetNettyProxyMsg.setClientTargetPort(Integer.parseInt(targetPortString)); clientConnectTagetNettyProxyMsg.setClientTargetPort(targetPort);
clientConnectTagetNettyProxyMsg.setClientId(clientId); clientConnectTagetNettyProxyMsg.setClientId(clientId);
clientConnectTagetNettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESSFUL_); clientConnectTagetNettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESSFUL_);
if (loadBalance != null) { if (loadBalance != null) {
@@ -65,6 +80,18 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
}else { }else {
log.error("can not find target client:【】 channel",clientId); log.error("can not find target client:【】 channel",clientId);
} }
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIpString)
.clientId(new String(clientId))
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(data.length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
} }

View File

@@ -3,11 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -23,6 +28,11 @@ import org.wu.framework.core.utils.ObjectUtils;
@Component @Component
public class ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced public class ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
extends AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> { extends AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
@@ -37,12 +47,31 @@ public class ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
// 将返回数据下发客户端 // 将返回数据下发客户端
Channel transferNextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(channel); Channel transferNextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(channel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferNextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferNextChannel);
String clientId = nettyProxyMsg.getClientIdString();
Integer visitorPort = nettyProxyMsg.getVisitorPortInt();
String visitorId = nettyProxyMsg.getVisitorIdString();
if(ObjectUtils.isNotEmpty(transferNextChannel)) { if(ObjectUtils.isNotEmpty(transferNextChannel)) {
log.info("目标客户端返回数据通过服务端下发到原始通道"); log.info("目标客户端返回数据通过服务端下发到原始通道");
NettyProxyMsg responseProxyMsg = new NettyProxyMsg(); NettyProxyMsg responseProxyMsg = new NettyProxyMsg();
responseProxyMsg.setData(nettyProxyMsg.getData()); responseProxyMsg.setData(nettyProxyMsg.getData());
responseProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_); responseProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
transferNextChannel.writeAndFlush(responseProxyMsg); transferNextChannel.writeAndFlush(responseProxyMsg);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(responseProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
}else { }else {
log.error("无法将数据下发给原始客户端"); log.error("无法将数据下发给原始客户端");
} }

View File

@@ -4,10 +4,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.socket.NettyHttpClientProxyServerRealSocket; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.socket.NettyHttpClientProxyServerRealSocket;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
@@ -21,14 +27,19 @@ import java.util.List;
/** /**
* 服务端处理客户端代理到服务端的请求 * 服务端处理客户端代理到服务端的请求
* HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ * HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_
*/ */
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j @Slf4j
@Component @Component
public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced public class ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
extends AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced<NettyProxyMsg> { extends AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -41,16 +52,25 @@ public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced
Channel channel = nettyChannelContext.channel(); Channel channel = nettyChannelContext.channel();
// 创建链接发送数据 // 创建链接发送数据
String targetPortString = nettyProxyMsg.getTargetPortString(); String targetPortString = nettyProxyMsg.getTargetPortString();
int targetPort = Integer.parseInt(targetPortString);
String targetIpString = nettyProxyMsg.getTargetIpString(); String targetIpString = nettyProxyMsg.getTargetIpString();
String clientIdString = nettyProxyMsg.getClientIdString();
byte[] data = nettyProxyMsg.getData(); byte[] data = nettyProxyMsg.getData();
byte[] visitorId = nettyProxyMsg.getVisitorId(); byte[] visitorId = nettyProxyMsg.getVisitorId();
ChannelAttributeKeyUtils.buildClientId(channel, clientIdString);
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientIdString);
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
ChannelAttributeKeyUtils.buildTargetPort(channel,targetPort);
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values()); List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values());
NettyClientProperties nettyClientProperties = SpringContextHolder.getBean(NettyClientProperties.class); NettyClientProperties nettyClientProperties = SpringContextHolder.getBean(NettyClientProperties.class);
// 判断代理到客户端还是服务端 // 判断代理到客户端还是服务端
NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer = new NettyHttpClientProxyServerTransfer(); NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer = new NettyHttpClientProxyServerTransfer();
nettyHttpClientProxyServerTransfer.setSsl(false); nettyHttpClientProxyServerTransfer.setSsl(false);
nettyHttpClientProxyServerTransfer.setTargetIp(targetIpString); nettyHttpClientProxyServerTransfer.setTargetIp(targetIpString);
nettyHttpClientProxyServerTransfer.setTargetPort(Integer.parseInt(targetPortString)); nettyHttpClientProxyServerTransfer.setTargetPort(targetPort);
nettyHttpClientProxyServerTransfer.setHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList); nettyHttpClientProxyServerTransfer.setHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList);
@@ -60,6 +80,19 @@ public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced
NettyHttpClientProxyServerRealSocket NettyHttpClientProxyServerRealSocket
.buildRealServer(nettyHttpClientProxyServerTransfer, channel,new String(visitorId)); .buildRealServer(nettyHttpClientProxyServerTransfer, channel,new String(visitorId));
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIpString)
.clientId(clientIdString)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(data.length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
} }
} }

View File

@@ -0,0 +1,77 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advanced;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component;
/**
* 服务端处理客户端代理到服务端的请求
* HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
*/
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j
@Component
public class ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
extends AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/**
* 处理当前数据
*
* @param nettyChannelContext 当前通道
* @param nettyProxyMsg 通道数据
*/
@Override
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel channel = nettyChannelContext.channel();
byte[] data = nettyProxyMsg.getData();
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
// 将数据返回给客户端
NettyProxyMsg responseNettyProxyMsg = new NettyProxyMsg();
responseNettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_);
responseNettyProxyMsg.setData(data);
nextChannel.writeAndFlush(responseNettyProxyMsg);
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(nextChannel);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(data.length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
}
}

View File

@@ -4,12 +4,17 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf; import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -18,9 +23,14 @@ import org.springframework.stereotype.Component;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j @Slf4j
@Component @Component
public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced public class ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced
extends AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced<NettyProxyMsg> { extends AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -35,11 +45,19 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
// 数据下发 // 数据下发
byte[] msgVisitorId = nettyProxyMsg.getVisitorId(); byte[] msgVisitorId = nettyProxyMsg.getVisitorId();
byte[] msgClientTargetIp = nettyProxyMsg.getClientTargetIp(); String targetIpString = nettyProxyMsg.getTargetIpString();
byte[] msgClientTargetPort = nettyProxyMsg.getClientTargetPort(); String targetPortString = nettyProxyMsg.getTargetPortString();
Integer targetPort = Integer.parseInt(targetPortString);
byte[] clientId = nettyProxyMsg.getClientId(); byte[] clientId = nettyProxyMsg.getClientId();
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientId);
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
ChannelAttributeKeyUtils.buildTargetPort(channel, targetPort);
// next // next
Channel nextChannel = NettyTransferChannelContext.getVisitor(msgVisitorId); Channel nextChannel = NettyTransferChannelContext.getVisitor(msgVisitorId);
ChannelAttributeKeyUtils.buildNextChannel(nextChannel, channel); ChannelAttributeKeyUtils.buildNextChannel(nextChannel, channel);
@@ -54,8 +72,8 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg(); NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg();
clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId); clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId);
clientConnectTagetNettyProxyMsg.setClientTargetIp(msgClientTargetIp); clientConnectTagetNettyProxyMsg.setClientTargetIp(targetIpString);
clientConnectTagetNettyProxyMsg.setClientTargetPort(msgClientTargetPort); clientConnectTagetNettyProxyMsg.setClientTargetPort(targetPort);
clientConnectTagetNettyProxyMsg.setClientId(clientId); clientConnectTagetNettyProxyMsg.setClientId(clientId);
clientConnectTagetNettyProxyMsg.setData(nettyByteBufData.getData()); clientConnectTagetNettyProxyMsg.setData(nettyByteBufData.getData());
@@ -63,6 +81,19 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
channel.writeAndFlush(clientConnectTagetNettyProxyMsg); channel.writeAndFlush(clientConnectTagetNettyProxyMsg);
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIpString)
.clientId(new String(clientId))
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(nettyByteBufData.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
} }

View File

@@ -4,10 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -20,7 +25,11 @@ import org.wu.framework.core.utils.ObjectUtils;
@Component @Component
public class ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced public class ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced
extends AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> { extends AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -31,14 +40,33 @@ public class ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced
@Override @Override
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel channel = nettyChannelContext.channel(); Channel channel = nettyChannelContext.channel();
// 将返回数据 // 将返回数据
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(nextChannel);
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(nextChannel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
if(ObjectUtils.isNotEmpty(nextChannel)) { if(ObjectUtils.isNotEmpty(nextChannel)) {
log.info("目标客户端返回数据通过服务端下发到原始通道"); log.info("目标客户端返回数据通过服务端下发到原始通道");
ByteBuf buf = channel.config().getAllocator().buffer(nettyProxyMsg.getData().length); ByteBuf buf = channel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
buf.writeBytes(nettyProxyMsg.getData()); buf.writeBytes(nettyProxyMsg.getData());
nextChannel.writeAndFlush(buf); nextChannel.writeAndFlush(buf);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId(targetClientId)
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.HTTP)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
}else { }else {
log.error("无法将数据下发给原始客户端"); log.error("无法将数据下发给原始客户端");
} }

View File

@@ -7,6 +7,7 @@ import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory; import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder;
import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder; import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder;
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer; import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
@@ -19,6 +20,7 @@ public class NettyHttpClientProxyServerRealFilter extends DebugChannelInitialize
public NettyHttpClientProxyServerRealFilter(NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer) { public NettyHttpClientProxyServerRealFilter(NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer) {
this.nettyHttpClientProxyServerTransfer = nettyHttpClientProxyServerTransfer; this.nettyHttpClientProxyServerTransfer = nettyHttpClientProxyServerTransfer;
} }
/** /**
@@ -45,10 +47,12 @@ public class NettyHttpClientProxyServerRealFilter extends DebugChannelInitialize
} }
} }
ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(nettyHttpClientProxyServerTransfer.getHandleChannelTypeAdvancedList());
// 解码、编码 // 解码、编码
pipeline.addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10)); pipeline.addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10));
pipeline.addLast(new TransferEncoder()); pipeline.addLast(new TransferEncoder());
pipeline.addLast(new NettyHttpClientProxyServerRealHandler()); pipeline.addLast(new NettyHttpClientProxyServerRealHandler(channelTypeAdapter));
} }
} }

View File

@@ -7,6 +7,7 @@ import io.netty.channel.ChannelOption;
import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf; import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
@@ -17,6 +18,13 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
@Slf4j @Slf4j
public class NettyHttpClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> { public class NettyHttpClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
private final ChannelTypeAdapter channelTypeAdapter;
public NettyHttpClientProxyServerRealHandler(ChannelTypeAdapter channelTypeAdapter) {
this.channelTypeAdapter = channelTypeAdapter;
}
@Override @Override
public void channelActive(ChannelHandlerContext ctx) throws Exception { public void channelActive(ChannelHandlerContext ctx) throws Exception {
// 根据访客ID 确认真实通道 读写打开 // 根据访客ID 确认真实通道 读写打开
@@ -32,17 +40,16 @@ public class NettyHttpClientProxyServerRealHandler extends SimpleChannelInboundH
@Override @Override
public void channelRead0(ChannelHandlerContext ctx,NettyByteBuf nettyByteBuf) { public void channelRead0(ChannelHandlerContext ctx,NettyByteBuf nettyByteBuf) {
Channel channel = ctx.channel();
byte[] bytes = nettyByteBuf.getData(); byte[] bytes = nettyByteBuf.getData();
log.debug("bytes.length:{}",bytes.length); log.debug("bytes.length:{}",bytes.length);
log.debug("客户端代理服务端接收服务端真实服务数据:{}", new String(bytes)); log.debug("客户端代理服务端接收服务端真实服务数据:{}", new String(bytes));
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
// 将数据返回给客户端 // 将数据返回给客户端
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
nettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_); nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
nettyProxyMsg.setData(bytes); nettyProxyMsg.setData(bytes);
nextChannel.writeAndFlush(nettyProxyMsg); channelTypeAdapter.handler(ctx,nettyProxyMsg);
} }

View File

@@ -7,6 +7,7 @@ import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.filter.NettyHttpClientProxyServerRealFilter; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.filter.NettyHttpClientProxyServerRealFilter;

View File

@@ -52,6 +52,8 @@ public class ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced
String msgVisitorId = new String(visitorId); String msgVisitorId = new String(visitorId);
ChannelAttributeKeyUtils.buildClientId(transferChannel, targetClientId); ChannelAttributeKeyUtils.buildClientId(transferChannel, targetClientId);
ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId); ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId);
ChannelAttributeKeyUtils.buildTargetIp(transferChannel, host);
ChannelAttributeKeyUtils.buildTargetPort(transferChannel, port);
NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId); NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId);

View File

@@ -3,12 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType; import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
@@ -21,6 +25,11 @@ import org.springframework.stereotype.Component;
public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced
extends AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced<NettyProxyMsg> { extends AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -33,15 +42,33 @@ public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel transferChannel = nettyChannelContext.channel(); Channel transferChannel = nettyChannelContext.channel();
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferChannel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferChannel);
String clientId = ChannelAttributeKeyUtils.getClientId(transferChannel);
byte[] visitorId = nettyProxyMsg.getVisitorId(); byte[] visitorId = nettyProxyMsg.getVisitorId();
// 目标通道 // 目标通道
Channel nextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(transferChannel); Channel nextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(transferChannel);
NettyProxyMsg requestMsg = new NettyProxyMsg(); NettyProxyMsg requestMsg = new NettyProxyMsg();
requestMsg.setVisitorId(visitorId); requestMsg.setVisitorId(visitorId);
requestMsg.setData(nettyProxyMsg.getData()); requestMsg.setData(nettyProxyMsg.getData());
requestMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_); requestMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_);
if (nextChannel != null) { if (nextChannel != null) {
nextChannel.writeAndFlush(requestMsg); nextChannel.writeAndFlush(requestMsg);
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(transferChannel, serverChannelFlow);
} else { } else {
log.error("can not find the channel"); log.error("can not find the channel");
} }

View File

@@ -3,11 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
@@ -20,6 +25,11 @@ import org.springframework.stereotype.Component;
public class ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced public class ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced
extends AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> { extends AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -39,10 +49,25 @@ public class ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvance
responseMsg.setVisitorId(visitorId); responseMsg.setVisitorId(visitorId);
responseMsg.setData(nettyProxyMsg.getData()); responseMsg.setData(nettyProxyMsg.getData());
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
responseMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_); responseMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
if (nextChannel != null) { if (nextChannel != null) {
nextChannel.writeAndFlush(responseMsg); nextChannel.writeAndFlush(responseMsg);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.ip(targetIp)
.port(targetPort)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
}else { }else {
log.error("can not find the channel"); log.error("can not find the channel");
} }

View File

@@ -9,7 +9,10 @@ import io.netty.handler.codec.socksx.v5.DefaultSocks5CommandResponse;
import io.netty.handler.codec.socksx.v5.Socks5AddressType; import io.netty.handler.codec.socksx.v5.Socks5AddressType;
import io.netty.handler.codec.socksx.v5.Socks5CommandStatus; import io.netty.handler.codec.socksx.v5.Socks5CommandStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties;
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced;
@@ -21,8 +24,11 @@ import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handl
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.wu.framework.spring.utils.SpringContextHolder;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@@ -51,10 +57,16 @@ public class ServerHandleSocksReportClientProxyServerConnectTransferTypeAdvanced
String msgVisitorId = new String(visitorId); String msgVisitorId = new String(visitorId);
ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId);
ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId); ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId);
ChannelAttributeKeyUtils.buildTargetIp(transferChannel, host);
ChannelAttributeKeyUtils.buildTargetPort(transferChannel, port);
NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId); NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId);
Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(data[0]); Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(data[0]);
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values());
ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(handleChannelTypeAdvancedList);
// 创建真实代理链接 // 创建真实代理链接
EventLoopGroup group = EventLoopGroupFactory.createClientWorkGroup(); EventLoopGroup group = EventLoopGroupFactory.createClientWorkGroup();
Bootstrap b = new Bootstrap(); Bootstrap b = new Bootstrap();
@@ -65,7 +77,7 @@ public class ServerHandleSocksReportClientProxyServerConnectTransferTypeAdvanced
@Override @Override
protected void initChannel(SocketChannel ch) { protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10)); ch.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10));
ch.pipeline().addLast(new NettySocksClientProxyServerRealHandler()); ch.pipeline().addLast(new NettySocksClientProxyServerRealHandler(channelTypeAdapter));
} }
}); });
log.info("准备连接目标服务器ip = {},port = {}", host, port); log.info("准备连接目标服务器ip = {},port = {}", host, port);

View File

@@ -4,10 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
@@ -22,6 +27,12 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
extends AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced<NettyProxyMsg> { extends AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
* *
@@ -32,6 +43,10 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
@Override @Override
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel transferChannel = nettyChannelContext.channel(); Channel transferChannel = nettyChannelContext.channel();
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferChannel);
String clientId = ChannelAttributeKeyUtils.getClientId(transferChannel);
// 目标通道 // 目标通道
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel); Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel);
// 目标数据发送 // 目标数据发送
@@ -39,6 +54,19 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length); ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
buf.writeBytes(nettyProxyMsg.getData()); buf.writeBytes(nettyProxyMsg.getData());
nextChannel.writeAndFlush(buf); nextChannel.writeAndFlush(buf);
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(transferChannel, serverChannelFlow);
} else { } else {
log.error("当前目标通道已经关闭或者不存在"); log.error("当前目标通道已经关闭或者不存在");
} }

View File

@@ -0,0 +1,78 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced;
import io.netty.channel.Channel;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j
@Component
public class ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
extends AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/**
* 处理当前数据
*
* @param nettyChannelContext 当前通道
* @param nettyProxyMsg 通道数据
* @see NettySocksClientProxyServerRealHandler
*/
@Override
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel channel = nettyChannelContext.channel();
byte[] data = nettyProxyMsg.getData();
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
if (nextChannel.isActive()) {
// 将数据返回给客户端
NettyProxyMsg nettyProxyMsgResponse = new NettyProxyMsg();
nettyProxyMsgResponse.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
nettyProxyMsgResponse.setData(data);
nextChannel.writeAndFlush(nettyProxyMsgResponse);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.ip(targetIp)
.port(targetPort)
.clientId(clientId)
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
} else {
log.info("释放内存");
ReferenceCountUtil.release(nettyProxyMsg);
}
}
}

View File

@@ -8,6 +8,7 @@ import io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder;
import io.netty.handler.codec.socksx.v5.Socks5CommandStatus; import io.netty.handler.codec.socksx.v5.Socks5CommandStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced;
@@ -20,6 +21,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handl
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.wu.framework.spring.utils.SpringContextHolder;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@@ -49,6 +51,8 @@ public class ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanc
ChannelAttributeKeyUtils.buildVisitorId(transferChannel,visitorId); ChannelAttributeKeyUtils.buildVisitorId(transferChannel,visitorId);
ChannelAttributeKeyUtils.buildClientId(transferChannel,clientId); ChannelAttributeKeyUtils.buildClientId(transferChannel,clientId);
ChannelTypeAdapter channelTypeAdapter = SpringContextHolder.getBean(ChannelTypeAdapter.class);
// 根据传输通道获取代理通道 // 根据传输通道获取代理通道
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel); Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel);
@@ -58,7 +62,7 @@ public class ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanc
// TODO bug fix // TODO bug fix
nextChannel.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10)); nextChannel.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10));
// 请求数据开始上报 // 请求数据开始上报
nextChannel.pipeline().addLast(new NettySocksServerProxyClientVisitorInboundHandler()); nextChannel.pipeline().addLast(new NettySocksServerProxyClientVisitorInboundHandler(channelTypeAdapter));
DefaultSocks5CommandResponse commandResponse = DefaultSocks5CommandResponse commandResponse =
new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, socks5AddressType); new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, socks5AddressType);
nextChannel.writeAndFlush(commandResponse); nextChannel.writeAndFlush(commandResponse);

View File

@@ -0,0 +1,77 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced;
import io.netty.channel.Channel;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Component;
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@Slf4j
@Component
public class ServerHandleSocksReportServerProxyClientRequestTypeAdvanced
extends AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportServerProxyClientRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/**
* 处理当前数据
*
* @param nettyChannelContext 当前通道
* @param nettyProxyMsg 通道数据
* @see NettySocksClientProxyServerRealHandler
*/
@Override
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel channel = nettyChannelContext.channel();
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(channel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(channel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(channel);
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
if (nextChannel.isActive()) {
// 下发数据到服务端
NettyProxyMsg nettyProxyMsgRequest = new NettyProxyMsg();
nettyProxyMsgRequest.setType(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_);
nettyProxyMsgRequest.setData(nettyProxyMsg.getData());
nextChannel.writeAndFlush(nettyProxyMsgRequest);
// 记录进口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
.port(targetPort)
.ip(targetIp)
.clientId("SERVER")
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
} else {
log.info("释放内存");
ReferenceCountUtil.release(nettyProxyMsg);
}
}
}

View File

@@ -4,11 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
@@ -22,6 +26,11 @@ import org.wu.framework.core.utils.ObjectUtils;
public class ServerHandleSocksReportServerProxyClientResponseTypeAdvanced public class ServerHandleSocksReportServerProxyClientResponseTypeAdvanced
extends AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced<NettyProxyMsg> { extends AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced<NettyProxyMsg> {
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
}
/** /**
* 处理当前数据 * 处理当前数据
@@ -34,11 +43,28 @@ public class ServerHandleSocksReportServerProxyClientResponseTypeAdvanced
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
Channel channel = nettyChannelContext.channel(); Channel channel = nettyChannelContext.channel();
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(nextChannel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
if(ObjectUtils.isNotEmpty(nextChannel)&&nextChannel.isActive()){ if(ObjectUtils.isNotEmpty(nextChannel)&&nextChannel.isActive()){
ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length); ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
buf.writeBytes(nettyProxyMsg.getData()); buf.writeBytes(nettyProxyMsg.getData());
nextChannel.writeAndFlush(buf); nextChannel.writeAndFlush(buf);
// 记录出口数据
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
.builder()
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
.ip(targetIp)
.port(targetPort)
.clientId("SERVER")
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
.channelProtocolType(ChannelProtocolType.SOCKS)
.flow(nettyProxyMsg.getData().length)
.build();
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
}else { }else {
log.error("服务端代理客户端socks本地通道已关闭"); log.error("服务端代理客户端socks本地通道已关闭");
} }

View File

@@ -38,6 +38,8 @@ public class ServerHandleSocksReportServerProxyClientTypeAdvanced
String host = nettyProxyMsg.getTargetIpString(); String host = nettyProxyMsg.getTargetIpString();
Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString()); Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString());
byte[] visitorId = nettyProxyMsg.getVisitorId(); byte[] visitorId = nettyProxyMsg.getVisitorId();
byte[] targetClientId = nettyProxyMsg.getClientId(); byte[] targetClientId = nettyProxyMsg.getClientId();
Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType(); Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType();
@@ -45,8 +47,12 @@ public class ServerHandleSocksReportServerProxyClientTypeAdvanced
String msgVisitorId = new String(visitorId); String msgVisitorId = new String(visitorId);
ChannelAttributeKeyUtils.buildVisitorId(visitorrChannel, msgVisitorId); ChannelAttributeKeyUtils.buildVisitorId(visitorrChannel, msgVisitorId);
NettyTransferChannelContext.pushVisitor(visitorrChannel, msgVisitorId); ChannelAttributeKeyUtils.buildTargetIp(visitorrChannel, host);
ChannelAttributeKeyUtils.buildTargetPort(visitorrChannel,port);
ChannelAttributeKeyUtils.buildTargetClientId(visitorrChannel,targetClientId);
ChannelAttributeKeyUtils.buildSocks5AddressType(visitorrChannel,socks5AddressTypeByte); ChannelAttributeKeyUtils.buildSocks5AddressType(visitorrChannel,socks5AddressTypeByte);
NettyTransferChannelContext.pushVisitor(visitorrChannel, msgVisitorId);
// 客户端连接客户端传输通道 // 客户端连接客户端传输通道
Channel loadBalance = ChannelContext.getLoadBalance(targetClientId); Channel loadBalance = ChannelContext.getLoadBalance(targetClientId);

View File

@@ -8,6 +8,7 @@ import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.ReferenceCountUtil; import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf; import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
@@ -16,6 +17,11 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
@Slf4j @Slf4j
public class NettySocksClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> { public class NettySocksClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
private final ChannelTypeAdapter channelTypeAdapter;
public NettySocksClientProxyServerRealHandler(ChannelTypeAdapter channelTypeAdapter) {
this.channelTypeAdapter = channelTypeAdapter;
}
@Override @Override
@@ -27,22 +33,16 @@ public class NettySocksClientProxyServerRealHandler extends SimpleChannelInbound
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception { public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
log.trace("开始写回客户端数据"); log.trace("开始写回客户端数据");
// 结果下发 // 结果下发
Channel channel = ctx.channel();
byte[] bytes = nettyByteBuf.getData(); byte[] bytes = nettyByteBuf.getData();
log.debug("bytes.length:{}", bytes.length); log.debug("bytes.length:{}", bytes.length);
log.debug("客户端socks代理服务端接收服务端真实服务数据:{}", new String(bytes)); log.debug("客户端socks代理服务端接收服务端真实服务数据:{}", new String(bytes));
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
if (nextChannel.isActive()) {
// 将数据返回给客户端
NettyProxyMsg nettyProxyMsgResponse = new NettyProxyMsg();
nettyProxyMsgResponse.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
nettyProxyMsgResponse.setData(bytes);
nextChannel.writeAndFlush(nettyProxyMsgResponse); // 将数据返回给客户端
} else { NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
log.info("释放内存"); nettyProxyMsg.setType(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
ReferenceCountUtil.release(nettyByteBuf); nettyProxyMsg.setData(bytes);
}
channelTypeAdapter.handler(ctx,nettyProxyMsg);
} }
@Override @Override

View File

@@ -26,7 +26,6 @@ public class NettySocksServerProxyClientVisitorHandler extends SimpleChannelInbo
@Override @Override
public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception { public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception {
channelTypeAdapter.handler(ctx, nettyProxyMsg); channelTypeAdapter.handler(ctx, nettyProxyMsg);
} }
@Override @Override

View File

@@ -6,9 +6,9 @@ import io.netty.channel.Channel;
import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf; import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
@@ -17,7 +17,11 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
@Slf4j @Slf4j
public class NettySocksServerProxyClientVisitorInboundHandler extends SimpleChannelInboundHandler<NettyByteBuf> { public class NettySocksServerProxyClientVisitorInboundHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
private final ChannelTypeAdapter channelTypeAdapter;
public NettySocksServerProxyClientVisitorInboundHandler(ChannelTypeAdapter channelTypeAdapter) {
this.channelTypeAdapter = channelTypeAdapter;
}
@Override @Override
@@ -28,24 +32,16 @@ public class NettySocksServerProxyClientVisitorInboundHandler extends SimpleChan
@Override @Override
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception { public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
log.info("【socks】转发服务端请求到客户端"); log.info("【socks】转发服务端请求到客户端");
// 结果下发
Channel channel = ctx.channel();
byte[] bytes = nettyByteBuf.getData(); byte[] bytes = nettyByteBuf.getData();
log.debug("bytes.length:{}",bytes.length); log.debug("bytes.length:{}",bytes.length);
log.debug("服务端代理客户端,socks本地接收请求数据:{}", new String(bytes)); log.debug("服务端代理客户端,socks本地接收请求数据:{}", new String(bytes));
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
if (nextChannel.isActive()) { // 将数据返回给客户端
// 下发数据到服务端 NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); nettyProxyMsg.setType(ProxyMessageType.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_);
nettyProxyMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_); nettyProxyMsg.setData(bytes);
nettyProxyMsg.setData(nettyByteBuf.getData()); channelTypeAdapter.handler(ctx, nettyProxyMsg);
nextChannel.writeAndFlush(nettyProxyMsg);
} else {
log.info("释放内存");
ReferenceCountUtil.release(nettyByteBuf);
}
} }
@Override @Override

View File

@@ -0,0 +1,120 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;
import java.util.List;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
**/
public interface LazyProxyFlowApplication {
/**
* describe 新增代理流量
*
* @param lazyProxyFlowStoryCommand 新增代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> story(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
/**
* 流量增长存储
*
* @param lazyProxyFlowStoryCommand 代理流量
*/
Result<LazyProxyFlow> flowIncreaseStory(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
/**
* describe 批量新增代理流量
*
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList);
/**
* describe 更新代理流量
*
* @param lazyProxyFlowUpdateCommand 更新代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> updateOne(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand);
/**
* describe 查询单个代理流量
*
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlowDTO> findOne(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand);
/**
* describe 查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
* @return {@link Result <List<LazyProxyFlowDTO>>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyFlowDTO>> findList(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
/**
* describe 分页查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
* @return {@link Result <LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyPage<LazyProxyFlowDTO>> findPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
/**
* describe 删除代理流量
*
* @param lazyProxyFlowRemoveCommand 删除代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> remove(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand);
/**
* 根据客户端查询流量
*
* @param size 分页大小
* @param current 分页
* @param lazyProxyFlowQueryListCommand 查询条件
* @return {@link Result<LazyPage< LazyClientProxyFlowDTO >>} 分页访客端流量DTO对象
*/
Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
}

View File

@@ -0,0 +1,109 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
**/
public interface LazyProxyPerDayFlowApplication {
/**
* describe 新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand);
/**
* describe 批量新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList);
/**
* describe 更新每日统计代理流量
*
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> updateOne(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand);
/**
* describe 查询单个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlowDTO> findOne(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand);
/**
* describe 查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
* @return {@link Result <List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result <List<LazyProxyPerDayFlowDTO>> findList(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
/**
* describe 分页查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
* @return {@link Result <LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result <LazyPage<LazyProxyPerDayFlowDTO>> findPage(int size,int current,LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
/**
* describe 删除每日统计代理流量
*
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand);
}

View File

@@ -0,0 +1,93 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler
**/
@Mapper
public interface LazyProxyFlowDTOAssembler {
/**
* describe MapStruct 创建的代理对象
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlowDTOAssembler INSTANCE = Mappers.getMapper(LazyProxyFlowDTOAssembler.class);
/**
* describe 应用层存储入参转换成 领域对象
*
* @param lazyProxyFlowStoryCommand 保存代理流量对象
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
/**
* describe 应用层更新入参转换成 领域对象
*
* @param lazyProxyFlowUpdateCommand 更新代理流量对象
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand);
/**
* describe 应用层查询入参转换成 领域对象
*
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量对象参数
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand);
/**
* describe 应用层查询入参转换成 领域对象
*
* @param lazyProxyFlowQueryListCommand 查询集合代理流量对象参数
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
/**
* describe 应用层删除入参转换成 领域对象
*
* @param lazyProxyFlowRemoveCommand 删除代理流量对象参数
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand);
/**
* describe 持久层领域对象转换成DTO对象
*
* @param lazyProxyFlow 代理流量领域对象
* @return {@link LazyProxyFlowDTO} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlowDTO fromLazyProxyFlow(LazyProxyFlow lazyProxyFlow);
}

View File

@@ -0,0 +1,93 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler
**/
@Mapper
public interface LazyProxyPerDayFlowDTOAssembler {
/**
* describe MapStruct 创建的代理对象
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlowDTOAssembler INSTANCE = Mappers.getMapper(LazyProxyPerDayFlowDTOAssembler.class);
/**
* describe 应用层存储入参转换成 领域对象
*
* @param lazyProxyPerDayFlowStoryCommand 保存每日统计代理流量对象
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand);
/**
* describe 应用层更新入参转换成 领域对象
*
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量对象
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand);
/**
* describe 应用层查询入参转换成 领域对象
*
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量对象参数
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand);
/**
* describe 应用层查询入参转换成 领域对象
*
* @param lazyProxyPerDayFlowQueryListCommand 查询集合每日统计代理流量对象参数
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
/**
* describe 应用层删除入参转换成 领域对象
*
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量对象参数
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand);
/**
* describe 持久层领域对象转换成DTO对象
*
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
* @return {@link LazyProxyPerDayFlowDTO} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlowDTO fromLazyProxyPerDayFlow(LazyProxyPerDayFlow lazyProxyPerDayFlow);
}

View File

@@ -0,0 +1,107 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.time.LocalDateTime;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_query_List_command",description = "代理流量")
public class LazyProxyFlowQueryListCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,111 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_query_one_command",description = "代理流量")
public class LazyProxyFlowQueryOneCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,111 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_remove_command",description = "代理流量")
public class LazyProxyFlowRemoveCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,111 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_story_command",description = "代理流量")
public class LazyProxyFlowStoryCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,111 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_update_command",description = "代理流量")
public class LazyProxyFlowUpdateCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_query_List_command",description = "每日统计代理流量")
public class LazyProxyPerDayFlowQueryListCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_query_one_command",description = "每日统计代理流量")
public class LazyProxyPerDayFlowQueryOneCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_remove_command",description = "每日统计代理流量")
public class LazyProxyPerDayFlowRemoveCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_story_command",description = "每日统计代理流量")
public class LazyProxyPerDayFlowStoryCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,114 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.time.LocalDateTime;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_update_command",description = "每日统计代理流量")
public class LazyProxyPerDayFlowUpdateCommand {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,124 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.wu.framework.core.utils.ByteSizeUtil;
import java.time.LocalDateTime;
import java.util.List;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_command_dto", description = "代理流量")
public class LazyClientProxyFlowDTO {
/**
* 客户端ID
*/
@Schema(description = "客户端ID", name = "clientId", example = "")
private String clientId;
/**
*
*/
@Schema(description = "", name = "createTime", example = "")
private LocalDateTime createTime;
/**
* 主键
*/
@Schema(description = "主键", name = "id", example = "")
private Long id;
/**
* 当前访客当前进口流量
*/
@Schema(description = "当前访客当前进口流量", name = "inFlow", example = "")
private Integer inFlow;
/**
* 目标ip
*/
@Schema(description = "目标ip", name = "ip", example = "")
private String ip;
/**
* 是否删除
*/
@Schema(description = "是否删除", name = "isDeleted", example = "")
private Boolean isDeleted;
/**
* 当前访客出口流量
*/
@Schema(description = "当前访客出口流量", name = "outFlow", example = "")
private Integer outFlow;
/**
* 目标端口
*/
@Schema(description = "目标端口", name = "port", example = "")
private Integer port;
/**
* 协议类型
*/
@Schema(description = "协议类型", name = "protocolType", example = "")
private ChannelProtocolType protocolType;
/**
* 代理类型
*/
@Schema(description = "代理类型", name = "proxyType", example = "")
private ChannelProxyType proxyType;
/**
* 服务端ID
*/
@Schema(description = "服务端ID", name = "serverId", example = "")
private String serverId;
/**
*
*/
@Schema(description = "", name = "updateTime", example = "")
private LocalDateTime updateTime;
public Integer getInFlowSize() {
if (inFlow == null) return 0;
return inFlow;
}
public Integer getOutFlowSize() {
if (outFlow == null) return 0;
return outFlow;
}
public String getInFlow() {
if (inFlow == null) return "0b";
return ByteSizeUtil.convertSize(inFlow);
}
public String getOutFlow() {
if (outFlow == null) return "0b";
return ByteSizeUtil.convertSize(outFlow);
}
/**
* 当前访客下所有端口的流量
*/
@Schema(description = "当前访客下所有端口的流量")
private List<LazyProxyFlowDTO> lazyProxyFlowDTOList;
}

View File

@@ -0,0 +1,116 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.wu.framework.core.utils.ByteSizeUtil;
import java.time.LocalDateTime;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow_command_dto", description = "代理流量")
public class LazyProxyFlowDTO {
/**
* 客户端ID
*/
@Schema(description = "客户端ID", name = "clientId", example = "")
private String clientId;
/**
*
*/
@Schema(description = "", name = "createTime", example = "")
private LocalDateTime createTime;
/**
* 主键
*/
@Schema(description = "主键", name = "id", example = "")
private Long id;
/**
* 当前访客当前进口流量
*/
@Schema(description = "当前访客当前进口流量", name = "inFlow", example = "")
private Integer inFlow;
/**
* 目标ip
*/
@Schema(description = "目标ip", name = "ip", example = "")
private String ip;
/**
* 是否删除
*/
@Schema(description = "是否删除", name = "isDeleted", example = "")
private Boolean isDeleted;
/**
* 当前访客出口流量
*/
@Schema(description = "当前访客出口流量", name = "outFlow", example = "")
private Integer outFlow;
/**
* 目标端口
*/
@Schema(description = "目标端口", name = "port", example = "")
private Integer port;
/**
* 协议类型
*/
@Schema(description = "协议类型", name = "protocolType", example = "")
private ChannelProtocolType protocolType;
/**
* 代理类型
*/
@Schema(description = "代理类型", name = "proxyType", example = "")
private ChannelProxyType proxyType;
/**
* 服务端ID
*/
@Schema(description = "服务端ID", name = "serverId", example = "")
private String serverId;
/**
*
*/
@Schema(description = "", name = "updateTime", example = "")
private LocalDateTime updateTime;
public Integer getInFlowSize() {
if (inFlow == null) return 0;
return inFlow;
}
public Integer getOutFlowSize() {
if (outFlow == null) return 0;
return outFlow;
}
public String getInFlow() {
if (inFlow == null) return "0b";
return ByteSizeUtil.convertSize(inFlow);
}
public String getOutFlow() {
if (outFlow == null) return "0b";
return ByteSizeUtil.convertSize(outFlow);
}
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow_command_dto",description = "每日统计代理流量")
public class LazyProxyPerDayFlowDTO {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,300 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyFlowDTOAssembler;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyPerDayFlowDTOAssembler;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlowRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
import org.wu.framework.core.utils.ObjectUtils;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.web.plus.stereotype.LazyApplication;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl
**/
@LazyApplication
public class LazyProxyFlowApplicationImpl implements LazyProxyFlowApplication {
@Resource
LazyProxyFlowRepository lazyProxyFlowRepository;
@Resource
LazyProxyPerDayFlowRepository lazyProxyPerDayFlowRepository;
@Resource
ServerNodeProperties serverNodeProperties;
/**
* describe 新增代理流量
*
* @param lazyProxyFlowStoryCommand 新增代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> story(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
String serverId = serverNodeProperties.getNodeId();
lazyProxyFlow.setServerId(serverId);
return lazyProxyFlowRepository.story(lazyProxyFlow);
}
/**
* 流量增长存储
* 访客 ID 访客 端口必须
*
* @param lazyProxyFlowStoryCommand 代理流量
* @return
*/
@Override
public Result<LazyProxyFlow> flowIncreaseStory(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
String clientId = lazyProxyFlowStoryCommand.getClientId();
String ip = lazyProxyFlowStoryCommand.getIp();
ChannelProtocolType protocolType = lazyProxyFlowStoryCommand.getProtocolType();
ChannelProxyType proxyType = lazyProxyFlowStoryCommand.getProxyType();
Integer port = lazyProxyFlowStoryCommand.getPort();
String serverId = serverNodeProperties.getNodeId();
lazyProxyFlowStoryCommand.setServerId(serverId);
Integer realOutFlow = ObjectUtils.isEmpty(lazyProxyFlowStoryCommand.getOutFlow()) ? 0 : lazyProxyFlowStoryCommand.getOutFlow();
Integer realInFlow = ObjectUtils.isEmpty(lazyProxyFlowStoryCommand.getInFlow()) ? 0 : lazyProxyFlowStoryCommand.getInFlow();
// 查询是否存在已有流量 而后进行统计汇总
LazyProxyFlow findOneLazyProxyFlowQuery = new LazyProxyFlow();
findOneLazyProxyFlowQuery.setClientId(clientId);
findOneLazyProxyFlowQuery.setPort(port);
findOneLazyProxyFlowQuery.setIp(ip);
findOneLazyProxyFlowQuery.setProtocolType(protocolType);
findOneLazyProxyFlowQuery.setProxyType(proxyType);
findOneLazyProxyFlowQuery.setServerId(serverId);
lazyProxyFlowRepository.findOne(findOneLazyProxyFlowQuery).accept(existVisitorFlow -> {
Integer inFlow = existVisitorFlow.getInFlow();
Integer outFlow = existVisitorFlow.getOutFlow();
if (!ObjectUtils.isEmpty(inFlow)) {
lazyProxyFlowStoryCommand.setInFlow(realInFlow + inFlow);
}
if (!ObjectUtils.isEmpty(outFlow)) {
lazyProxyFlowStoryCommand.setOutFlow(realOutFlow + outFlow);
}
});
LazyProxyFlow lazyLazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
lazyProxyFlowRepository.story(lazyLazyProxyFlow);
// 日流量统计
LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand = new LazyProxyPerDayFlowStoryCommand();
lazyProxyPerDayFlowStoryCommand.setClientId(clientId);
lazyProxyPerDayFlowStoryCommand.setPort(port);
lazyProxyPerDayFlowStoryCommand.setIp(ip);
lazyProxyPerDayFlowStoryCommand.setProtocolType(protocolType);
lazyProxyPerDayFlowStoryCommand.setProxyType(proxyType);
lazyProxyPerDayFlowStoryCommand.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
lazyProxyPerDayFlowStoryCommand.setOutFlow(realOutFlow);
lazyProxyPerDayFlowStoryCommand.setInFlow(realInFlow);
lazyProxyPerDayFlowStoryCommand.setServerId(serverId);
LazyProxyPerDayFlow findOneLazyProxyPerDayFlowQuery = new LazyProxyPerDayFlow();
findOneLazyProxyPerDayFlowQuery.setClientId(clientId);
findOneLazyProxyPerDayFlowQuery.setPort(port);
findOneLazyProxyPerDayFlowQuery.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
findOneLazyProxyPerDayFlowQuery.setServerId(serverId);
findOneLazyProxyPerDayFlowQuery.setIp(ip);
findOneLazyProxyPerDayFlowQuery.setProtocolType(protocolType);
findOneLazyProxyPerDayFlowQuery.setProxyType(proxyType);
lazyProxyPerDayFlowRepository.findOne(findOneLazyProxyPerDayFlowQuery).accept(existLazyProxyPerDayFlow -> {
Integer inFlow = existLazyProxyPerDayFlow.getInFlow();
Integer outFlow = existLazyProxyPerDayFlow.getOutFlow();
if (!ObjectUtils.isEmpty(inFlow)) {
lazyProxyPerDayFlowStoryCommand.setInFlow(realInFlow + inFlow);
}
if (!ObjectUtils.isEmpty(outFlow)) {
lazyProxyPerDayFlowStoryCommand.setOutFlow(realOutFlow + outFlow);
}
});
LazyProxyPerDayFlow lazyVisitorPortPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowStoryCommand);
lazyProxyPerDayFlowRepository.story(lazyVisitorPortPerDayFlow);
return ResultFactory.successOf();
}
/**
* describe 批量新增代理流量
*
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList) {
List<LazyProxyFlow> lazyProxyFlowList = lazyProxyFlowStoryCommandList
.stream()
.map(lazyProxyFlowStoryCommand -> {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
String serverId = serverNodeProperties.getNodeId();
lazyProxyFlow.setServerId(serverId);
return lazyProxyFlow;
}
)
.collect(Collectors.toList());
return lazyProxyFlowRepository.batchStory(lazyProxyFlowList);
}
/**
* describe 更新代理流量
*
* @param lazyProxyFlowUpdateCommand 更新代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> updateOne(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowUpdateCommand);
return lazyProxyFlowRepository.story(lazyProxyFlow);
}
/**
* describe 查询单个代理流量
*
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlowDTO> findOne(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryOneCommand);
return lazyProxyFlowRepository.findOne(lazyProxyFlow).convert(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow);
}
/**
* describe 查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
* @return {@link Result<List<LazyProxyFlowDTO>>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyFlowDTO>> findList(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
return lazyProxyFlowRepository.findList(lazyProxyFlow).convert(lazyProxyFlows -> lazyProxyFlows.stream().map(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow).collect(Collectors.toList()));
}
/**
* describe 分页查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
* @return {@link Result<LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyPage<LazyProxyFlowDTO>> findPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
return lazyProxyFlowRepository.findPage(size, current, lazyProxyFlow).convert(page -> page.convert(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow));
}
/**
* describe 删除代理流量
*
* @param lazyProxyFlowRemoveCommand 删除代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> remove(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand) {
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowRemoveCommand);
return lazyProxyFlowRepository.remove(lazyProxyFlow);
}
/**
* 根据客户端查询流量
*
* @param size 分页大小
* @param current 分页
* @param lazyProxyFlowQueryListCommand 查询条件
* @return {@link Result<LazyPage< LazyVisitorFlowDTO >>} 分页访客端流量DTO对象
*/
@Override
public Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
LazyProxyFlow lazyLazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
String serverId = serverNodeProperties.getNodeId();
lazyLazyProxyFlow.setServerId(serverId);
return lazyProxyFlowRepository.findPageGroupByClientId(size, current, lazyLazyProxyFlow).convert(lazyProxyFlowLazyPage -> {
List<String> clientIdList = lazyProxyFlowLazyPage
.getRecords()
.stream()
.map(LazyProxyFlow::getClientId)
.toList();
List<LazyProxyFlow> lazyLazyProxyFlowList = lazyProxyFlowRepository.findListByClientIds(clientIdList, serverId);
// 根据客户端进行分组
List<LazyProxyFlowDTO> lazyLazyProxyFlowDTOList = lazyLazyProxyFlowList.stream().map(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow).toList();
Map<String/*客户端ID*/, List<LazyProxyFlowDTO>> client_port_flow_map = lazyLazyProxyFlowDTOList.stream().collect(Collectors.groupingBy(LazyProxyFlowDTO::getClientId));
Map<String/*客户端ID*/, Integer/*客户端进口流量*/> client_in_flow = lazyLazyProxyFlowDTOList.stream()
.collect(
Collectors.groupingBy(LazyProxyFlowDTO::getClientId,
Collectors.summingInt(LazyProxyFlowDTO::getInFlowSize)));
Map<String/*客户端ID*/, Integer/*客户端出口流量*/> client_out_flow = lazyLazyProxyFlowDTOList.stream()
.collect(
Collectors.groupingBy(LazyProxyFlowDTO::getClientId,
Collectors.summingInt(LazyProxyFlowDTO::getOutFlowSize)));
return lazyProxyFlowLazyPage.convert(lazyProxyFlow -> {
String clientId = lazyProxyFlow.getClientId();
LazyClientProxyFlowDTO lazyClientProxyFlowDTO = new LazyClientProxyFlowDTO();
lazyClientProxyFlowDTO.setClientId(clientId);
lazyClientProxyFlowDTO.setInFlow(client_in_flow.getOrDefault(clientId, 0));
lazyClientProxyFlowDTO.setOutFlow(client_out_flow.getOrDefault(clientId, 0));
lazyClientProxyFlowDTO.setLazyProxyFlowDTOList(client_port_flow_map.getOrDefault(clientId, new ArrayList<>()));
return lazyClientProxyFlowDTO;
});
});
}
}

View File

@@ -0,0 +1,144 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl;
import org.wu.framework.lazy.orm.web.plus.stereotype.LazyApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyPerDayFlowApplication;
import org.springframework.web.bind.annotation.*;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyPerDayFlowDTOAssembler;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
import java.util.stream.Collectors;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl
**/
@LazyApplication
public class LazyProxyPerDayFlowApplicationImpl implements LazyProxyPerDayFlowApplication {
@Resource
LazyProxyPerDayFlowRepository lazyProxyPerDayFlowRepository;
/**
* describe 新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowStoryCommand);
return lazyProxyPerDayFlowRepository.story(lazyProxyPerDayFlow);
}
/**
* describe 批量新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList) {
List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList = lazyProxyPerDayFlowStoryCommandList.stream().map( LazyProxyPerDayFlowDTOAssembler.INSTANCE::toLazyProxyPerDayFlow).collect(Collectors.toList());
return lazyProxyPerDayFlowRepository.batchStory(lazyProxyPerDayFlowList);
}
/**
* describe 更新每日统计代理流量
*
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> updateOne(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowUpdateCommand);
return lazyProxyPerDayFlowRepository.story(lazyProxyPerDayFlow);
}
/**
* describe 查询单个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlowDTO> findOne(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryOneCommand);
return lazyProxyPerDayFlowRepository.findOne(lazyProxyPerDayFlow).convert(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow);
}
/**
* describe 查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyPerDayFlowDTO>> findList(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryListCommand);
return lazyProxyPerDayFlowRepository.findList(lazyProxyPerDayFlow) .convert(lazyProxyPerDayFlows -> lazyProxyPerDayFlows.stream().map(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow).collect(Collectors.toList())) ;
}
/**
* describe 分页查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
* @return {@link Result<LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyPage<LazyProxyPerDayFlowDTO>> findPage(int size,int current,LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryListCommand);
return lazyProxyPerDayFlowRepository.findPage(size,current,lazyProxyPerDayFlow) .convert(page -> page.convert(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow)) ;
}
/**
* describe 删除每日统计代理流量
*
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand) {
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowRemoveCommand);
return lazyProxyPerDayFlowRepository.remove(lazyProxyPerDayFlow);
}
}

View File

@@ -0,0 +1,155 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.springframework.web.bind.annotation.*;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.spring.EasyController;
import java.util.List;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController
**/
@Tag(name = "代理流量提供者")
@EasyController("/lazy/proxy/flow")
public class LazyProxyFlowProvider {
@Resource
private LazyProxyFlowApplication lazyProxyFlowApplication;
/**
* describe 新增代理流量
*
* @param lazyProxyFlowStoryCommand 新增代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "新增代理流量")
@PostMapping("/story")
public Result<LazyProxyFlow> story(@RequestBody LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
return lazyProxyFlowApplication.story(lazyProxyFlowStoryCommand);
}
/**
* describe 批量新增代理流量
*
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "批量新增代理流量")
@PostMapping("/batchStory")
public Result<List<LazyProxyFlow>> batchStory(@RequestBody List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList) {
return lazyProxyFlowApplication.batchStory(lazyProxyFlowStoryCommandList);
}
/**
* describe 更新代理流量
*
* @param lazyProxyFlowUpdateCommand 更新代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "更新代理流量")
@PutMapping("/updateOne")
public Result<LazyProxyFlow> updateOne(@RequestBody LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand) {
return lazyProxyFlowApplication.updateOne(lazyProxyFlowUpdateCommand);
}
/**
* describe 查询单个代理流量
*
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "查询单个代理流量")
@GetMapping("/findOne")
public Result<LazyProxyFlowDTO> findOne(@ModelAttribute LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand) {
return lazyProxyFlowApplication.findOne(lazyProxyFlowQueryOneCommand);
}
/**
* describe 查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
* @return {@link Result<List<LazyProxyFlowDTO>>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "查询多个代理流量")
@GetMapping("/findList")
public Result<List<LazyProxyFlowDTO>> findList(@ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
return lazyProxyFlowApplication.findList(lazyProxyFlowQueryListCommand);
}
/**
* describe 分页查询多个代理流量
*
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
* @return {@link Result<LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "分页查询多个代理流量")
@GetMapping("/findPage")
public Result<LazyPage<LazyProxyFlowDTO>> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
@Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
return lazyProxyFlowApplication.findPage(size, current, lazyProxyFlowQueryListCommand);
}
/**
* 根据客户端查询流量
*
* @param size 分页大小
* @param current 分页
* @param lazyProxyFlowQueryListCommand 查询条件
* @return {@link Result<LazyPage< LazyVisitorFlowDTO >>} 分页访客端流量DTO对象
*/
@Operation(summary = "分页查询多个访客端流量")
@GetMapping("/findClientFlowPage")
public Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
@Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current,
@ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
return lazyProxyFlowApplication.findClientFlowPage(size, current, lazyProxyFlowQueryListCommand);
}
/**
* describe 删除代理流量
*
* @param lazyProxyFlowRemoveCommand 删除代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "删除代理流量")
@DeleteMapping("/remove")
public Result<LazyProxyFlow> remove(@ModelAttribute LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand) {
return lazyProxyFlowApplication.remove(lazyProxyFlowRemoveCommand);
}
}

View File

@@ -0,0 +1,142 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.wu.framework.web.spring.EasyController;
import org.springframework.web.bind.annotation.*;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.springframework.beans.factory.annotation.Autowired;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyPerDayFlowApplication;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController
**/
@Tag(name = "每日统计代理流量提供者")
@EasyController("/lazy/proxy/per/day/flow")
public class LazyProxyPerDayFlowProvider {
@Resource
private LazyProxyPerDayFlowApplication lazyProxyPerDayFlowApplication;
/**
* describe 新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "新增每日统计代理流量")
@PostMapping("/story")
public Result<LazyProxyPerDayFlow> story(@RequestBody LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand){
return lazyProxyPerDayFlowApplication.story(lazyProxyPerDayFlowStoryCommand);
}
/**
* describe 批量新增每日统计代理流量
*
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "批量新增每日统计代理流量")
@PostMapping("/batchStory")
public Result<List<LazyProxyPerDayFlow>> batchStory(@RequestBody List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList){
return lazyProxyPerDayFlowApplication.batchStory(lazyProxyPerDayFlowStoryCommandList);
}
/**
* describe 更新每日统计代理流量
*
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "更新每日统计代理流量")
@PutMapping("/updateOne")
public Result<LazyProxyPerDayFlow> updateOne(@RequestBody LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand){
return lazyProxyPerDayFlowApplication.updateOne(lazyProxyPerDayFlowUpdateCommand);
}
/**
* describe 查询单个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "查询单个每日统计代理流量")
@GetMapping("/findOne")
public Result<LazyProxyPerDayFlowDTO> findOne(@ModelAttribute LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand){
return lazyProxyPerDayFlowApplication.findOne(lazyProxyPerDayFlowQueryOneCommand);
}
/**
* describe 查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "查询多个每日统计代理流量")
@GetMapping("/findList")
public Result<List<LazyProxyPerDayFlowDTO>> findList(@ModelAttribute LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand){
return lazyProxyPerDayFlowApplication.findList(lazyProxyPerDayFlowQueryListCommand);
}
/**
* describe 分页查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
* @return {@link Result<LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "分页查询多个每日统计代理流量")
@GetMapping("/findPage")
public Result<LazyPage<LazyProxyPerDayFlowDTO>> findPage(@Parameter(description ="分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
@Parameter(description ="当前页数") @RequestParam(defaultValue = "1", value = "current") int current,@ModelAttribute LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand){
return lazyProxyPerDayFlowApplication.findPage(size,current,lazyProxyPerDayFlowQueryListCommand);
}
/**
* describe 删除每日统计代理流量
*
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Operation(summary = "删除每日统计代理流量")
@DeleteMapping("/remove")
public Result<LazyProxyPerDayFlow> remove(@ModelAttribute LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand){
return lazyProxyPerDayFlowApplication.remove(lazyProxyPerDayFlowRemoveCommand);
}
}

View File

@@ -0,0 +1,111 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_flow",description = "代理流量")
public class LazyProxyFlow {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,126 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.visitor.flow.LazyVisitorPortFlow;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository
**/
public interface LazyProxyFlowRepository {
/**
* describe 新增代理流量
*
* @param lazyProxyFlow 新增代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> story(LazyProxyFlow lazyProxyFlow);
/**
* describe 批量新增代理流量
*
* @param lazyProxyFlowList 批量新增代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlow> lazyProxyFlowList);
/**
* describe 查询单个代理流量
*
* @param lazyProxyFlow 查询单个代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> findOne(LazyProxyFlow lazyProxyFlow);
/**
* describe 查询多个代理流量
*
* @param lazyProxyFlow 查询多个代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyFlow>> findList(LazyProxyFlow lazyProxyFlow);
/**
* describe 分页查询多个代理流量
*
* @param size 当前页数
* @param current 当前页
* @param lazyProxyFlow 分页查询多个代理流量
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyPage<LazyProxyFlow>> findPage(int size,int current,LazyProxyFlow lazyProxyFlow);
/**
* describe 删除代理流量
*
* @param lazyProxyFlow 删除代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyFlow> remove(LazyProxyFlow lazyProxyFlow);
/**
* describe 是否存在代理流量
*
* @param lazyProxyFlow 是否存在代理流量
* @return {@link Result<Boolean>} 代理流量是否存在
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<Boolean> exists(LazyProxyFlow lazyProxyFlow);
/**
* 根据客户端查询流量
*
* @param size 分页大小
* @param current 分页
* @param lazyProxyFlow 查询条件
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页访客端流量DTO对象
*/
Result<LazyPage<LazyProxyFlow>> findPageGroupByClientId(int size, int current, LazyProxyFlow lazyProxyFlow);
/**
* 根据客户端ID查询出 客户端所有的进出口流量
*
* @param clientIdList 客户端ID
* @param serverId 服务ID
* @return 客户端所有的进出口流量
*/
List<LazyProxyFlow> findListByClientIds(List<String> clientIdList, String serverId);
}

View File

@@ -0,0 +1,118 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain
**/
@Data
@Accessors(chain = true)
@Schema(title = "lazy_proxy_per_day_flow",description = "每日统计代理流量")
public class LazyProxyPerDayFlow {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,106 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository
**/
public interface LazyProxyPerDayFlowRepository {
/**
* describe 新增每日统计代理流量
*
* @param lazyProxyPerDayFlow 新增每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlow lazyProxyPerDayFlow);
/**
* describe 批量新增每日统计代理流量
*
* @param lazyProxyPerDayFlowList 批量新增每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList);
/**
* describe 查询单个每日统计代理流量
*
* @param lazyProxyPerDayFlow 查询单个每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> findOne(LazyProxyPerDayFlow lazyProxyPerDayFlow);
/**
* describe 查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlow 查询多个每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量DTO对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<List<LazyProxyPerDayFlow>> findList(LazyProxyPerDayFlow lazyProxyPerDayFlow);
/**
* describe 分页查询多个每日统计代理流量
*
* @param size 当前页数
* @param current 当前页
* @param lazyProxyPerDayFlow 分页查询多个每日统计代理流量
* @return {@link Result<LazyPage<LazyProxyPerDayFlow>>} 分页每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyPage<LazyProxyPerDayFlow>> findPage(int size,int current,LazyProxyPerDayFlow lazyProxyPerDayFlow);
/**
* describe 删除每日统计代理流量
*
* @param lazyProxyPerDayFlow 删除每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlow lazyProxyPerDayFlow);
/**
* describe 是否存在每日统计代理流量
*
* @param lazyProxyPerDayFlow 是否存在每日统计代理流量
* @return {@link Result<Boolean>} 每日统计代理流量是否存在
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
Result<Boolean> exists(LazyProxyPerDayFlow lazyProxyPerDayFlow);
}

View File

@@ -0,0 +1,48 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter
**/
@Mapper
public interface LazyProxyFlowConverter {
/**
* describe MapStruct 创建的代理对象
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlowConverter INSTANCE = Mappers.getMapper(LazyProxyFlowConverter.class);
/**
* describe 实体对象 转换成领域对象
*
* @param lazyProxyFlowDO 代理流量实体对象
* @return {@link LazyProxyFlow} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowDO lazyProxyFlowDO);
/**
* describe 领域对象 转换成实体对象
*
* @param lazyProxyFlow 代理流量领域对象
* @return {@link LazyProxyFlowDO} 代理流量实体对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyFlowDO fromLazyProxyFlow(LazyProxyFlow lazyProxyFlow);
}

View File

@@ -0,0 +1,48 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter
**/
@Mapper
public interface LazyProxyPerDayFlowConverter {
/**
* describe MapStruct 创建的代理对象
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlowConverter INSTANCE = Mappers.getMapper(LazyProxyPerDayFlowConverter.class);
/**
* describe 实体对象 转换成领域对象
*
* @param lazyProxyPerDayFlowDO 每日统计代理流量实体对象
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO);
/**
* describe 领域对象 转换成实体对象
*
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
* @return {@link LazyProxyPerDayFlowDO} 每日统计代理流量实体对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
LazyProxyPerDayFlowDO fromLazyProxyPerDayFlow(LazyProxyPerDayFlow lazyProxyPerDayFlow);
}

View File

@@ -0,0 +1,131 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex;
import org.wu.framework.core.stereotype.LayerField;
import org.wu.framework.core.stereotype.LayerField.LayerFieldType;
import org.wu.framework.lazy.orm.core.stereotype.LazyTable;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableField;
import org.wu.framework.lazy.orm.core.stereotype.*;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.String;
import java.time.LocalDateTime;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableFieldId;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity
**/
@Data
@Accessors(chain = true)
@LazyTable(tableName = "lazy_proxy_flow",comment = "代理流量")
@Schema(title = "lazy_proxy_flow",description = "代理流量")
public class LazyProxyFlowDO {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
@LazyTableFieldUnique(name="client_id",comment="客户端ID",notNull=true,columnType="varchar(50)")
private String clientId;
/**
*
*
*/
@Schema(description ="",name ="createTime",example = "")
@LazyTableField(name="create_time",comment="",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra="")
private LocalDateTime createTime;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
@LazyTableFieldId(name = "id", comment = "主键")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
@LazyTableField(name="in_flow",comment="当前访客当前进口流量",columnType="int")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
@LazyTableFieldUnique(name="ip",comment="目标ip",columnType="varchar(25)")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
@LazyTableField(name="is_deleted",comment="是否删除",defaultValue="'0'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="tinyint")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
@LazyTableField(name="out_flow",comment="当前访客出口流量",columnType="int")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
@LazyTableFieldUnique(name="port",comment="目标端口",columnType="int")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
@LazyTableFieldUnique(name="protocol_type",comment="协议类型",columnType="varchar(25)")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
@LazyTableFieldUnique(name="proxy_type",comment="代理类型",columnType="varchar(25)")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
@LazyTableFieldUnique(name="server_id",comment="服务端ID",notNull=true,columnType="varchar(25)")
private String serverId;
/**
*
*
*/
@Schema(description ="",name ="updateTime",example = "")
@LazyTableField(name="update_time",comment="",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra=" on update CURRENT_TIMESTAMP")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,139 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity;
import lombok.Data;
import lombok.experimental.Accessors;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex;
import org.wu.framework.core.stereotype.LayerField;
import org.wu.framework.core.stereotype.LayerField.LayerFieldType;
import org.wu.framework.lazy.orm.core.stereotype.LazyTable;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableField;
import org.wu.framework.lazy.orm.core.stereotype.*;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.String;
import java.time.LocalDateTime;
import org.wu.framework.lazy.orm.core.stereotype.LazyTableFieldId;
import java.lang.Long;
import java.lang.Integer;
import java.lang.Boolean;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity
**/
@Data
@Accessors(chain = true)
@LazyTable(tableName = "lazy_proxy_per_day_flow",comment = "每日统计代理流量")
@Schema(title = "lazy_proxy_per_day_flow",description = "每日统计代理流量")
public class LazyProxyPerDayFlowDO {
/**
*
* 客户端ID
*/
@Schema(description ="客户端ID",name ="clientId",example = "")
@LazyTableField(name="client_id",comment="客户端ID",columnType="varchar(50)")
private String clientId;
/**
*
* 创建时间
*/
@Schema(description ="创建时间",name ="createTime",example = "")
@LazyTableField(name="create_time",comment="创建时间",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra="")
private LocalDateTime createTime;
/**
*
* 日期
*/
@Schema(description ="日期",name ="day",example = "")
@LazyTableField(name="day",comment="日期",columnType="varchar(255)")
private String day;
/**
*
* 主键
*/
@Schema(description ="主键",name ="id",example = "")
@LazyTableFieldId(name = "id", comment = "主键")
private Long id;
/**
*
* 当前访客当前进口流量
*/
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
@LazyTableField(name="in_flow",comment="当前访客当前进口流量",columnType="int")
private Integer inFlow;
/**
*
* 目标ip
*/
@Schema(description ="目标ip",name ="ip",example = "")
@LazyTableField(name="ip",comment="目标ip",columnType="varchar(255)")
private String ip;
/**
*
* 是否删除
*/
@Schema(description ="是否删除",name ="isDeleted",example = "")
@LazyTableField(name="is_deleted",comment="是否删除",defaultValue="'0'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="tinyint")
private Boolean isDeleted;
/**
*
* 当前访客出口流量
*/
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
@LazyTableField(name="out_flow",comment="当前访客出口流量",columnType="int")
private Integer outFlow;
/**
*
* 目标端口
*/
@Schema(description ="目标端口",name ="port",example = "")
@LazyTableField(name="port",comment="目标端口",columnType="int")
private Integer port;
/**
*
* 协议类型
*/
@Schema(description ="协议类型",name ="protocolType",example = "")
@LazyTableField(name="protocol_type",comment="协议类型",columnType="varchar(255)")
private ChannelProtocolType protocolType;
/**
*
* 代理类型
*/
@Schema(description ="代理类型",name ="proxyType",example = "")
@LazyTableField(name="proxy_type",comment="代理类型",columnType="varchar(255)")
private ChannelProxyType proxyType;
/**
*
* 服务端ID
*/
@Schema(description ="服务端ID",name ="serverId",example = "")
@LazyTableField(name="server_id",comment="服务端ID",notNull=true,columnType="varchar(255)")
private String serverId;
/**
*
* 修改时间
*/
@Schema(description ="修改时间",name ="updateTime",example = "")
@LazyTableField(name="update_time",comment="修改时间",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra=" on update CURRENT_TIMESTAMP")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,18 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.jpa.lazy;
import org.wu.framework.lazy.orm.database.jpa.repository.LazyJpaRepository;
import org.wu.framework.lazy.orm.database.jpa.repository.annotation.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureLazyJpa
**/
@LazyRepository
public interface LazyProxyFlowLazyJpaRepository extends LazyJpaRepository<LazyProxyFlowDO,Long> {
}

View File

@@ -0,0 +1,18 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.jpa.lazy;
import org.wu.framework.lazy.orm.database.jpa.repository.LazyJpaRepository;
import org.wu.framework.lazy.orm.database.jpa.repository.annotation.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureLazyJpa
**/
@LazyRepository
public interface LazyProxyPerDayFlowLazyJpaRepository extends LazyJpaRepository<LazyProxyPerDayFlowDO,Long> {
}

View File

@@ -0,0 +1,15 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper
**/
public interface LazyProxyFlowMapper {
}

View File

@@ -0,0 +1,15 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper
**/
public interface LazyProxyPerDayFlowMapper {
}

View File

@@ -0,0 +1,188 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlowRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyProxyFlowConverter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
import org.springframework.stereotype.Repository;
import org.wu.framework.core.utils.ObjectUtils;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* describe 代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence
**/
@Repository
public class LazyProxyFlowRepositoryImpl implements LazyProxyFlowRepository {
@Resource
LazyLambdaStream lazyLambdaStream;
/**
* describe 新增代理流量
*
* @param lazyProxyFlow 新增代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> story(LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
lazyLambdaStream.upsert(lazyProxyFlowDO);
return ResultFactory.successOf();
}
/**
* describe 批量新增代理流量
*
* @param lazyProxyFlowList 批量新增代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlow> lazyProxyFlowList) {
List<LazyProxyFlowDO> lazyProxyFlowDOList = lazyProxyFlowList.stream().map(LazyProxyFlowConverter.INSTANCE::fromLazyProxyFlow).collect(Collectors.toList());
lazyLambdaStream.upsert(lazyProxyFlowDOList);
return ResultFactory.successOf();
}
/**
* describe 查询单个代理流量
*
* @param lazyProxyFlow 查询单个代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> findOne(LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
LazyProxyFlow lazyProxyFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), LazyProxyFlow.class);
return ResultFactory.successOf(lazyProxyFlowOne);
}
/**
* describe 查询多个代理流量
*
* @param lazyProxyFlow 查询多个代理流量
* @return {@link Result<List<LazyProxyFlow>>} 代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyFlow>> findList(LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
List<LazyProxyFlow> lazyProxyFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), LazyProxyFlow.class);
return ResultFactory.successOf(lazyProxyFlowList);
}
/**
* describe 分页查询多个代理流量
*
* @param size 当前页数
* @param current 当前页
* @param lazyProxyFlow 分页查询多个代理流量
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyPage<LazyProxyFlow>> findPage(int size, int current, LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
LazyPage<LazyProxyFlow> lazyPage = new LazyPage<>(current, size);
LazyPage<LazyProxyFlow> lazyProxyFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), lazyPage, LazyProxyFlow.class);
return ResultFactory.successOf(lazyProxyFlowLazyPage);
}
/**
* describe 删除代理流量
*
* @param lazyProxyFlow 删除代理流量
* @return {@link Result<LazyProxyFlow>} 代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyFlow> remove(LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO));
return ResultFactory.successOf();
}
/**
* describe 是否存在代理流量
*
* @param lazyProxyFlow 代理流量领域对象
* @return {@link Result<Boolean>} 是否存在 true 存在false 不存在
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<Boolean> exists(LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO));
return ResultFactory.successOf(exists);
}
/**
* 根据客户端查询流量
*
* @param size 分页大小
* @param current 分页
* @param lazyProxyFlow 查询条件
* @return {@link Result<LazyPage< LazyProxyFlow >>} 分页访客端流量DTO对象
*/
@Override
public Result<LazyPage<LazyProxyFlow>> findPageGroupByClientId(int size, int current, LazyProxyFlow lazyProxyFlow) {
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
LazyPage<LazyProxyFlow> lazyPage = new LazyPage<>(current, size);
LazyPage<LazyProxyFlow> visitorFlowLazyPage = lazyLambdaStream
.selectPage(
LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO)
.groupBy(LazyProxyFlowDO::getClientId),
lazyPage,
LazyProxyFlow.class);
return ResultFactory.successOf(visitorFlowLazyPage);
}
/**
* 根据客户端ID查询出 客户端所有的进出口流量
*
* @param clientIdList 客户端ID
* @param serverId 服务端ID
* @return 客户端所有的进出口流量
*/
@Override
public List<LazyProxyFlow> findListByClientIds(List<String> clientIdList, String serverId) {
if (ObjectUtils.isEmpty(clientIdList)) {
return new ArrayList<>();
}
return lazyLambdaStream.selectList(
LazyWrappers.<LazyProxyFlowDO>lambdaWrapper()
.in(LazyProxyFlowDO::getClientId, clientIdList)
.eq(LazyProxyFlowDO::getServerId, serverId),
LazyProxyFlow.class);
}
}

View File

@@ -0,0 +1,152 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyProxyPerDayFlowConverter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyPerDayFlowMapper;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
import org.springframework.stereotype.Repository;
import java.util.stream.Collectors;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计代理流量
*
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence
**/
@Repository
public class LazyProxyPerDayFlowRepositoryImpl implements LazyProxyPerDayFlowRepository {
@Resource
LazyLambdaStream lazyLambdaStream;
/**
* describe 新增每日统计代理流量
*
* @param lazyProxyPerDayFlow 新增每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
lazyLambdaStream.upsert(lazyProxyPerDayFlowDO);
return ResultFactory.successOf();
}
/**
* describe 批量新增每日统计代理流量
*
* @param lazyProxyPerDayFlowList 批量新增每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList) {
List<LazyProxyPerDayFlowDO> lazyProxyPerDayFlowDOList = lazyProxyPerDayFlowList.stream().map(LazyProxyPerDayFlowConverter.INSTANCE::fromLazyProxyPerDayFlow).collect(Collectors.toList());
lazyLambdaStream.upsert(lazyProxyPerDayFlowDOList);
return ResultFactory.successOf();
}
/**
* describe 查询单个每日统计代理流量
*
* @param lazyProxyPerDayFlow 查询单个每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> findOne(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
LazyProxyPerDayFlow lazyProxyPerDayFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO), LazyProxyPerDayFlow.class);
return ResultFactory.successOf(lazyProxyPerDayFlowOne);
}
/**
* describe 查询多个每日统计代理流量
*
* @param lazyProxyPerDayFlow 查询多个每日统计代理流量
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<List<LazyProxyPerDayFlow>> findList(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO), LazyProxyPerDayFlow.class);
return ResultFactory.successOf(lazyProxyPerDayFlowList);
}
/**
* describe 分页查询多个每日统计代理流量
*
* @param size 当前页数
* @param current 当前页
* @param lazyProxyPerDayFlow 分页查询多个每日统计代理流量
* @return {@link Result<LazyPage<LazyProxyPerDayFlow>>} 分页每日统计代理流量领域对象
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyPage<LazyProxyPerDayFlow>> findPage(int size,int current,LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
LazyPage<LazyProxyPerDayFlow> lazyPage = new LazyPage<>(current,size);
LazyPage<LazyProxyPerDayFlow> lazyProxyPerDayFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO),lazyPage, LazyProxyPerDayFlow.class);
return ResultFactory.successOf(lazyProxyPerDayFlowLazyPage);
}
/**
* describe 删除每日统计代理流量
*
* @param lazyProxyPerDayFlow 删除每日统计代理流量
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
// lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO));
return ResultFactory.successOf();
}
/**
* describe 是否存在每日统计代理流量
*
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
* @return {@link Result<Boolean>} 是否存在 true 存在false 不存在
* @author Jia wei Wu
* @date 2025/06/06 11:39 晚上
**/
@Override
public Result<Boolean> exists(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
Boolean exists=lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO));
return ResultFactory.successOf(exists);
}
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyFlowMapper">
<resultMap id="BaseResultMap" type="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO">
<result column="client_id" property="clientId" />
<result column="create_time" property="createTime" />
<id column="id" property="id" />
<result column="in_flow" property="inFlow" />
<result column="ip" property="ip" />
<result column="is_deleted" property="isDeleted" />
<result column="out_flow" property="outFlow" />
<result column="port" property="port" />
<result column="protocol_type" property="protocolType" />
<result column="proxy_type" property="proxyType" />
<result column="server_id" property="serverId" />
<result column="update_time" property="updateTime" />
</resultMap>
</mapper>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyPerDayFlowMapper">
<resultMap id="BaseResultMap" type="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO">
<result column="client_id" property="clientId" />
<result column="create_time" property="createTime" />
<result column="day" property="day" />
<id column="id" property="id" />
<result column="in_flow" property="inFlow" />
<result column="ip" property="ip" />
<result column="is_deleted" property="isDeleted" />
<result column="out_flow" property="outFlow" />
<result column="port" property="port" />
<result column="protocol_type" property="protocolType" />
<result column="proxy_type" property="proxyType" />
<result column="server_id" property="serverId" />
<result column="update_time" property="updateTime" />
</resultMap>
</mapper>

View File

@@ -4,10 +4,10 @@ spring:
client: client:
# inet-host: 124.222.48.62 # inet-host: 124.222.48.62
# inet-port: 30676 # inet-port: 30676
inet-host: 124.222.152.160 # inet-host: 124.222.152.160
inet-port: 30560 # inet-port: 30560
# inet-host: 127.0.0.1 inet-host: 127.0.0.1
# inet-port: 7001 inet-port: 7001
inet-path: wu-lazy-cloud-heartbeat-server inet-path: wu-lazy-cloud-heartbeat-server
client-id: socks-local-proxy # 客户端ID client-id: socks-local-proxy # 客户端ID
app-key: a4bf4415-25aa-4007-914b-31ec77d1292f app-key: a4bf4415-25aa-4007-914b-31ec77d1292f

View File

@@ -32,29 +32,30 @@
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.graalvm.buildtools</groupId> <groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId> <artifactId>native-maven-plugin</artifactId>
<version>0.10.3</version> <version>0.10.3</version>
<configuration> <configuration>
<!-- imageName用于设置生成的二进制文件名称 --> <!-- imageName用于设置生成的二进制文件名称 -->
<imageName>${project.artifactId}</imageName> <imageName>${project.artifactId}</imageName>
<!-- mainClass用于指定main方法类路径 --> <!-- mainClass用于指定main方法类路径 -->
<mainClass>org.framework.lazy.cloud.network.heartbeat.server.LazyCloudHeartbeatServerStart</mainClass> <mainClass>org.framework.lazy.cloud.network.heartbeat.server.LazyCloudHeartbeatServerStart
<buildArgs> </mainClass>
--no-fallback <buildArgs>
</buildArgs> --no-fallback
</configuration> </buildArgs>
<executions> </configuration>
<execution> <executions>
<id>build-native</id> <execution>
<goals> <id>build-native</id>
<goal>compile-no-fork</goal> <goals>
</goals> <goal>compile-no-fork</goal>
<phase>package</phase> </goals>
</execution> <phase>package</phase>
</executions> </execution>
</plugin> </executions>
</plugin>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>