您的位置:首页 > 编程语言 > Java开发

ddpush 学习之路 9 ClientMessage.java

2015-03-22 14:26 429 查看
现在我们来学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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ddpush ClientMess