群组操作
创建群组
我们假设Tony要创建一个名为"出彩中国人"的群组,具体代码如下:
- unsigned int matchKey = 0;
- int CreateGroup(&matchKey, "出彩中国人", 1, "北京","北京",1,
- "群公告", 1,2,"备注",0);
- 结果回调:
- void OnCreateGroup(unsigned int matchKey,int reason, ECGroupDetailInfo *pInfo);
主动加入
只要知道群组id,就可以主动加入群组。
1、我们假设"出彩中国人"群组已经有Tony和John两位成员,现在Smith要加入"出彩中国人"群组,则代码如下:
- unsigned int matchKey = 0;
- JoinGroup(&matchKey, “出彩中国人id”, “加入群组的理由”);
- 结果回调接口:
- void OnJoinGroup(unsigned int matchKey,int reason,constchar* groupid);
注意:
如果群组"出彩中国人"是公开群组,则smith直接被允许加入。如果群组"出彩中国人"是私有群组, 则smith加入需要群主Tony的的同意。 Tony首先收到mith加入的请求,代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }}
Tony同意Smith加入的请求,代码如下:
- unsigned int matchKey = 0;
- ReplyRequestJoinGroup(&matchKey, pMemberJoinMsg ->groupId, pMemberJoinMsg->member,2);
- 结果回调:
- void OnReplyRequestJoinGroup(unsigned ivoid OnReplyRequestJoinGroup(unsigned int matchKey, int reason,const char;
2、Smith加入成功后,群组中成员Tony和John收到的通知回调方法代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }}
邀请加入
只能群主邀请别人加入。
1、我们假设"出彩中国人"群组的创建者Tony邀请Smith加入群组,则代码如下:
- unsigned int matchKey = 0;
- int nRet = InviteJoinGroup(&matchKey,”出彩的中国人”,nullptr,members,memberCount,1);
- 结果回调:
- void OnInviteJoinGroup(unsigned int matchKey, int reason,const char* groupid,const char** members,int membercount,int confirm);
注意:
如果Tony邀请Smith加入的时候,接口参数不指定加入需要Smith确认,则smith直接被邀请加入。如果指定需要Smith 同意才能加入,则Smith收到如下通知回调,并在回调里面回复"同意"或"拒绝"加入。代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }}
2、Smith加入成功后,群组中成员Tony和John收到的通知回调方法代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }}
退出群组
1、我们假设Smith要退出群组,则代码如下:
- unsigned int matchKey = 0;
- int nRet = QuitGroup(&matchKey, “出彩的中国人ID”)
- 结果回调:
- void OnQuitGroup(unsigned int matchKey, int reason,constchar* groupid);
2、Smith退出成功后,群组中成员Tony和John收到的通知回调方法代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }
- }
群主踢人
1、我们假设群主Tony要把Smith踢出群组,则代码如下: 1、我们假设群主Tony要把Smith踢出群组,则代码如下:
- unsigned int matchKey = 0;
- int nRet = DeleteGroupMember (&matchKey, “出彩的中国人ID”,”Smith”)
- 结果回调:
- void OnDeleteGroupMember(unsigned int matchKey, int reason,const char* belong,const char* member);
2、群组中所有成员都会收到的Smith被踢的消息,包括Smith自己,Smith判断被踢用户的id等于自己, 则从本地删除群组,此通知回调方法代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- ....... }}
解散群组
只有群主才能解散群组。
1、我们假设群主Tony要解散"出彩中国人",则代码如下:
- unsigned int matchKey = 0;
- int nRet = DismissGroup (&matchKey, “出彩的中国人ID”);
- 结果回调:
- void OnDismissGroup(unsigned int matchKey, int reason,const char* groupid);
2、群组中所有成员收到的通知回调方法代码如下:
- void OnReceiveGroupNoticeMessage(const ECGroupNoticeMessage * pMsg)
- {
- switch(pMsg->notice)
- {
- case NTRequestJoinGroup:
- if( Global::m_pMain )
- {
- Global::m_pMain->MemberReceiveRequestJoinGroupNoticeMsgResult((ECRequestJoinGroupNtyMsg*)pMsg->pNoticeMsg);
- }
- break;
- case NTInviteJoinGroup:
- .......
- }}
获取群详情
- unsigned int matchKey = 0;
- int nRet = QueryGroupDetail (&matchKey, “出彩的中国人ID”);
- 结果回调:
- void OnQueryGroupDetail(unsigned int matchKey, int reason, ECGroupDetailInfo *detail);
获取群成员
- unsigned int matchKey = 0;
- int nRet = QueryGroupMember (&matchKey, “出彩的中国人ID”,””,50);
- 结果回调:
- void OnQueryGroupMember(unsigned int matchKey, int reason, const char *groupid,int count,ECGroupMember *member);
群组搜索
可以根据群组名字或者群组ID来搜索群组,代码如下:
- unsigned int matchKey = 0;
- int nRet = SearchPublicGroups (&matchKey,2, “中国人”);
- 结果回调:
- void OnSearchPublicGroup(unsigned int matchKey,int reason, int searchType,constchar* keyword,int count,ECGroupSearchInfo *group);
群组免打扰
群组免打扰功能是指群组收到消息的时候,是否震动手机或振铃(震动或振铃是在应用层处理,通过sdk可以设置此状态并保存在服务端,切换手机时,群组的状态也可同步)。其示例代码如下:
- unsigned int matchKey = 0;
- SetGroupMessageRule(&matchKey, “中国人群组id”, false);
- 结果回调:
- void OnSetGroupMessageRule(unsigned int matchKey, int reason,const char* groupid, bool notice);
获取个人所在的群组
用户登录后,通常首先调取此接口获取自己所在群组,此接口会返回群组的id、名称、免打扰状态等信息,其示例代码如下:
- unsigned int matchKey = 0;
- int nRet = QueryOwnGroup (&matchKey,””,50,2);
- 结果回调:
- void OnQueryOwnGroup(unsigned int matchKey,int reason, int count,ECGroupSimpleInfo *group);
设置群组成员权限
用户在群组中可以设置管理员、转让群主:
- unsigned int matchKey = 0;
- SetGroupMemberRole(&matchKey, groupId, member, role);//role:成员权限 1: 群主 2:管理员 3:成员
- 结果回调:
- void OnSetGroupMemberRole(unsigned int matchKey, int reason);
群组@成员
用户在群组中可以@群的其他成员:消息类型为11
- unsigned int matchKey = 0;
- ret = SendTextMessageEX(&matchKey,receiver , msgText, Msg_Type_GroupAt, NULL, msgId, jsonString);//jsonString格式为{"at":["111","222"]},111,222是被@的成员
- 结果回调:
- void OnReceiveMessage(ECMessage *pMsg);