2013-10-14 38 views
0

我正在开发一个使用Tigase服务器在后台提供XMPP通信的聊天应用程序。除此之外,我在应用程序中使用smack/asmack作为库。覆盖Tigase OfflineMessages类

随着用户之间发送的每条消息,为了实现我想要实现的功能,我将通过smack的Presence.setProperty()方法包括扩展包,如果两个用户都在线,这些方法都会正确发送。当其中一个用户离线时,Tigase服务器保存该信息,然后在用户再次上线时传送该信息。问题是Tigase不保存包含分组扩展的消息,因此当用户再次联机时,它只会收到消息发送的“部分”。

我找到了Tigase源代码,并在xmpp.impl软件包的OfflineMessages类部分中找到了位置,我需要插入一行代码以便msgoffline插件使用扩展名保存脱机消息。

什么是最简单的方法来覆盖Tigase jar文件中的OfflineMessages类,而无需构建项目的整个源代码?

我在Ubuntu服务器和Eclipse上使用Tigase-5.1.5-b3164版本作为IDE。

+0

你想在'OfflineMessages.java'中插入哪行代码? – Flow

+0

我正在尝试做什么Artur说 – R3dH4nd5

回答

0

我不知道Smack库,因此我不知道Presence.setProperty()方法的作用。但是,如果它对存在数据包执行了某些操作(将额外的有效负载添加到存在状态),则不会将其保存到脱机消息存储中,因为存在不存储在脱机消息存储中。

如果您想要修改OfflineMessages以使其存储比现在存储更多不同的数据(如特定存在数据包),则有一种方法:开始时使用大IF的savePacketForOffLineUser。这是决定在离线存储中存储什么内容的地方。

但是,请小心不要存储所有存在,它会杀死你的服务和你的数据库。

添加自己的插件的最好方法是复制现有的Tigase插件(OfflineMessgae),将其修改为您的首选项,更改插件的名称和插件的ID。然后,您只需将一个包含代码的jar放入Tigase jars目录并修改配置以加载您的配置,而不是默认配置。通过这种方式,您不必重新编译Tigase来源,并且更容易更新为新版本。

+0

谢谢,但可以快速启动并构建Tigase插件而无需编译它的源代码?关于此的一些提示? – R3dH4nd5