====== 群组管理 ====== ---- ===== 新建群组 ===== EMError error; string subject = getStringAttrFromJson(json, "subject");//群名称 string description = getStringAttrFromJson(json, "description");//群简介 string welcomeMessage = getStringAttrFromJson(json, "welcomeMessage");//欢迎辞 string style = getStringAttrFromJson(json, "style");//群类型 string maxUserCount = getStringAttrFromJson(json, "maxUserCount");//最大成员数 stringstream stream; stream << maxUserCount; int nMaxUserCount; stream >> nMaxUserCount; EMGroupSetting setting; EMGroupSetting::EMGroupStyle emGroupStyle = EMGroupSetting::EMGroupStyle::PRIVATE_OWNER_INVITE;//私有群,成员无邀请权限 if (style.compare("PRIVATE_MEMBER_INVITE") == 0) { emGroupStyle = EMGroupSetting::EMGroupStyle::PRIVATE_MEMBER_INVITE;//私有群,成员有邀请权限 } else if (style.compare("PUBLIC_JOIN_APPROVAL") == 0) { emGroupStyle = EMGroupSetting::EMGroupStyle::PUBLIC_JOIN_APPROVAL;//公有群,加入需要验证 } else if (style.compare("PUBLIC_JOIN_OPEN") == 0) { emGroupStyle = EMGroupSetting::EMGroupStyle::PUBLIC_JOIN_OPEN;//公有群,开放加入 } setting.setStyle(emGroupStyle); setting.setMaxUserCount(nMaxUserCount); EMGroupMemberList members = getArrayAttrFromJson(json, "members"); EMGroupPtr group = g_client->getGroupManager().createGroup(subject, description, welcomeMessage, setting, members, error); string ret; if (error.mErrorCode == EMError::EM_NO_ERROR) { ret = "{\"id\":\"" + group->groupId() + "\",\"subject\":\"" + group->groupSubject() + "\"}"; callback->Success(ret); } else { callback->Failure(error.mErrorCode, error.mDescription); } ===== 群组加人 ===== EMError error; string id = getStringAttrFromJson(json, "id"); string welcomeMessage = getStringAttrFromJson(json, "welcomeMessage"); EMGroupMemberList members = getArrayAttrFromJson(json, "members"); EMGroupPtr group = g_client->getGroupManager().addGroupMembers(id, members, welcomeMessage, error); string ret; if (error.mErrorCode == EMError::EM_NO_ERROR) { ret = "{\"id\":\"" + group->groupId() + "\",\"subject\":\"" + group->groupSubject() + "\"}"; callback->Success(ret); } else { callback->Failure(error.mErrorCode, error.mDescription); } ===== 群组踢人 ===== EMGroupPtr group = g_client->getGroupManager().removeGroupMembers(id, members, error); ===== 退出群组 ===== g_client->getGroupManager().leaveGroup(id, error); ===== 解散群组 ===== g_client->getGroupManager().destroyGroup(id, error); ===== 接受群邀请 ===== EMGroupPtr group = g_client->getGroupManager().acceptInvitationFromGroup(id, user, error); ===== 拒绝群邀请 ===== EMGroupPtr group = g_client->getGroupManager().declineInvitationFromGroup(id, user, error); ===== 接受加入群申请 ===== EMGroupPtr group = g_client->getGroupManager().acceptJoinGroupApplication(id, user, error); ===== 拒绝加入群申请 ===== EMGroupPtr group = g_client->getGroupManager().declineJoinGroupApplication(id, user, reason, error); ===== 获取群组列表 ===== //从服务器获取自己加入的和创建的群组列表,此api获取的群组sdk会自动保存到内存和db。 EMError error; EMGroupList groupList = g_client->getGroupManager().fetchAllMyGroups(error); string ret; if (error.mErrorCode == EMError::EM_NO_ERROR) { for (EMGroupPtr group : groupList) { ret += "{\"jid\":\"blahblah\",\"name\":\""; ret += group->groupSubject(); ret += "\",\"roomId\":\""; ret += group->groupId(); ret += "\"},"; } if (!ret.empty()) { string tmp = ret.substr(0, ret.length() - 1); ret = "[" + tmp + "]"; } string enc = Utils::URLEncode(ret); callback->Success(ret); lock_guard guard(Utils::group_mutex); Utils::g_bGroupListDownloaded = true; } else { callback->Failure(error.mErrorCode, error.mDescription); } ===== 修改群名称 ===== EMGroupPtr group = g_client->getGroupManager().changeGroupSubject(id, subject, error); ===== 修改群简介 ===== EMGroupPtr group = g_client->getGroupManager().changeGroupDescription(id, subject, error); ===== 群组信息 ===== //获取群成员 EMError error; string id = getStringAttrFromJson(json, "id"); if (!id.empty()) { string ret; const EMGroupMemberList *gml = g_client->getGroupManager().fetchGroupSpecification(id, error)->groupMembers(); if (gml == NULL) { return; } for (string member : *gml) { ret += "{\"jid\":\""; ret += member; ret += "\",\"affiliation\":\""; ret += "member"; ret += "\"},"; } if (!ret.empty()) { string tmp = ret.substr(0, ret.length() - 1); ret = "[" + tmp + "]"; } if (error.mErrorCode != EMError::EM_NO_ERROR) { callback->Failure(error.mErrorCode, error.mDescription); } else { callback->Success(ret); } } //获取群主 std::string owner = g_client->getGroupManager().fetchGroupSpecification(id, error)->groupOwner(); ===== 加入某个群组 ===== 只能用于加入公开群。 const EMGroupPtr group = g_client->getGroupManager().joinPublicGroup(id, error); ===== 群组事件监听 ===== class GroupManagerListener : public EMGroupManagerListener { public: GroupManagerListener() { } virtual void onReceiveInviteFromGroup(const std::string groupId, const std::string& inviter, const std::string& inviteMessage); virtual void onReceiveInviteAcceptionFromGroup(const EMGroupPtr group, const std::string& invitee); virtual void onReceiveInviteDeclineFromGroup(const EMGroupPtr group, const std::string& invitee, const std::string &reason); virtual void onAutoAcceptInvitationFromGroup(const EMGroupPtr group, const std::string& inviter, const std::string& inviteMessage); virtual void onLeaveGroup(const EMGroupPtr group, EMGroup::EMGroupLeaveReason reason); virtual void onReceiveJoinGroupApplication(const EMGroupPtr group, const std::string& from, const std::string& message); virtual void onReceiveAcceptionFromGroup(const EMGroupPtr group); virtual void onReceiveRejectionFromGroup(const std::string &groupId, const std::string &reason); virtual void onUpdateMyGroupList(const std::vector &list); }; ... ... GroupManagerListener *mGroupManagerListener = new GroupManagerListener(); g_client->getGroupManager().addListener(mGroupManagerListener); ---- 上一页:[[im:windows:basics:buddy|好友管理]] 下一页:[[im:windows:basics:chatroom|聊天室管理]]