1029: 单聊群聊数据互通
一、单聊添加数据
当前用户发出单聊消息后,立即保存本地数据,然后再post告知其他设备。
保存自己的消息方法为:insertMessage,这个方法会立马返回一个message对象。
拿到这个对象转为json字符串,不论是单聊还是群聊都post给其他所有人(下面的方法马上介绍自动过滤机制)。
二、收到消息:
刚刚提到不论单聊还是群聊post给wifi内的其他所有人。收到消息的人
receiveMessage, 这个方法内部自动过滤计算收到消息的用户应不应该收到显示存储这个消息。
参数 = {
json_str:上面发出用户的message对象转换的json字符串
closure(code, message):回调函数,其中code=200时message为收到的消息对象,其他code全部为异常。
}
注:当code = 101时表明我被人踢出群聊,执行alert警告并pop操作即可。
这个方法已经在内部处理了
(1)单聊群聊消息存储
(2)如果我不在某个群,新建群消息
(3)如果我在某个群,群信息更新,同步群信息
(4)如果我在某个群,但被踢出。
1028:
1.群主删除群
GroupList.deleteGroup,传入uuid即可
2.成员退出群GroupList.deleteGroup,
GroupList.quitGroup,传入uuid即可
===========================
1. 好友列表初始化:
把好友的ip写到sd卡里面,方便他们直接动态配置。在BaseApp或MainActivity初始化的时候调用方法传给我:
FriendList是我正在写的好友的类。直接调用他的静态方法:
listPrepareWithIPArr:
可以到FriendList里面直接看我的源码,目前毛胚状态,调用成功后有打印。
ip数组可以给我完整的ip,也可以给最后一位,反正我们两个开发默契自由,看你怎么方便怎么给。
2. 获取好友列表:
调用FriendList的getList方法即可:
参数: 不需要
返回值: User对象
其中ip表示当前好友的ip,
online=101表示在线,online其他值均表示不在线
3. 更新指定用户资料:
我现在隐藏了当前用户,参考wx和q_q,列表出现自己感觉不合理样,我过滤了自己。
更新用户资料,直接调用静态方法:
FriendList.updateUserInfo:
{
user_ip: 要更新用户的ip地址,传null表示当前用户
name: 昵称
head_img: 头像,局域网的file_url,相对地址。不需要带ip后面我自动拼接,同时做缓存后方便用ip拼接
}
返回值:无
注:头像和昵称假设修改其中一个,你也要整体一下把两个参数给我。因为我是两个字段同时更新的。局部字段更新后面复杂了我优化下。
4. 获取指定用户资料
FriendList.getUserInfo:{
user_ip: 要更新用户的ip地址,传null表示当前用户
}
返回值:一定User对象,如果查询用户不存在,返回一个子属性全部是空的对象。
5. 设置好友在线状态:
FriendList.setUserOnline
参数:{
user_ip: 要更新用户的ip
online: 101在线 102不在线
}
返回值:无
更新后再调用getList刷新列表即可。
6. 添加一条聊天数据:
这个方法同时考虑了单聊和群聊。理论上做完了单聊,群聊也实现了。
直接调用Chat类的静态方法addChat:方法。
参数 = {
sender_ip: 发消息人的ip
t: 单聊状态为对方的ip,如果是群聊为群id
type: 消息类型,101文字消息 102图片消息 103语音消息 104视频消息
content: 消息体,如果是文字消息就是内容,如果是其他文件类消息是文件的相对地址
}
返回值: Message对象(到对应类定义中查看字段)
7. 获取聊天列表
直接调用Chat类的静态方法getChatList:方法。
参数 = {
t: target的临时变量,
}
注:t在方法内部我将把t转换为target,如果是单聊t等于对方的ip,如果是群聊传群聊id。
返回值: message数组。
8. 获取群列表:
调用GroupList类的静态方法getList方法。
参数: 不需要
返回值:Group 数组列表
注: 到Group对象查看类的数据定义。
如果列表数组.size=0, 说明没有群。因为我不太清楚群里头像,这里你需要再调用下面的新建默认群,然后再调用GroupList
9.新建群:
调用GroupList类的静态方法addGroup方法。
参数 = {
head_img: 头像相对地址,群头像的图片应该要同步到本地
name:群名
creater: 群主,默认群可以传空
admin: 多个管理员的ip数组,默认群可以传空
members_arr: 多个成员的ip数组
}
10. 根据群id读取群详情:
调用GroupList类的静态方法getGroup方法。
参数 = {
id: 群id
}
返回值:Group对象
11. 更新群信息:
调用GroupList类的静态方法getGroup方法。
参数 = {
id: 群id,
head_img: 群头像
name: 群名称
admin_arr: 管理员,目前传null
members_arr: 群成员数组
}
返回值:无