openfire外部插件(外部组件)开发

openfire插件–外部组件开发

与外部交互

外部组件

openfire外部组件,就是与openfire所在的进程没有关系,甚至可以不与openfire在同一台机器上运行的组件,一般是一个可运行的jar包,我们叫做外部组件,使用tcp连接(类似客户端Socket的监听端口)与openfire之间进行通信,处理一些服务器需要处理的逻辑。目前可以使用WhackTinder连接操作。

Openfire的外部组件使用tcp连接与openfire之间进行通信。

  1. 发送消息到openfire,格式形如<message to="x.myopenfire.com">内容</message>
  2. Openfire收到这条消息,发现了有一个二级域名x.myopenfire.com,它会在外部组件中寻找谁会处理这个域名的消息,发现了该外部组件并会转发给外部组件。
  3. 外部组件接受到这条消息,处理后再发回openfire,格式形如<message to="userx@myopenfire.com" from="x.myopenfire.com">内容</message>
  4. openfire发到用户上。
配置

先配置子域名和密码,如下服务器端口默认为5275,子域名为chat,密码为123456。这里操作的是ofExtComponentConf数据库表。

这里写图片描述

Java

外部组件使用Whack(需自行编译jar包,ver2.0.1)连接openfire,类似Socket监听服务器端口。注意必须在openfire启动后在启动外部组件,不然会报错。这种方式相当于转发。

org.xmpp.component.ComponentException: internal-server-error

import org.jivesoftware.whack.ExternalComponentManager;
import org.xmpp.component.ComponentException;  

public class Main {
     
    public static void main(String[] args) {  
        ExternalComponentManager mgr = new ExternalComponentManager(  
                "192.168.43.42", 5275); //openfire的IP和相应的端口
        mgr.setSecretKey("chat", "123456");  //设置子域和口令(密码)
        try {  
            mgr.addComponent("chat", new ChatComponent());  
        } catch (ComponentException e) {
            e.printStackTrace();
            System.exit(-1);  
        }  
        // daemon  
        while (true)  {
            try {
                Thread.sleep(10000);
            } catch (Exception e) {
            }
        }
    }  
} 

业务逻辑实现Component,在public void processPacket(Packet packet)处理具体数据。

import org.xmpp.component.Component;  
import org.xmpp.component.ComponentException;  
import org.xmpp.component.ComponentManager;  
import org.xmpp.packet.JID;  
import org.xmpp.packet.Packet;  

public class ChatComponent implements Component{
     
    private static final String name="chat";  
    private static final String description="实现多人通过组件在区域内聊天";  
    private JID jid;  
    private ComponentManager comMgr;  


    public String getName() {  
        return name;  
    }  


    public String getDescription() {  
        return description;  
    }  


    public void processPacket(Packet packet) {
       System.out.println(packet.toXML());
    }  


    public void initialize(JID jid, ComponentManager componentManager)  
            throws ComponentException {  
        this.jid=jid;  
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值