소스 검색

20220729 初步完成了6个message

lifuquan 2 년 전
부모
커밋
5fc13f0f8c

+ 4 - 3
.gitignore

@@ -1,5 +1,6 @@
+# maven项目编译目标路径
 target/
+# vscode项目配置文件路径
+.vscode
 # office 临时文件
-~$*
-# vscode 编程环境
-.vscode/
+~$*

+ 12 - 3
src/main/java/com/nokia/sms/blacklist/BlacklistTcpClient.java

@@ -17,9 +17,11 @@ public class BlacklistTcpClient {
     private static String hostIp = "localhost";
     private static int hostPort = 50000;
     @Getter
-    private String systemId = "smstousu";
+    private String systemId = "smsTousu";
     @Getter
     private String password = "123456";
+    // 0 - 4294967295 0xFFFFFFFF
+    private long sequenceNumber;
 
     /**
      * 解除黑名单
@@ -38,6 +40,14 @@ public class BlacklistTcpClient {
         return null;
     }
 
+    public long getNextSequence() {
+        if (sequenceNumber < 4294967295L) {
+            return sequenceNumber + 1L;
+        } else {
+            return 0L;
+        }
+    }
+
     /**
      * 获取socket连接
      * 
@@ -65,9 +75,8 @@ public class BlacklistTcpClient {
         return null;
     }
 
-
     public static void main(String[] args) {
-        
+
     }
 
 }

+ 5 - 0
src/main/java/com/nokia/sms/blacklist/exception/PhoneNumberCanNotBeNullException.java

@@ -0,0 +1,5 @@
+package com.nokia.sms.blacklist.exception;
+
+public class PhoneNumberCanNotBeNullException extends Throwable {
+    
+}

+ 1 - 0
src/main/java/com/nokia/sms/blacklist/message/MessageHeader.java

@@ -4,6 +4,7 @@ import java.util.Arrays;
 
 import com.nokia.common.io.ByteArrayUtil;
 import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.CommandId;
 
 import lombok.Data;
 

+ 43 - 1
src/main/java/com/nokia/sms/blacklist/message/SmitActiveTestMessage.java

@@ -1,8 +1,50 @@
 package com.nokia.sms.blacklist.message;
 
+import com.nokia.sms.blacklist.BlacklistTcpClient;
+import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.CommandId;
+
 /*
  * SMIT_ACTIVE_TEST	0x0000000f	链路检测
  */
+@SuppressWarnings("unused")
 public class SmitActiveTestMessage {
-    
+    private final MessageHeader header;
+
+    private static BlacklistTcpClient CLIENT;
+
+    public SmitActiveTestMessage(BlacklistTcpClient client) {
+        // 初始化header
+        header = new MessageHeader();
+        // header 12 + body 0 所以是12字节
+        header.setMessageLength(12);
+        header.setCommandId(CommandId.SMIT_ACTIVE_TEST);
+        // 从客户端获取下一个序号
+        header.setSequenceNumber(client.getNextSequence());
+        SmitActiveTestMessage.CLIENT = client;
+    }
+
+    public byte[] toByteArray() {
+        // 初始化
+        byte[] message = new byte[header.getMessageLength()];
+        // 填充header
+        System.arraycopy(header.toByteArray(), 0, message, 0, 12);
+        return message;
+    }
+
+    /*
+     * 识别链路检测消息,返回 sequenceNumber
+     */
+    public long parse(byte[] message) {
+        try {
+            MessageHeader header = MessageHeader.parse(message);
+            // 判断消息类型
+            if (CommandId.SMIT_ACTIVE_TEST.equals(header.getCommandId())) {
+                return header.getSequenceNumber();
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return -1;
+    }
 }

+ 38 - 1
src/main/java/com/nokia/sms/blacklist/message/SmitActiveTestRespMessage.java

@@ -1,8 +1,45 @@
 package com.nokia.sms.blacklist.message;
 
+import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.CommandId;
+
 /*
  * SMIT_ACTIVE_TEST_RESP	0x8000000f	链路检测应答
  */
 public class SmitActiveTestRespMessage {
-    
+    private final MessageHeader header;
+
+    public SmitActiveTestRespMessage(long sequenceNumber) {
+        // 初始化header
+        header = new MessageHeader();
+        // header 12 + body 0 所以是12字节
+        header.setMessageLength(12);
+        header.setCommandId(CommandId.SMIT_ACTIVE_TEST_RESP);
+        // 从客户端获取下一个序号
+        header.setSequenceNumber(sequenceNumber);
+    }
+
+    public byte[] toByteArray() {
+        // 初始化
+        byte[] message = new byte[header.getMessageLength()];
+        // 填充header
+        System.arraycopy(header.toByteArray(), 0, message, 0, 12);
+        return message;
+    }
+
+    /*
+     * 识别链路检测消息,返回 sequenceNumber
+     */
+    public long parse(byte[] message) {
+        try {
+            MessageHeader header = MessageHeader.parse(message);
+            // 判断消息类型
+            if (CommandId.SMIT_ACTIVE_TEST_RESP.equals(header.getCommandId())) {
+                return header.getSequenceNumber();
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return -1;
+    }
 }

+ 2 - 0
src/main/java/com/nokia/sms/blacklist/message/SmitBindMessage.java

@@ -9,6 +9,8 @@ import java.util.Date;
 
 import com.nokia.sms.blacklist.BlacklistTcpClient;
 import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.BindRespStatus;
+import com.nokia.sms.blacklist.message.entity.CommandId;
 
 public class SmitBindMessage {
     private final MessageHeader header;

+ 2 - 0
src/main/java/com/nokia/sms/blacklist/message/SmitBindRespMessage.java

@@ -1,6 +1,8 @@
 package com.nokia.sms.blacklist.message;
 
 import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.BindRespStatus;
+import com.nokia.sms.blacklist.message.entity.CommandId;
 
 public class SmitBindRespMessage {
     private final MessageHeader header;

+ 65 - 0
src/main/java/com/nokia/sms/blacklist/message/SmitDelblkMessage.java

@@ -1,8 +1,73 @@
 package com.nokia.sms.blacklist.message;
 
+import java.util.Arrays;
+
+import com.nokia.sms.blacklist.BlacklistTcpClient;
+import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.exception.PhoneNumberCanNotBeNullException;
+import com.nokia.sms.blacklist.message.entity.CommandId;
+import com.nokia.sms.blacklist.message.entity.DelBlkBody;
+
 /*
  * SMIT_DELBLK	0x00000003	解除黑名单请求
  */
+@SuppressWarnings("unused")
 public class SmitDelblkMessage {
+    private final MessageHeader header;
+    private DelBlkBody delBlkBody;
+    private static BlacklistTcpClient CLIENT;
+
+    public SmitDelblkMessage(BlacklistTcpClient client) {
+        // 初始化header
+        header = new MessageHeader();
+        // header 12 + body 21 + 1 + 1 + 1 所以是36字节
+        header.setMessageLength(36);
+        header.setCommandId(CommandId.SMIT_DELBLK);
+        // 从客户端获取下一个序号
+        header.setSequenceNumber(client.getNextSequence());
+        SmitDelblkMessage.CLIENT = client;
+        delBlkBody = new DelBlkBody();
+    }
+
+    public void setBlkNum(String phoneNumber) {
+        delBlkBody.setBlkNum(phoneNumber);
+    }
+
+    public byte[] toByteArray() throws PhoneNumberCanNotBeNullException {
+        // 初始化
+        byte[] message = new byte[header.getMessageLength()];
+        // 填充header
+        System.arraycopy(header.toByteArray(), 0, message, 0, 12);
+
+        // 填充 blk_Num 21字节
+        if (delBlkBody.getBlkNum() == null) {
+            throw new PhoneNumberCanNotBeNullException();
+        }
+        byte[] blkNumByteArray = delBlkBody.getBlkNum().getBytes();
+        System.arraycopy(blkNumByteArray, 0, message, 12, blkNumByteArray.length);
+        // 填充 block_type
+        message[33] = delBlkBody.getBlock_type();
+        message[34] = delBlkBody.getBlk_type();
+        message[35] = delBlkBody.getProvince_code();
+        return message;
+    }
 
+    public DelBlkBody parse(byte[] message) {
+        try {
+            MessageHeader header = MessageHeader.parse(message);
+            // 判断消息类型
+            if (CommandId.SMIT_DELBLK.equals(header.getCommandId())) {
+                DelBlkBody delBlkBody = new DelBlkBody();
+                // blkNum 在 12-33字节
+                delBlkBody.setBlkNum(new String(Arrays.copyOfRange(message, 12, 33)).trim());
+                delBlkBody.setBlock_type(message[33]);
+                delBlkBody.setBlk_type(message[34]);
+                delBlkBody.setProvince_code(message[35]);
+                return delBlkBody;
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 41 - 0
src/main/java/com/nokia/sms/blacklist/message/SmitDelblkRespMessage.java

@@ -1,8 +1,49 @@
 package com.nokia.sms.blacklist.message;
 
+import com.nokia.sms.blacklist.exception.ParseException;
+import com.nokia.sms.blacklist.message.entity.CommandId;
+import com.nokia.sms.blacklist.message.entity.DelBlkRespStatus;
+
 /*
  * SMIT_DELBLK_RESP	0x80000003	解除黑名单应答
  */
 public class SmitDelblkRespMessage {
+    private final MessageHeader header;
+    private DelBlkRespStatus status;
+
+    public SmitDelblkRespMessage(long sequenceNumber) {
+        // 初始化header
+        header = new MessageHeader();
+        // header 12 + body 1 所以是13字节
+        header.setMessageLength(13);
+        header.setCommandId(CommandId.SMIT_DELBLK_RESP);
+        header.setSequenceNumber(sequenceNumber);
+    }
+
+    public void setStatus(DelBlkRespStatus status) {
+        this.status = status;
+    }
+
+    public byte[] toByteArray() {
+        // 初始化
+        byte[] message = new byte[header.getMessageLength()];
+        // 填充header
+        System.arraycopy(header.toByteArray(), 0, message, 0, 12);
+
+        // 填充status
+        message[12] = status.value;
+        return message;
+    }
 
+    public DelBlkRespStatus parse(byte[] message) {
+        try {
+            MessageHeader header = MessageHeader.parse(message);
+            if (header.getCommandId().equals(CommandId.SMIT_DELBLK_RESP)) {
+                return DelBlkRespStatus.parse(message[12]);
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 1 - 1
src/main/java/com/nokia/sms/blacklist/message/BindRespStatus.java → src/main/java/com/nokia/sms/blacklist/message/entity/BindRespStatus.java

@@ -1,4 +1,4 @@
-package com.nokia.sms.blacklist.message;
+package com.nokia.sms.blacklist.message.entity;
 
 /*
      * Status 1 Unsigned Integer 否 状态

+ 1 - 1
src/main/java/com/nokia/sms/blacklist/message/CommandId.java → src/main/java/com/nokia/sms/blacklist/message/entity/CommandId.java

@@ -1,4 +1,4 @@
-package com.nokia.sms.blacklist.message;
+package com.nokia.sms.blacklist.message.entity;
 
 /**
  * Command_Id定义

+ 26 - 0
src/main/java/com/nokia/sms/blacklist/message/entity/DelBlkBody.java

@@ -0,0 +1,26 @@
+package com.nokia.sms.blacklist.message.entity;
+
+import lombok.Data;
+
+/*
+ * 解除黑名单请求的body
+ */
+@Data
+public class DelBlkBody {
+    // blk_Num 21 C-Octet String 否 不带86
+    private String blkNum;
+    // block_type 1 Unsigned Integer 否 1:黑名单号码 2:黑名单号段
+    private byte block_type = 1;
+    // blk_type 1 Unsigned Integer 否 1:主叫黑名单 固定值
+    private byte blk_type = 1;
+    // province_code 1 Unsigned Integer 否 黑名单的省份代码,参见附录B
+    // 河北省对应code为14,这里是黑名单省份,与号码归属无关
+    private byte province_code = 14;
+
+    public DelBlkBody(String phoneNumber) {
+        blkNum = phoneNumber;
+    }
+
+    public DelBlkBody() {
+    }
+}

+ 26 - 0
src/main/java/com/nokia/sms/blacklist/message/entity/DelBlkRespStatus.java

@@ -0,0 +1,26 @@
+package com.nokia.sms.blacklist.message.entity;
+
+/*
+ * Status	1	Unsigned Integer	否	状态 0:成功 1:失败
+ */
+public enum DelBlkRespStatus {
+    SUCCESS((byte) 0, "成功"),
+    STRUCTURE_ERROR((byte) 1, "失败");
+
+    public final byte value;
+    public final String status;
+
+    DelBlkRespStatus(byte value, String status) {
+        this.value = value;
+        this.status = status;
+    }
+
+    public static DelBlkRespStatus parse(byte value) {
+        for (DelBlkRespStatus status : values()) {
+            if (value == status.value) {
+                return status;
+            }
+        }
+        return null;
+    }
+}