ddpush 学习之路 9 ClientMessage.java
来源:互联网 发布:php 数组值排序 编辑:程序博客网 时间:2024/05/21 12:42
现在我们来学ddpush的 ClientMessage.java 这个类。这个类和上一个 Constant.java 类都是在 org.ddpush.im.v1.node 包中。这两个类比较简单。我看完学习完。就发出来了。
好了。下面我们来看 ClientMessage.java 这个类。以及我添加的注释
//客户端消息包类public final class ClientMessage{ //socket套接字地址 protected SocketAddress address; //消息数据 protected byte[] data; //构造 public ClientMessage(SocketAddress address, byte[] data) throws Exception{ this.address = address; this.data = data; }// public static org.ddpush.im.node.Message getNewInstance(){// return null;// } //设置、修改消息包数据体 public void setData(byte[] data){ this.data = data; } //获取消息包具体的消息数据 public byte[] getData(){ return this.data; } //获得套接字地址 public SocketAddress getSocketAddress(){ return this.address; } //设置消息包的套接字地址 public void setSocketAddress(SocketAddress addr){ this.address = addr; } //获得到消息数据的version public int getVersionNum(){ byte b = data[0]; return b & 0xff; } //获得消息包得类型 0 心跳,16 通用消息 17 分类消息 32 自定义消息 public int getCmd(){ byte b = data[2]; return b & 0xff; } //获取消息包中消息数据的长度 public int getDataLength(){ return (int)ByteBuffer.wrap(data, 19, 2).getChar(); } //获取uuid public String getUuidHexString(){ return StringUtil.convert(data, 3, 16); } //检测消息数据包格式是否正确 public boolean checkFormat(){ if(this.data == null){ return false; } //消息包长度检测 if(data.length < Constant.CLIENT_MESSAGE_MIN_LENGTH){ return false; } //消息包版本检测 if(getVersionNum() != Constant.VERSION_NUM){ return false; } //消息类型检测 int cmd = getCmd(); if(cmd != ClientStatMachine.CMD_0x00 //&& cmd != ClientStatMachine.CMD_0x01 && cmd != ClientStatMachine.CMD_0x10 && cmd != ClientStatMachine.CMD_0x11 && cmd != ClientStatMachine.CMD_0x20 && cmd != ClientStatMachine.CMD_0xff){ return false; } //消息长度检测 int dataLen = getDataLength(); if(data.length != dataLen + Constant.CLIENT_MESSAGE_MIN_LENGTH){ return false; } //消息类型和消息内容长度格式检测 if(cmd == ClientStatMachine.CMD_0x00 && dataLen != 0){ return false; } if(cmd == ClientStatMachine.CMD_0x10 && dataLen != 0){ return false; } if(cmd == ClientStatMachine.CMD_0x11 && dataLen != 8){ return false; } if(cmd == ClientStatMachine.CMD_0x20 && dataLen != 0){ return false; } return true; }// public byte[] getUUID(){// return // }}
好了。这就是我添加注释的ClientMessage.java 这个类的代码。这个类也比较简单。就是封装了一个 客户端消息数据包 这个类和我之前的 ddpush 学习之路 5 Message.java 这里讲的Message.java 类比较类似。提供了一些数据添加、修改的函数、以及一个检测函数。基本上和Message.java 这个类一样。就是具体的消息包格式检测有些不同。大家可以具体的看一下。
好了。这就是ddpush的ClientMessage.java 下一篇我们继续学习ddpush的源代码。
by brok1n 20150322
0 0
- ddpush 学习之路 9 ClientMessage.java
- ddpush 学习之路 2 DateTimeUtil.java
- ddpush 学习之路 3 StringUtil.java
- ddpush 学习之路 4 PropertyUtil.java
- ddpush 学习之路 5 Message.java
- ddpush 学习之路 6 TCPClientBase.java
- ddpush 学习之路 7 UDPClientBase.java
- ddpush 学习之路 8 Constant.java
- ddpush 学习之路 10 MyTcpClient.java
- ddpush 学习之路 11 MyUdpClient.java
- ddpush 学习之路 12 Sender.java
- ddpush 学习之路 13 Receiver.java
- ddpush 学习之路 14 UdpConnector.java
- ddpush 学习之路 1 前言
- ddpush 学习之路 15 关于DDPUSH 的一些很多人会问到的问题和解答
- DDPush开源推送框架源码分析之APPServer到DDPush
- DDPush开源推送框架源码分析之Client到DDPush(UDP模式)
- android ddpush
- c:99乘法表
- 面向过程与面向对象的区别
- 03-1. 三天打鱼两天晒网(15)
- mac上隐藏文件夹的显示与隐藏(终端命令)
- MySQL分区性能初探
- ddpush 学习之路 9 ClientMessage.java
- android客户端与服务器端交互 如何保持session
- 03-2. 用天平找小球(10)
- 03-3. 12-24小时制(15)
- 窗体的视图切换效果
- 03-4. 成绩转换(15)
- 对gridview绑定数据的操作方法及自定义显示内容
- Java Socket编程 标准范例(多线程)
- Remove Nth Node From End of List