提示: 因为工程稍微有点大对我个人来说,所以可能在某些方面讲的不清楚或逻辑性不够强,如果有问题请及时@我。
因为要发送自己定义的消息包,所以需要设计客户端与服务器之间传递的消息的具体构造。
package com.imomo_msg;
/**
* symbol = ‘+’ : 纯本文件
* symbol = ‘-’ : 非纯本文件
* @author Administrator
*/
public class iMoMoMsg {
/* symbol = ‘+’ : 纯本文件 symbol = ‘-’ : 非纯本文件 /
public char symbol;// 判断是否是纯文本文件
/* 包含非文本信息详情的解释 /
public String msgJson;
/* 非文本信息 /
public byte[] msgBytes;
@Override
public String toString() {
return “iMoMoMsg [symbol=” + symbol + “, msgJson=” + msgJson + “]”;
}
}
这个就是所有通讯的消息包结构,symbol主要是被编解码器识别,然后根据是发送文本还是非文本消息进行不同的编解码。msgJson 是所有文本消息的JSON字符串。如果是文本消息,msgBytes = null. 如果是非文本消息,msgBytes 就是非文本消息的字节数组,如语音或图片。msgJson 这时不为空,它包含该语音或图片的解释,如是谁发送的,例如注册消息,这里要包含用户的id等信息。
对于文本消息,这里发送JSON字符串,因为JSON比较好处理,调用阿里的开源项目fastjson,处理起来就和Hashmap差不多,非常方便。需要注意的是,json 字符串中必须要包含消息类型键值对,这里便要根据实际需求设计消息类型了。如下:
package com.imomo_msg;
public interface iMoMoMsgTypes {
int REGISTER = 0;// 注册
int REGISTER_SUCCESS = 1;// 注册成功
int REGISTER_FAILED = 2;// 注册失败
int LOGIN = 3;// 登录
int LOGIN_SUCCESS = 4;// 登录成功
int LOGIN_FAILED = 5;// 登录失败
int LOGIN_SUPER_HEAD = 6;// 超级登录,用户手机有用户图像,无需获取头像
int LOGIN_SUPER_NOHEAD = 7;// 超级登录,用户手机无用户图像,需要从服务器获取头像等信息
int LOGIN_SUPER_SUCCESS = 8;// 成功
int LOGIN_SUPER_FAILED = 9;// 失败
int LOGOUT = 10;// 用户下线
int FIND_PASSWD = 11;// 找回密码
int FIND_PASSWD_SUCCESS = 12;// 已发送找回密码邮件
int FIND_PASSWD_FAILED = 13;// 找回密码失败
int RESET_PASSWD = 14;// 重置密码
int RESET_PASSWD_SUCCESS = 15;// 重置密码成功
int RESET_PASSWD_FAILED = 16;// 重置密码失败
int RESET_USERNAME = 17;// 修改用户名
// int RESET_USERNAME_SUCCESS = 18;// 修改用户名成功
// int RESET_USERNAME_FAILED = 19;// 修改用户名失败
int RESET_SEX = 200;// 修改性别
int RESET_BIRTHDAY = 201;// 修改生日
int RESET_SIGNATUE = 202;// 修改个人签名
int RESET_HEAD = 20;// 修改头像
int RESET_HEAD_SUCCESS = 21;// 修改头像成功
int RESET_HEAD_FAILED = 22;// 修改头像失败
int CHATING_TEXT_MSG = 23;// 聊天信息-文本信息
int CHATING_VOICE_MSG = 24;// 聊天信息-语音信息
int CHATING_IMAGE_MSG = 25;// 聊天信息-图片信息
int CONNECT_DOWN = 26;// 和服务器的连接断开
int LOCATION = 27;// 用户的地理位置
int GET_STRANGERS_LOC_ONEKM = 28;// 请求得到周围一公里陌生人地理位置
int GET_STRANGERS_LOC_MORE = 40; // 大于一公里的人
int STRANGERS_LIST_ONEKM = 31;// 一公里内陌生人列表
int STRANGERS_LIST_MORE = 38;// 更多附近的人
int NO_STRANGERS = 32;// 周围无陌生人
int GET_STRANGER_INFO = 50;// 获取陌生人个人信息
int ADD_FRIEND = 33;// 添加好友
int ADD_FRIEND_SUCCESS = 36;// 添加成功
int ADD_FRIEND_FAILED = 37;// 添加成功
int DELETE_FRIEND = 35;// 删除好友
int GET_FRIEND_ID_LIST = 34;// 获得好友Id列表
int FRIEND_ID_LIST = 42;// 好友Id列表
int GETA_FRIEND_INFO_HEAD = 29;// 得到一个陌生人的具体信息(本地有图像,服务器不用发送头像)
int GETA_FRIEND_INFO_NOHEAD = 30;// 得到一个陌生人的具体信息(本地无图像,服务器要发头像)
int REBACK = 51;//用户反馈
int GROUP_INVITE = 52;//群聊天邀请
int SIGN = 55;//每日签到
int CREATE_GROUP = 56;//创建群组
int CREATE_GROUP_SUCCESS = 57;
int CREATE_GROUP_FAILED = 58;
int INVITE_TO_GROUP = 59;//邀请加入多人聊天
int AGREEE_TO_GROUP = 60;//同意加入群组
int GROUP_MSG = 61;
int PASS_GAME = 62;//活力值通关
}
还需要设计的是需要发送哪些消息,也就是JSON的键
package com.imomo_msg;
/**
* JSON数据的键
*
* @author Administrator
*
*/
public interface MsgKeys {
String msgType = “msgType”;// 消息类型
String userId = “userId”;// 发送者Id
String friendId = “friendId”;// 接收者Id
String friendName = “friendName”;//好友名
String sendTime = “sendTime”;// 发送时间
String msgCotent = “msgCotent”;// 聊天信息-文本信息
String voiceTime = “voiceTime”;// 聊天信息-语音信息长度
String voicePath = “voicePath”;// 聊天信息-语音文件路径
String imagePath = “imagePath”;// 聊天信息-图片路径
String userEmail = “userEmail”;// 用户注册邮箱,登录时用邮箱登录
String userName = “userName”;// 用户名
String userSex = “userSex”;// 用户性别
String userBirthday = “userBirthday”;// 用户生日
String userPasswd = “userPasswd”;// 登录密码
String personSignature = “personSignature”;// 个性签名
String vitalityValue = “vitalityValue”;//活力值
String userHeadPath = “userHeadPath”;// 用户头像路径
String loc_province = “loc_province”;// 所处省份
String loc_Longitude = “loc_Longitude”;// 经度
String loc_Latitude = “loc_Latitude”;// 纬度
String distRange = “distRange”;//多少公里之内的
String strangerList = “strangerList”;//陌生人列表
String friendIdList = “friendIdList”;//好友Id列表
String groupId = “groupId”;//群组Id
String groupName = “groupName”;//群组名
String groupTopic = “groupTopic”;//群组主题
String groupCreator = “groupCreator”;//
String isGroupMsg = “isGroupMsg”;
}
然后就可以构造一条消息了:
//测试注册
iMoMoMsg moMoMsg = new iMoMoMsg();
JSONObject Json = new JSONObject();
Json.put(MsgKeys.msgType, iMoMoMsgTypes.REGISTER);
Json.put(MsgKeys.userEmail, “157*****@163.com”);
Json.put(MsgKeys.userName, “isRunning”);
Json.put(MsgKeys.userPasswd, “run_run”);
Json.put(MsgKeys.userBirthday, “**“);
Json.put(MsgKeys.userSex, “male”);
moMoMsg.msgJson = Json.toJSONString();
moMoMsg.msgBytes = FileTools.getInstance().getMultyFileBytes(“E:\iMoMoServer\ClientsHead\fff.png”);
moMoMsg.symbol = ‘-‘;
这就是一条非文本消息的构造,文本消息没有字节数组即可。