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
原创粉丝点击