XMPPFramework - 实施群聊 (MUC)

2023-12-29

我正在开发 iOS 聊天客户端。有人可以帮我进行多用户聊天吗?

我已经实现了 Robbiehanson 的 XMPPFramework。

谁能告诉我如何使用此框架获取组列表并在服务器中创建组?

提前致谢。


获取房间列表:

NSString* server = @"chat.shakespeare.lit"; //or whatever the server address for muc is
XMPPJID *servrJID = [XMPPJID jidWithString:server];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:servJID];
[iq addAttributeWithName:@"from" stringValue:[xmppStream myJID].full];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[xmppStream sendElement:iq];

检查委托方法中的响应:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
    DDLogVerbose(@"%@", [iq description]);
    return NO;
}

加入或创建房间

XMPPRoomMemoryStorage * _roomMemory = [[XMPPRoomMemoryStorage alloc]init];
NSString* roomID = @"[email protected] /cdn-cgi/l/email-protection";
XMPPJID * roomJID = [XMPPJID jidWithString:roomID];
XMPPRoom* xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_roomMemory
                                             jid:roomJID
                                   dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:self.xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppRoom joinRoomUsingNickname:@"myNickname"
                        history:nil
                       password:nil];

检查 XMPPRoom 委托方法中的响应:

- (void)xmppRoomDidCreate:(XMPPRoom *)sender{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

- (void)xmppRoomDidJoin:(XMPPRoom *)sender{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

update

配置房间:

after:

[xmppRoom joinRoomUsingNickname:self.xmppStream.myJID.user
                        history:history
                       password:nil];

add:

[xmppRoom fetchConfigurationForm];

并检查响应:

- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm{
    DDLogVerbose(@"%@: %@ -> %@", THIS_FILE, THIS_METHOD, sender.roomJID.user);
}

回顾configForm对象,并根据需要进行更改,然后发送[sender configureRoomUsingOptions:newConfig];

example:要更改配置以使房间持久存在,您可以添加以下内容:

NSXMLElement *newConfig = [configForm copy];
NSArray* fields = [newConfig elementsForName:@"field"];
for (NSXMLElement *field in fields) {
    NSString *var = [field attributeStringValueForName:@"var"];
    if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
        [field removeChildAtIndex:0];
        [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
    }
}
[sender configureRoomUsingOptions:newConfig];

(我不熟悉 NSXMLElement,所以也许有更好的方法来更改值)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XMPPFramework - 实施群聊 (MUC) 的相关文章

随机推荐

  • 使用 PHP 从 Youtube 视频 URL 获取 Youtube 视频缩略图

    假设我有一个 YouTube 视频网址www youtube com watch v B4CRkpBGQzU feature youtube gdata par1 1 par2 2 我想获取视频缩略图 gt i3 ytimg com vi
  • Android Espresso IdlingResources 和片段/活动转换

    我有一个托管片段 F1 的活动 单击按钮后 F1 被另一个片段 F2 替换 当按下后退按钮时 应用程序通过一个按钮从 F2 返回到 F1退出过渡动画片 我的 Espresso 测试用例大致如下所示 Test public void pres
  • Django 和 MySQL unicode 错误

    我正在得到一个Incorrect string value Exception Value Incorrect string value xEA xB0 x95 xED x95 x98 for column object repr at r
  • 如何将存储过程的多个输出抓取到临时表中

    我的存储过程返回两个输出 我想在另一个存储过程中使用其中一个 因此尝试获取临时表中的第二个输出 但由于两个输出的结构不同 因此我总是得到 列名称或提供的值的数量与表定义不匹配 即使我更改输出的顺序 第一个输出第二个 第二个输出第一个 它也不
  • 如何在R中保存foreach循环的输出

    我在保存数据输出后遇到问题foreach loop 这是读取我的数据并处理它的函数 readFiles lt function x data lt read table filelist skip grep Begin Data Text
  • Java 中最终字符串的串联是如何完成的?

    当我编译这个片段时 public class InternTest public static void main String strings final String str1 str final String str2 ing Str
  • Netbeans 中的 Git 控制台

    我刚刚安装了 Netbeans 8 我想开始使用 Git 有很多按钮 菜单等 但在哪里可以找到 Git 控制台 我使用Windows 如果您想要控制台 您可能最好直接安装它 IDE 通常只提供菜单集成选项 Git 的网站有 Windows
  • Symfony2主义mysql IN查询

    我有一系列产品 ID 我必须像这样进行查询 SELECT FROM products WHERE pid IN 1 2 8 4 etc 我的 id 位于变量 pids 中 qb em gt createQueryBuilder query
  • 如何使用 Amazon AWS Elastic Beanstalk 安装 PHP 扩展?

    我们在 EC2 实例上的 PHP 应用程序中使用 aws elastic beanstalk 由于我们选择了负载平衡 它会不断地更改实例 我想知道如果我们安装 PHP 插件 它会受到实例更改的影响还是在新实例中也可用 提出这个问题是因为我们
  • macOS 上 CLion 中的 std::unordered_map

    我怎样才能看到元素std unordered map在 CLion 调试器中 有一些recipe https blog jetbrains com clion 2015 05 debug clion 怎么看std map元素 但它不适用于s
  • 添加两个 NSDate

    我有两个 NSDate 日期和时间 我想以这样的方式添加它们 以便我从日期中获取日期 从时间中获取时间 关于我如何做到这一点有什么建议吗 Cheers Nik 如果我没听错的话NSDates dateByAddingTimeInterval
  • 在 Symfony 1.4 中重命名“web”文件夹

    我想在 symfony 1 4 中将 web 文件夹重命名为 html 不幸的是 搜索这方面的文档却一无所获 除了在 1 0 中如何实现这一点之外 这似乎不起作用 首先 您不必重命名它 您可以只创建一个符号链接 除非您运行的是 Window
  • 使用 MySQL 和 ejabberd 进行高效的外部排班

    Question 请注意 这个问题的解决方案就在下面 使用 Eugen 的视图思想 我正在为 PHP MySQL 用户驱动的网站编写一个聊天模块 允许两个用户交朋友 并选择 eJabberd 作为聊天系统 我已经使用 PHP 守护程序成功设
  • 透明外壳。如何将很长的 JavaScript 拆分为多行?

    我有一个 JS 压缩文件 长约 14k 并且在一行中 这会在 Clear Case 上造成一些问题 导致无法办理登机手续 有没有办法修复clearcase 如果我想将JS文件拆分为多行 插入换行符时需要注意什么吗 显然我不会分割字符串或数字
  • schema.org 中的产品类别?

    用作参考 https support google com webmasters answer 146750 hl en https support google com webmasters answer 146750 hl en 您会注
  • 如何加密/解密 XML 文件?

    我正在尝试加密 解密 XML 文件 我找到了这个加密示例 但我不知道如何解密 任何想法 谢谢 Load this XML file System Xml XmlDocument myDoc new System Xml XmlDocumen
  • ArCore Sceneform:检测图像时播放.mp4视频

    当我找到图像时 我想在其上方放置文本和视频 文本视图放置在场景上 但视频没有放置在场景中 它只是添加到中间的主布局中 我正在使用组件 VideoView 我不确定这是问题所在 override fun onCreate savedInsta
  • 如何使用PHP给上传的图片添加水印

    如何使用 PHP 对上传的图片添加水印 示例链接 http www kitebeaches com kitesurf uploadPicture NIRVANA Club Village html http www kitebeaches
  • TEmbeddedWB/TWebbrowser:window.external是一个空对象,但可以调用函数,为什么它首先是“空”?

    使用案例 先一些信息 我制作了一些 HTML CSS3 Javascript 游戏 可以在特定于平台的可执行文件中的 WebView 嵌入式浏览器中的不同平台上运行 我自己设计了它 因为我厌倦了周围所有的 框架 这些 框架 告诉我使用他们的
  • XMPPFramework - 实施群聊 (MUC)

    我正在开发 iOS 聊天客户端 有人可以帮我进行多用户聊天吗 我已经实现了 Robbiehanson 的 XMPPFramework 谁能告诉我如何使用此框架获取组列表并在服务器中创建组 提前致谢 获取房间列表 NSString serve