基于这个进行开发吧!
所有的数据包均以json格式进行发送。
1. 登录
2. 接收服务器推送的新消息+每隔30s发送心跳包,如果断线则重新连接
3. 可以主动发送请求包来发消息,加好友什么的
对于请求包,如需要对方回应,则需要指定一定时间段内唯一的serial号,如果不要回应则设置为-1即可。
客户端可以根据包的类型设置一个序列号列表用于等待服务器的回应。
目前的设计中,服务器不需要在给客户端发送cmd包的时候等待回应。
{
"cmd": 1, // 操作码
"serial": xx, // 包序列号,由发送者指定
"data": [] // 数据(可省略)
}
{
"code": 0, // 错误码
"serial": xx, // 包序列号,与回应的请求包的序列号一致
"msg": "login success", // 提示信息
"data": [ // 数据(可省略)
"asd",
"123"
]
}
1 => 登录包(客户端发送)
5 => 通知包(服务端发送)(收到消息等等)
10 => 获取聊天记录(已读+未读)(客户端发送)
11 => 发消息(客户端发送)
12 => 请求加好友(客户端发送)
13 => 同意加好友(客户端发送)
14 => 获取未读消息(客户端发送)
15 => 已读消息(客户端发送)
233 => 心跳包(客户端发送)
0 => ok
998 => msg too long
999 => unknown err
连接建立的5s之内需要发送登录包,否则断开连接。
{
"cmd": 1, // 登录包cmd为1
"data": {
"uname": $uname,
"passwd": $passwd // 登录信息
}
}
// 快捷复制(测试用)
// {"cmd":1, "data":{"uname":"Mz1","passwd":"123456"}}
登录成功回应:
{
"code": 0, // 错误码
"msg": "login success", // 提示信息
"data": {$用户信息} // 返回基本用户信息
}
错误码:
1 => wrong uname or passwd
注册预计使用http进行?
每30s发送一次,不得超过60s
{
"cmd": 233
}
data对象的type属性:
"recvmsg" 收到消息
"recv_friend_request" 收到好友请求
示例:
{
"cmd": 5,
"data": {
"type": "recvmsg", // 通知类型
"data": { // 通知内容(示例为收到消息包)
"from_uid": $from_uid,
"text": $text
}
}
}
{
"cmd": 10,
"data": {
"from_uid": $from_uid, // 从哪个联系人那边来的聊天记录
"len": $len, // 获取几条,若为空则获取最新的一条
}
}
给某某用户发消息
参数:to_uid, text
{
"cmd": 11,
"data": {
"to_uid": $to_uid, // 给谁发消息(注意这里是int,不可用成字符串)
"text": $text // 消息内容
}
}
998 => msg too long // 消息过长(目前设定不超过2000字符)
请求包格式:
{
"cmd": 14,
"serial": x
}
返回包格式:
这里的设计仍然存在问题,没有东西标识已读的状态。
{
"code": 0,
"data": [
{
"from_uid": x,
"to_uid": y, // 可以省略
"status": xxx, // 可以省略
"text": xxxxxxx,
"time": xxxxxxx
},
{
...
}
]
}
用于确认已读哪些消息