openfire和mina(二)

      上篇写了数据由MINA层到了XMPP层,接下来看看数据(XMPP)是在OPENFIRE的XMPP层里都被做什么处理了,由于研究的时间比较短,只能大概写一下。

      可以看到数据在messageReceived()中被StanzaHandler处理了。

 

 

上面是类图,只画了C-S的(ClientStanzaHandler)的。

首先如果是有新客户端连接的话会调用sessionOpened().然后创建一个ClientStanzaHandler。

接着数据在MINA框架经过第一次解码(XMPPCodecFactory)后传到ConnectionHandler中的

messageReceived(),然后处理客户端发来的XMPP包,StanzaHandler 会解析数据包(process),

如果是"<stream:stream"开头的话会为此客户端创建一个clientsession(createSession()).

下面是代码片段:

 


 boolean initialStream = stanza.startsWith("<stream:stream" ) || stanza.startsWith("<flash:stream" );
        if (!sessionCreated || initialStream) {
            if (!initialStream) {
                // Allow requests for flash socket policy files directly on the client listener port
                if (stanza.startsWith("<policy-file-request/>" )) {
                    String crossDomainText = FlashCrossDomainServlet.CROSS_DOMAIN_TEXT +
                            XMPPServer.getInstance().getConnectionManager().getClientListenerPort() +
                            FlashCrossDomainServlet.C ROSS_DOMAIN_END_TEXT + '/0' ;
                    connection.deliverRawText(crossDomainText);
                    return;
                }
                else {
                    // Ignore <?xml version="1.0"?>
                    return ;
                }
            }
            // Found an stream:stream tag...
            if (!sessionCreated ) {
                sessionCreated = true;
                MXParser parser = reader.getXPPParser();
                parser.setInput(new StringReader(stanza));
                createSession(parser);
            }

 

 


 

     以后再有 xmpp数据过来的话,会送到clientSession中去处理,比如给好友发消息,到clientSession中解析完了后,会调用deliver()由NIOConnection发到MINA层中。

 

   至此,数据从C----->S的简单流程就完事了,以后有时间会写S----->S的数据处理!

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值