MUC
房间属性设置
以上属性存储在MUCPersistenceManager
private staticConcurrentHashMap<String,MUCServiceProperties> propertyMaps =newConcurrentHashMap<String,MUCServiceProperties>();
创建房间
客户端创建房间案例
第一:客户端发出查询请求
<iq id="wcCqI-57" to="room1@qqgroup.8ntmorv1ep4wgcy" type="get">
<query xmlns="http://jabber.org/protocol/disco#info"/>
</iq>
服务器将数据包发送到托管在该服务器组件来处理。
routed = routeToComponent(jid,packet, routed);
服务器需要在内存中判断房间是否存在,其次呢,返回外部组件的配置。为确切请求子域的查询将会作出修改。如果没有被发现和使用通配符请求,然后再查询将被提出,在使用通配符这个时候。
然后检查组件是否被托管在此JVM
获取MUC组件的信息
该MUC服务将接收的域MUC的域相匹配的所有数据包服务。这意味着,例如,disco 请求应该由服务本身作出回应,而不是依赖在服务器上处理请求。
根据命名空间找到相应处理——>IQDiscoInfoHandler。
http://jabber.org/protocol/disco#info
寻找与所请求的实体相关的DiscoInfoProvider。
我们认为该数据包为单位的接收者的JID的主机。这是DiscoInfoProvider责任提供有关的JID的姓名信息一起用任何可能的请求节点。
所查询的房间节点不存在,按照正常的流程服务器返回错误信息
<iq type="error" id="wcCqI-57" from="room1@qqgroup.8ntmorv1ep4wgcy" to="test2@8ntmorv1ep4wgcy/Spark 2.6.3#android">
<query xmlns="http://jabber.org/protocol/disco#info"/>
<error code="404" type="cancel">
<item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
客户端第二轮发送:
<presence id="wcCqI-59" to="room1@qqgroup.8ntmorv1ep4wgcy/test2">
<x xmlns="http://jabber.org/protocol/muc"/>
</presence>
服务器处理:
1.将用户发送的定向存在的实体
(通知方式发送到该处理程序,当用户发送了一个指向存在的实体。如果存在的发件人是本地的(这个服务器)和目标实体不属于用户的花名册,然后发送更新派驻执导的用户注册表。)
2.广播到所有连接的资源
(获得由XMPPAddress聊天的用户。仅返回已连接到该JVM的用户。)
服务器返回消息:
<message type="groupchat" from="room1@qqgroup.8ntmorv1ep4wgcy">
<body>确认配置之前已锁住该房间,禁止进入。</body>
</message>
配置钱锁定房间,一面别的用创建一样的,或者申请加入这个房间
<presence id="wcCqI-59" to="test2@8ntmorv1ep4wgcy/Spark 2.6.3#android"
from="room1@qqgroup.8ntmorv1ep4wgcy/test2">
<x xmlns="http://jabber.org/protocol/muc#user">
<item jid="test2@8ntmorv1ep4wgcy/Spark 2.6.3#android"
affiliation="owner" role="moderator"/>
<status code="201"/>
</x>
</presence>
客户端发送IQ:
<iq id="wcCqI-60" to="room1@qqgroup.8ntmorv1ep4wgcy" type="get">
<query xmlns="http://jabber.org/protocol/muc#owner"/>
</iq>
查询房间拥有者。
服务器返回1:
<message type="groupchat" from="room1@qqgroup.8ntmorv1ep4wgcy" to="test2@8ntmorv1ep4wgcy/Spark 2.6.3#android">
<body>确认配置之前已锁住该房间,禁止进入。</body>
</message>
服务器返回2:
<iq type="error" id="wcCqI-60" from="room1@qqgroup.8ntmorv1ep4wgcy"
to="test2@8ntmorv1ep4wgcy/Spark 2.6.3#android">
<query xmlns="http://jabber.org/protocol/muc#owner"/>
<error code="401" type="auth">
<not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
===============