Browse Source

临港大屏投放测试

zhangqiankun 2 năm trước cách đây
mục cha
commit
9cf4caf829

+ 6 - 7
pom.xml

@@ -147,12 +147,6 @@
 		</dependency>
 		
 		<dependency>
-			<groupId>cn.hutool</groupId>
-			<artifactId>hutool-core</artifactId>
-			<version>5.6.3</version>
-		</dependency>
-		
-		<dependency>
 			<groupId>org.apache.httpcomponents</groupId>
 			<artifactId>httpclient</artifactId>
 		</dependency>
@@ -182,7 +176,12 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
-
+        
+		<dependency>
+		    <groupId>io.netty</groupId>
+		    <artifactId>netty-all</artifactId>
+		    <version>4.1.79.Final</version>
+		</dependency>
 
     </dependencies>
 

+ 8 - 0
src/main/java/com/persagy/cameractl/conf/AllStaticConfig.java

@@ -1,6 +1,14 @@
 package com.persagy.cameractl.conf;
 
 public class AllStaticConfig {
+	public static String groupCode;
+	
+	public static String projectId;
+	
+	public static String toupIp;
+	
+	public static int toupPort;
+	
 	public static String dahuaMesHost;
 
 	public static String dahuaApiIp;

+ 44 - 0
src/main/java/com/persagy/cameractl/conf/CameraApiConfig.java

@@ -5,6 +5,18 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class CameraApiConfig {
+	@Value("${global.group-code}")
+	private String groupCode;
+	
+	@Value("${global.project-id}")
+	private String projectId;
+	
+	@Value("${toup-tcp.ip}")
+	private String toupIp;
+	
+	@Value("${toup-tcp.port}")
+	private String toupPort;
+	
 	@Value("${dahua-config.mesHost}")
 	private String dahuaMesHost;
 	
@@ -95,4 +107,36 @@ public class CameraApiConfig {
 		this.dahuaTvScreenId = dahuaTvScreenId;
 	}
 
+	public String getToupIp() {
+		return toupIp;
+	}
+
+	public void setToupIp(String toupIp) {
+		this.toupIp = toupIp;
+	}
+
+	public String getToupPort() {
+		return toupPort;
+	}
+
+	public void setToupPort(String toupPort) {
+		this.toupPort = toupPort;
+	}
+
+	public String getGroupCode() {
+		return groupCode;
+	}
+
+	public void setGroupCode(String groupCode) {
+		this.groupCode = groupCode;
+	}
+
+	public String getProjectId() {
+		return projectId;
+	}
+
+	public void setProjectId(String projectId) {
+		this.projectId = projectId;
+	}
+
 }

+ 4 - 0
src/main/java/com/persagy/cameractl/init/SystemInit.java

@@ -26,6 +26,10 @@ public class SystemInit implements ApplicationRunner {
 
 	@Override
 	public void run(ApplicationArguments args) throws Exception {
+		AllStaticConfig.groupCode=cameraApiConfig.getGroupCode();
+		AllStaticConfig.projectId=cameraApiConfig.getProjectId();
+		AllStaticConfig.toupIp=cameraApiConfig.getToupIp();
+		AllStaticConfig.toupPort=Integer.valueOf(cameraApiConfig.getToupPort());
 		AllStaticConfig.dahuaMesHost=cameraApiConfig.getDahuaMesHost();
 		AllStaticConfig.dahuaApiIp=cameraApiConfig.getDahuaApiIp();
 		AllStaticConfig.dahuaApiPort=cameraApiConfig.getDahuaApiPort();

+ 10 - 0
src/main/java/com/persagy/cameractl/service/DahCameraExecuteApi.java

@@ -16,6 +16,7 @@ import com.persagy.cameractl.utils.JsonTools;
 import com.persagy.cameractl.utils.OtherTools;
 import com.persagy.cameractl.utils.ResultClass;
 import com.persagy.cameractl.utils.SdkClient;
+import com.persagy.socket.IotSocketClient;
 
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
@@ -441,6 +442,10 @@ public class DahCameraExecuteApi {
 
     /*投屏*/
     public ResultClass touP(Camera dahCamera) {
+    	if ("Pj3101150010".equals(AllStaticConfig.projectId)) {
+			IotSocketClient.connectAndSend(AllStaticConfig.toupIp, AllStaticConfig.toupPort, "C6 11 43 20 02 BB");
+    		return OtherTools.executeSuccess("投屏成功");
+		}
         DpsdkMainWindows dpsdkMainWindows = new DpsdkMainWindows(dahCamera);
         int tvWallId = Integer.parseInt(AllStaticConfig.dahuaTvWallId);
         int screenId = Integer.parseInt(AllStaticConfig.dahuaTvScreenId);
@@ -450,6 +455,11 @@ public class DahCameraExecuteApi {
 
     /*退出投屏*/
     public ResultClass exitTouP(Camera dahCamera) {
+    	if ("Pj3101150010".equals(AllStaticConfig.projectId)) {
+			IotSocketClient.connectAndSend(AllStaticConfig.toupIp, AllStaticConfig.toupPort, "C6 11 43 20 03 BB");
+			return OtherTools.executeSuccess("退出大屏成功");
+		}
+    	
         DpsdkMainWindows dpsdkMainWindows = new DpsdkMainWindows(dahCamera);
         int tvWallId = Integer.parseInt(AllStaticConfig.dahuaTvWallId);
         int screenId = Integer.parseInt(AllStaticConfig.dahuaTvScreenId);

+ 2 - 0
src/main/java/com/persagy/cameractl/utils/Camera.java

@@ -7,6 +7,8 @@ import lombok.ToString;
  * */
 @ToString
 public class Camera {
+	public String projectId;
+	
 	// 通道号 1~32表示模拟通道,9000系列混合型DVR和NVR等设备的IP通道从33开始(即程序用的通道号为33+通道号-1)。回放、实时播放、控制使用
 	public int channel = 1;
 

+ 61 - 0
src/main/java/com/persagy/socket/IotClientHandler.java

@@ -0,0 +1,61 @@
+package com.persagy.socket;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 
+ * @version 1.0.0
+ * @company persagy 
+ * @author zhangqiankun
+ * @date 2021年10月12日 上午10:20:11
+ */
+@Slf4j
+public class IotClientHandler extends SimpleChannelInboundHandler<String> {
+
+	/** 需要调用的指令信息,后缀需携带 短路与 & */
+	private final String command;
+	
+    public IotClientHandler(String command) {
+    	this.command = command;
+	}
+
+	/**
+     * 向服务端发送数据
+     */
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+    	log.info("发送至服务端的消息: {}", command);
+        ctx.writeAndFlush(command);
+    }
+
+    /**
+     * 接收数据
+     */
+    @Override
+    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+        log.info("客户端接收到的服务端信息:" + msg);
+        ctx.writeAndFlush("C6 11 43 20 11 BB");
+        log.info("客户端接回执服务端的信息: C6 11 43 20 11 BB");
+        Thread.sleep(1000);
+        ctx.close();
+    }
+	
+    /**
+     * channel 通道 Inactive 不活跃的
+     *
+     * 当客户端主动断开服务端的链接后,这个通道就是不活跃的。也就是说客户端与服务端的关闭了通信通道并且不可以传输数据
+     */
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        log.info("客户端与服务端通道关闭:" + ctx.channel().remoteAddress());
+        ctx.close();
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+    	log.warn("通道异常退出", cause);
+        ctx.close();
+    }
+    
+}

+ 75 - 0
src/main/java/com/persagy/socket/IotSocketClient.java

@@ -0,0 +1,75 @@
+package com.persagy.socket;
+
+import java.net.InetSocketAddress;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 
+ * @version 1.0.0
+ * @company persagy
+ * @author zhangqiankun
+ * @date 2021年10月12日 上午10:06:34
+ */
+@Slf4j
+public class IotSocketClient {
+
+	public static final EventLoopGroup GROUP = new NioEventLoopGroup(1);
+
+	public static final Bootstrap BS = new Bootstrap();
+
+	static {
+		// 注册线程池、使用NioSocketChannel来作为连接用的channel类
+		BS.group(GROUP).channel(NioSocketChannel.class);
+	}
+	
+	public static boolean connectAndSend(String host, int port, String command) {
+		boolean result = false;
+		ChannelFuture cf = null;
+		try {
+			BS.remoteAddress(new InetSocketAddress(host, port)) // 绑定连接端口和host信息
+				.handler(new ChannelInitializer<SocketChannel>() { // 绑定连接初始化器
+					@Override
+					protected void initChannel(SocketChannel ch) throws Exception {
+						log.info("正在连接中...");
+						ch.pipeline().addLast(new StringEncoder(CharsetUtil.UTF_8));
+						ch.pipeline().addLast(new StringDecoder(CharsetUtil.UTF_8));
+						ch.pipeline().addLast(new IotClientHandler(command));
+					}
+				});
+
+			cf = BS.connect().sync(); // 异步连接服务器
+			log.info("服务端连接成功...");
+			
+			result = true;
+		} catch (Exception e) {
+			log.error("与服务端建立连接失败", e);
+		} finally {
+			if (cf != null) {
+				try {
+					cf.channel().closeFuture().sync();
+					log.info("连接已关闭..");
+				} catch (Exception e2) {
+					log.error("未知异常", e2);
+				}
+			}
+		}
+		
+		return result;
+	}
+
+	public static void main(String[] args) throws Exception {
+		IotSocketClient.connectAndSend("192.168.100.102", 30054, "(5001120003;1;report;20220617100000;17107;ZD1060;1;902;155)");
+	}
+	
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 2
src/main/resources/application.yml