ddpush 学习之路 9 ClientMessage.java
2015-03-22 14:26
429 查看
现在我们来学ddpush的 ClientMessage.java 这个类。这个类和上一个 Constant.java 类都是在 org.ddpush.im.v1.node 包中。这两个类比较简单。我看完学习完。就发出来了。
好了。下面我们来看 ClientMessage.java 这个类。以及我添加的注释
好了。这就是我添加注释的ClientMessage.java 这个类的代码。这个类也比较简单。就是封装了一个 客户端消息数据包 这个类和我之前的 ddpush 学习之路 5 Message.java 这里讲的Message.java 类比较类似。提供了一些数据添加、修改的函数、以及一个检测函数。基本上和Message.java 这个类一样。就是具体的消息包格式检测有些不同。大家可以具体的看一下。
好了。这就是ddpush的ClientMessage.java 下一篇我们继续学习ddpush的源代码。
by brok1n 20150322
好了。下面我们来看 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
相关文章推荐
- ddpush 学习之路 5 Message.java
- ddpush 学习之路 6 TCPClientBase.java
- ddpush 学习之路 7 UDPClientBase.java
- ddpush 学习之路 10 MyTcpClient.java
- ddpush 学习之路 11 MyUdpClient.java
- ddpush 学习之路 2 DateTimeUtil.java
- ddpush 学习之路 3 StringUtil.java
- ddpush 学习之路 4 PropertyUtil.java
- ddpush 学习之路 8 Constant.java
- ddpush 学习之路 12 Sender.java
- ddpush 学习之路 13 Receiver.java
- ddpush 学习之路 14 UdpConnector.java
- HttpClient 学习 转自 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html
- Java 学习之路 之 成员变量和局部变量
- ddpush 学习之路 1 前言
- java学习之路-分享笔记20150327
- Java学习之路
- java apache commons HttpClient发送get和post请求的学习整理
- Java学习之路(六)
- java学习之路(1)