From adbddd5eb0c016f1a00fd9db7b05502f4012c41d Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 28 四月 2023 14:59:44 +0800 Subject: [PATCH] Merge pull request #837 from keDaYao/featur-jt1078 --- src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java | 94 +++++++ src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java | 80 ++++++ src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java | 6 src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java | 16 + src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java | 11 src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java | 2 src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java | 71 +++++ src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java | 190 ++++++++++++++ src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java | 173 +++++++++++++ src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java | 103 +++++++ src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java | 2 src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java | 9 12 files changed, 744 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java index ad3ab00..c55c627 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java @@ -1,8 +1,7 @@ package com.genersoft.iot.vmp.jt1078.cmd; import com.genersoft.iot.vmp.jt1078.proc.entity.Cmd; -import com.genersoft.iot.vmp.jt1078.proc.response.J9101; -import com.genersoft.iot.vmp.jt1078.proc.response.J9102; +import com.genersoft.iot.vmp.jt1078.proc.response.*; import com.genersoft.iot.vmp.jt1078.session.SessionManager; import java.util.Random; @@ -16,6 +15,15 @@ private final Random random = new Random(); + private static final String H9101 = "9101"; + private static final String H9102 = "9102"; + private static final String H9201 = "9201"; + private static final String H9202 = "9202"; + private static final String H9205 = "9205"; + + private static final String H0001 = "0001"; + private static final String H1205 = "1205"; + /** * 寮�鍚洿鎾棰� * @@ -26,8 +34,8 @@ Cmd cmd = new Cmd.Builder() .setDevId(devId) .setPackageNo(randomInt()) - .setMsgId("9101") - .setRespId("0001") + .setMsgId(H9101) + .setRespId(H0001) .setRs(j9101) .build(); return SessionManager.INSTANCE.request(cmd, timeOut); @@ -43,13 +51,64 @@ Cmd cmd = new Cmd.Builder() .setDevId(devId) .setPackageNo(randomInt()) - .setMsgId("9102") - .setRespId("0001") + .setMsgId(H9102) + .setRespId(H0001) .setRs(j9102) .build(); return SessionManager.INSTANCE.request(cmd, timeOut); } + /** + * 鏌ヨ闊宠棰戝垪琛� + * + * @param devId 璁惧鍙� + * @param j9205 鏌ヨ闊宠棰戝垪琛� + */ + public String queryBackTime(String devId, J9205 j9205, Integer timeOut) { + Cmd cmd = new Cmd.Builder() + .setDevId(devId) + .setPackageNo(randomInt()) + .setMsgId(H9205) + .setRespId(H1205) + .setRs(j9205) + .build(); + return SessionManager.INSTANCE.request(cmd, timeOut); + } + + /** + * 寮�鍚棰戝洖鏀� + * + * @param devId 璁惧鍙� + * @param j9201 瑙嗛鍥炴斁鍙傛暟 + */ + public String startBackLive(String devId, J9201 j9201, Integer timeOut) { + Cmd cmd = new Cmd.Builder() + .setDevId(devId) + .setPackageNo(randomInt()) + .setMsgId(H9201) + .setRespId(H1205) + .setRs(j9201) + .build(); + return SessionManager.INSTANCE.request(cmd, timeOut); + } + + /** + * 瑙嗛鍥炴斁鎺у埗 + * + * @param devId 璁惧鍙� + * @param j9202 鎺у埗瑙嗛鍥炴斁鍙傛暟 + */ + public String controlBackLive(String devId, J9202 j9202, Integer timeOut) { + Cmd cmd = new Cmd.Builder() + .setDevId(devId) + .setPackageNo(randomInt()) + .setMsgId(H9202) + .setRespId(H0001) + .setRs(j9202) + .build(); + return SessionManager.INSTANCE.request(cmd, timeOut); + } + private Long randomInt() { return (long) random.nextInt(1000) + 1; } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java similarity index 95% rename from src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java rename to src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java index 0b07bb4..6cac30c 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java @@ -16,7 +16,7 @@ @Order(Integer.MIN_VALUE) @Configuration @ConditionalOnProperty(value = "jt1078.enable", havingValue = "true") -public class TcpAutoConfiguration { +public class JT1078AutoConfiguration { @Bean(initMethod = "start", destroyMethod = "stop") public TcpServer jt1078Server(@Value("${jt1078.port}") Integer port) { diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java index cffb147..0c71d26 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java @@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.jt1078.config; import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template; -import com.genersoft.iot.vmp.jt1078.proc.response.J9101; +import com.genersoft.iot.vmp.jt1078.proc.response.*; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.GetMapping; @@ -26,6 +26,9 @@ @Resource JT1078Template jt1078Template; + /** + * jt1078Template 璋冪敤绀轰緥 + */ @GetMapping("/start/live/{deviceId}/{channelId}") public WVPResult<?> startLive(@PathVariable String deviceId, @PathVariable String channelId) { J9101 j9101 = new J9101(); @@ -35,12 +38,14 @@ j9101.setTcpPort(7618); j9101.setUdpPort(7618); j9101.setType(0); - + // TODO 鍒嗛厤ZLM,鑾峰彇IP銆佺鍙� String s = jt1078Template.startLive(deviceId, j9101, 6); + // TODO 璁惧鍝嶅簲鎴愬姛鍚�,灏佽鎷夋祦缁撴灉闆� WVPResult<String> wvpResult = new WVPResult<>(); wvpResult.setCode(200); wvpResult.setData(String.format("http://192.168.1.1/rtp/%s_%s.live.mp4", deviceId, channelId)); return wvpResult; } + } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java index 19d6d8f..28726e8 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java @@ -102,4 +102,15 @@ } } + + @Override + public String toString() { + return "Cmd{" + + "devId='" + devId + '\'' + + ", packageNo=" + packageNo + + ", msgId='" + msgId + '\'' + + ", respId='" + respId + '\'' + + ", rs=" + rs + + '}'; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java new file mode 100644 index 0000000..da0b89e --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java @@ -0,0 +1,190 @@ +package com.genersoft.iot.vmp.jt1078.proc.request; + +import com.alibaba.fastjson2.JSON; +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import com.genersoft.iot.vmp.jt1078.proc.Header; +import com.genersoft.iot.vmp.jt1078.proc.response.J8001; +import com.genersoft.iot.vmp.jt1078.proc.response.Rs; +import com.genersoft.iot.vmp.jt1078.session.Session; +import com.genersoft.iot.vmp.jt1078.session.SessionManager; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * 缁堢涓婁紶闊宠棰戣祫婧愬垪琛� + * + * @author QingtaiJiang + * @date 2023/4/28 10:36 + * @email qingtaij@163.com + */ +@MsgId(id = "1205") +public class J1205 extends Re { + Integer respNo; + + private List<JRecordItem> recordList = new ArrayList<JRecordItem>(); + + @Override + protected Rs decode0(ByteBuf buf, Header header, Session session) { + respNo = buf.readUnsignedShort(); + long size = buf.readUnsignedInt(); + + for (int i = 0; i < size; i++) { + JRecordItem item = new JRecordItem(); + item.setChannelId(buf.readUnsignedByte()); + item.setStartTime(ByteBufUtil.hexDump(buf.readSlice(6))); + item.setEndTime(ByteBufUtil.hexDump(buf.readSlice(6))); + item.setWarn(buf.readLong()); + item.setMediaType(buf.readUnsignedByte()); + item.setStreamType(buf.readUnsignedByte()); + item.setStorageType(buf.readUnsignedByte()); + item.setSize(buf.readUnsignedInt()); + recordList.add(item); + } + + return null; + } + + @Override + protected Rs handler(Header header, Session session) { + SessionManager.INSTANCE.response(header.getDevId(), "1205", (long) respNo, JSON.toJSONString(this)); + + J8001 j8001 = new J8001(); + j8001.setRespNo(header.getSn()); + j8001.setRespId(header.getMsgId()); + j8001.setResult(J8001.SUCCESS); + return j8001; + } + + + public Integer getRespNo() { + return respNo; + } + + public void setRespNo(Integer respNo) { + this.respNo = respNo; + } + + public List<JRecordItem> getRecordList() { + return recordList; + } + + public void setRecordList(List<JRecordItem> recordList) { + this.recordList = recordList; + } + + public static class JRecordItem { + + // 閫昏緫閫氶亾鍙� + private int channelId; + + // 寮�濮嬫椂闂� + private String startTime; + + // 缁撴潫鏃堕棿 + private String endTime; + + // 鎶ヨ鏍囧織 + private long warn; + + // 闊宠棰戣祫婧愮被鍨� + private int mediaType; + + // 鐮佹祦绫诲瀷 + private int streamType = 1; + + // 瀛樺偍鍣ㄧ被鍨� + private int storageType; + + // 鏂囦欢澶у皬 + private long size; + + public int getChannelId() { + return channelId; + } + + public void setChannelId(int channelId) { + this.channelId = channelId; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public long getWarn() { + return warn; + } + + public void setWarn(long warn) { + this.warn = warn; + } + + public int getMediaType() { + return mediaType; + } + + public void setMediaType(int mediaType) { + this.mediaType = mediaType; + } + + public int getStreamType() { + return streamType; + } + + public void setStreamType(int streamType) { + this.streamType = streamType; + } + + public int getStorageType() { + return storageType; + } + + public void setStorageType(int storageType) { + this.storageType = storageType; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + @Override + public String toString() { + return "JRecordItem{" + + "channelId=" + channelId + + ", startTime='" + startTime + '\'' + + ", endTime='" + endTime + '\'' + + ", warn=" + warn + + ", mediaType=" + mediaType + + ", streamType=" + streamType + + ", storageType=" + storageType + + ", size=" + size + + '}'; + } + } + + @Override + public String toString() { + return "J1205{" + + "respNo=" + respNo + + ", recordList=" + recordList + + '}'; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java index d671372..77e90b7 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java @@ -6,6 +6,8 @@ import io.netty.util.CharsetUtil; /** + * 瀹炴椂闊宠棰戜紶杈撹姹� + * * @author QingtaiJiang * @date 2023/4/27 18:25 * @email qingtaij@163.com diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java index f92fe8e..8d560b2 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java @@ -1,13 +1,17 @@ package com.genersoft.iot.vmp.jt1078.proc.response; +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; /** + * 闊宠棰戝疄鏃朵紶杈撴帶鍒� + * * @author QingtaiJiang * @date 2023/4/27 18:49 * @email qingtaij@163.com */ +@MsgId(id = "9102") public class J9102 extends Rs { // 閫氶亾鍙� @@ -47,7 +51,7 @@ buffer.writeByte(command); buffer.writeByte(closeType); buffer.writeByte(streamType); - return null; + return buffer; } @@ -82,4 +86,14 @@ public void setStreamType(Integer streamType) { this.streamType = streamType; } + + @Override + public String toString() { + return "J9102{" + + "channel=" + channel + + ", command=" + command + + ", closeType=" + closeType + + ", streamType=" + streamType + + '}'; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java new file mode 100644 index 0000000..8a66f35 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java @@ -0,0 +1,173 @@ +package com.genersoft.iot.vmp.jt1078.proc.response; + +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.util.CharsetUtil; + +/** + * 鍥炴斁璇锋眰 + * + * @author QingtaiJiang + * @date 2023/4/28 10:37 + * @email qingtaij@163.com + */ +@MsgId(id = "9201") +public class J9201 extends Rs { + // 鏈嶅姟鍣↖P鍦板潃 + private String ip; + + // 瀹炴椂瑙嗛鏈嶅姟鍣═CP绔彛鍙� + private int tcpPort; + + // 瀹炴椂瑙嗛鏈嶅姟鍣║DP绔彛鍙� + private int udpPort; + + // 閫昏緫閫氶亾鍙� + private int channel; + + // 闊宠棰戣祫婧愮被鍨嬶細0.闊宠棰� 1.闊抽 2.瑙嗛 3.瑙嗛鎴栭煶瑙嗛 + private int type; + + // 鐮佹祦绫诲瀷锛�0.鎵�鏈夌爜娴� 1.涓荤爜娴� 2.瀛愮爜娴�(濡傛灉姝ら�氶亾鍙紶杈撻煶棰�,姝ゅ瓧娈电疆0) + private int rate; + + // 瀛樺偍鍣ㄧ被鍨嬶細0.鎵�鏈夊瓨鍌ㄥ櫒 1.涓诲瓨鍌ㄥ櫒 2.鐏惧瀛樺偍鍣�" + private int storageType; + + // 鍥炴斁鏂瑰紡锛�0.姝e父鍥炴斁 1.蹇繘鍥炴斁 2.鍏抽敭甯у揩閫�鍥炴斁 3.鍏抽敭甯ф挱鏀� 4.鍗曞抚涓婁紶 + private int playbackType; + + // 蹇繘鎴栧揩閫�鍊嶆暟锛�0.鏃犳晥 1.1鍊� 2.2鍊� 3.4鍊� 4.8鍊� 5.16鍊� (鍥炴斁鎺у埗涓�1鍜�2鏃�,姝ゅ瓧娈靛唴瀹规湁鏁�,鍚﹀垯缃�0) + private int playbackSpeed; + + // 寮�濮嬫椂闂碮YMMDDHHMMSS,鍥炴斁鏂瑰紡涓�4鏃�,璇ュ瓧娈佃〃绀哄崟甯т笂浼犳椂闂� + private String startTime; + + // 缁撴潫鏃堕棿YYMMDDHHMMSS,鍥炴斁鏂瑰紡涓�4鏃�,璇ュ瓧娈垫棤鏁�,涓�0琛ㄧず涓�鐩村洖鏀� + private String endTime; + + @Override + public ByteBuf encode() { + ByteBuf buffer = Unpooled.buffer(); + buffer.writeByte(ip.getBytes().length); + buffer.writeCharSequence(ip, CharsetUtil.UTF_8); + buffer.writeShort(tcpPort); + buffer.writeShort(udpPort); + buffer.writeByte(channel); + buffer.writeByte(type); + buffer.writeByte(rate); + buffer.writeByte(storageType); + buffer.writeByte(playbackType); + buffer.writeByte(playbackSpeed); + buffer.writeBytes(ByteBufUtil.decodeHexDump(startTime)); + buffer.writeBytes(ByteBufUtil.decodeHexDump(endTime)); + return buffer; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public int getTcpPort() { + return tcpPort; + } + + public void setTcpPort(int tcpPort) { + this.tcpPort = tcpPort; + } + + public int getUdpPort() { + return udpPort; + } + + public void setUdpPort(int udpPort) { + this.udpPort = udpPort; + } + + public int getChannel() { + return channel; + } + + public void setChannel(int channel) { + this.channel = channel; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getRate() { + return rate; + } + + public void setRate(int rate) { + this.rate = rate; + } + + public int getStorageType() { + return storageType; + } + + public void setStorageType(int storageType) { + this.storageType = storageType; + } + + public int getPlaybackType() { + return playbackType; + } + + public void setPlaybackType(int playbackType) { + this.playbackType = playbackType; + } + + public int getPlaybackSpeed() { + return playbackSpeed; + } + + public void setPlaybackSpeed(int playbackSpeed) { + this.playbackSpeed = playbackSpeed; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + @Override + public String toString() { + return "J9201{" + + "ip='" + ip + '\'' + + ", tcpPort=" + tcpPort + + ", udpPort=" + udpPort + + ", channel=" + channel + + ", type=" + type + + ", rate=" + rate + + ", storageType=" + storageType + + ", playbackType=" + playbackType + + ", playbackSpeed=" + playbackSpeed + + ", startTime='" + startTime + '\'' + + ", endTime='" + endTime + '\'' + + '}'; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java new file mode 100644 index 0000000..7cb4e53 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java @@ -0,0 +1,80 @@ +package com.genersoft.iot.vmp.jt1078.proc.response; + +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; + +/** + * 骞冲彴涓嬪彂杩滅▼褰曞儚鍥炴斁鎺у埗 + * + * @author QingtaiJiang + * @date 2023/4/28 10:37 + * @email qingtaij@163.com + */ +@MsgId(id = "9202") +public class J9202 extends Rs { + // 閫昏緫閫氶亾鍙� + private int channel; + + // 鍥炴斁鎺у埗锛�0.寮�濮嬪洖鏀� 1.鏆傚仠鍥炴斁 2.缁撴潫鍥炴斁 3.蹇繘鍥炴斁 4.鍏抽敭甯у揩閫�鍥炴斁 5.鎷栧姩鍥炴斁 6.鍏抽敭甯ф挱鏀� + private int playbackType; + + // 蹇繘鎴栧揩閫�鍊嶆暟锛�0.鏃犳晥 1.1鍊� 2.2鍊� 3.4鍊� 4.8鍊� 5.16鍊� (鍥炴斁鎺у埗涓�3鍜�4鏃�,姝ゅ瓧娈靛唴瀹规湁鏁�,鍚﹀垯缃�0) + private int playbackSpeed; + + // 鎷栧姩鍥炴斁浣嶇疆(YYMMDDHHMMSS,鍥炴斁鎺у埗涓�5鏃�,姝ゅ瓧娈垫湁鏁�) + private String playbackTime; + + @Override + public ByteBuf encode() { + ByteBuf buffer = Unpooled.buffer(); + buffer.writeByte(channel); + buffer.writeByte(playbackType); + buffer.writeByte(playbackSpeed); + buffer.writeBytes(ByteBufUtil.decodeHexDump(playbackTime)); + return buffer; + } + + public int getChannel() { + return channel; + } + + public void setChannel(int channel) { + this.channel = channel; + } + + public int getPlaybackType() { + return playbackType; + } + + public void setPlaybackType(int playbackType) { + this.playbackType = playbackType; + } + + public int getPlaybackSpeed() { + return playbackSpeed; + } + + public void setPlaybackSpeed(int playbackSpeed) { + this.playbackSpeed = playbackSpeed; + } + + public String getPlaybackTime() { + return playbackTime; + } + + public void setPlaybackTime(String playbackTime) { + this.playbackTime = playbackTime; + } + + @Override + public String toString() { + return "J9202{" + + "channel=" + channel + + ", playbackType=" + playbackType + + ", playbackSpeed=" + playbackSpeed + + ", playbackTime='" + playbackTime + '\'' + + '}'; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java new file mode 100644 index 0000000..36b858e --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java @@ -0,0 +1,94 @@ +package com.genersoft.iot.vmp.jt1078.proc.response; + +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; + +/** + * 鏌ヨ璧勬簮鍒楄〃 + * + * @author QingtaiJiang + * @date 2023/4/28 10:36 + * @email qingtaij@163.com + */ +@MsgId(id = "9205") +public class J9205 extends Rs { + // 閫昏緫閫氶亾鍙� + private int channelId; + + // 寮�濮嬫椂闂碮YMMDDHHMMSS,鍏�0琛ㄧず鏃犺捣濮嬫椂闂� + private String startTime; + + // 缁撴潫鏃堕棿YYMMDDHHMMSS,鍏�0琛ㄧず鏃犵粓姝㈡椂闂� + private String endTime; + + // 鎶ヨ鏍囧織 + private final int warnType = 0; + + // 闊宠棰戣祫婧愮被鍨嬶細0.闊宠棰� 1.闊抽 2.瑙嗛 3.瑙嗛鎴栭煶瑙嗛 + private int mediaType; + + // 鐮佹祦绫诲瀷锛�0.鎵�鏈夌爜娴� 1.涓荤爜娴� 2.瀛愮爜娴� + private int streamType = 0; + + // 瀛樺偍鍣ㄧ被鍨嬶細0.鎵�鏈夊瓨鍌ㄥ櫒 1.涓诲瓨鍌ㄥ櫒 2.鐏惧瀛樺偍鍣� + private int storageType = 0; + + @Override + public ByteBuf encode() { + ByteBuf buffer = Unpooled.buffer(); + + buffer.writeByte(channelId); + buffer.writeBytes(ByteBufUtil.decodeHexDump(startTime)); + buffer.writeBytes(ByteBufUtil.decodeHexDump(endTime)); + buffer.writeLong(warnType); + buffer.writeByte(mediaType); + buffer.writeByte(streamType); + buffer.writeByte(storageType); + + return buffer; + } + + + public void setChannelId(int channelId) { + this.channelId = channelId; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public void setMediaType(int mediaType) { + this.mediaType = mediaType; + } + + public void setStreamType(int streamType) { + this.streamType = streamType; + } + + public void setStorageType(int storageType) { + this.storageType = storageType; + } + + public int getWarnType() { + return warnType; + } + + @Override + public String toString() { + return "J9205{" + + "channelId=" + channelId + + ", startTime='" + startTime + '\'' + + ", endTime='" + endTime + '\'' + + ", warnType=" + warnType + + ", mediaType=" + mediaType + + ", streamType=" + streamType + + ", storageType=" + storageType + + '}'; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java index 9347249..c2876e5 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java @@ -76,13 +76,13 @@ Session session = this.get(cmd.getDevId()); if (session == null) { log.error("DevId: {} not online!", cmd.getDevId()); - return "-1"; + return null; } String requestKey = requestKey(cmd.getDevId(), cmd.getRespId(), cmd.getPackageNo()); SynchronousQueue<String> subscribe = subscribe(requestKey); if (subscribe == null) { log.error("DevId: {} key:{} send repaid", cmd.getDevId(), requestKey); - return "-1"; + return null; } session.writeObject(cmd); try { @@ -105,7 +105,7 @@ log.error("{}", e.getMessage(), e); } } - log.warn("鏈壘鍒板搴斿洖澶嶆寚浠�,key:{} 娑堟伅:{} ", requestKey, data); + log.warn("Not find response,key:{} data:{} ", requestKey, data); return false; } diff --git a/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java b/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java new file mode 100644 index 0000000..8986f91 --- /dev/null +++ b/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java @@ -0,0 +1,103 @@ +package com.genersoft.iot.vmp.jt1078; + +import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template; +import com.genersoft.iot.vmp.jt1078.codec.netty.TcpServer; +import com.genersoft.iot.vmp.jt1078.proc.response.J9102; +import com.genersoft.iot.vmp.jt1078.proc.response.J9201; +import com.genersoft.iot.vmp.jt1078.proc.response.J9202; +import com.genersoft.iot.vmp.jt1078.proc.response.J9205; + +import java.util.Scanner; + +/** + * @author QingtaiJiang + * @date 2023/4/28 14:22 + * @email qingtaij@163.com + */ +public class JT1078ServerTest { + + private static final JT1078Template jt1078Template = new JT1078Template(); + + public static void main(String[] args) { + System.out.println("Starting jt1078 server..."); + TcpServer tcpServer = new TcpServer(21078); + tcpServer.start(); + System.out.println("Start jt1078 server success!"); + + + Scanner s = new Scanner(System.in); + while (true) { + String code = s.nextLine(); + switch (code) { + case "1": + test9102(); + break; + case "2": + test9201(); + break; + case "3": + test9202(); + break; + case "4": + test9205(); + break; + default: + break; + } + } + } + + private static void test9102() { + J9102 j9102 = new J9102(); + j9102.setChannel(1); + j9102.setCommand(0); + j9102.setCloseType(0); + j9102.setStreamType(0); + + String s = jt1078Template.stopLive("18864197066", j9102, 6); + System.out.println(s); + } + + private static void test9201() { + J9201 j9201 = new J9201(); + j9201.setIp("192.168.1.1"); + j9201.setChannel(1); + j9201.setTcpPort(7618); + j9201.setUdpPort(7618); + j9201.setType(0); + j9201.setRate(0); + j9201.setStorageType(0); + j9201.setPlaybackType(0); + j9201.setPlaybackSpeed(0); + j9201.setStartTime("230428134100"); + j9201.setEndTime("230428134200"); + + String s = jt1078Template.startBackLive("18864197066", j9201, 6); + System.out.println(s); + } + + private static void test9202() { + J9202 j9202 = new J9202(); + + j9202.setChannel(1); + j9202.setPlaybackType(2); + j9202.setPlaybackSpeed(0); + j9202.setPlaybackTime("230428134100"); + + String s = jt1078Template.controlBackLive("18864197066", j9202, 6); + System.out.println(s); + } + + private static void test9205() { + J9205 j9205 = new J9205(); + j9205.setChannelId(1); + j9205.setStartTime("230428134100"); + j9205.setEndTime("230428134100"); + j9205.setMediaType(0); + j9205.setStreamType(0); + j9205.setStorageType(0); + + String s = jt1078Template.queryBackTime("18864197066", j9205, 6); + System.out.println(s); + } +} -- Gitblit v1.8.0