|
@@ -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;
|
|
|
+ }
|
|
|
}
|