[英]How to create plugin openfire for crud
我是openfire的新手,也是第一次使用Java。在嘗試為Crud開發插件時,我陷入了困境。 您能給我一些樣本來提高Crud插件的功能嗎? 感謝您之前的幫助。
您可以從以下答案開始: 使用aSmack Client映射Openfire自定義插件
並按照官方教程給出答案的前三點。
關於CRUD:
假設您想將所有消息作為XML審核到數據庫中,那么您將實現PacketInterceptor
只是為了保持簡單的場景。
您的課程插件如下所示:
public class MyCustomPlugin implements Plugin, PacketInterceptor {//foo}
在initializePlugin方法中,您將具有如下調用:
public void initializePlugin(PluginManager manager, File pluginDirectory)
{
InterceptorManager.getInstance().addInterceptor(this);
}
在方法interceptPacket中是這樣的:
@Override
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException {
if (!processed)
{
boolean done = doMyCRUDAction(packet);
}
if (!done)
{ //do something if error occourred}
}
現在讓我們在數據庫上寫:
private static final String AUDIT_CHAT =
"INSERT INTO MYTABLE(MESSAGEASXML) VALUES (?)";
private boolean doMyCRUDAction(Packet packet)
{
if ((packet instanceof Message))
{
Message message = (Message) packet.createCopy();
boolean isAudited = false;
Connection con = null;
PreparedStatement statement = null;
try {
con = DbConnectionManager.getConnection();
statement = con.prepareStatement(AUDIT_CHAT);
statement.setString(1, message.toString());
statement.executeQuery();
isAudited = true;
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
}
catch (Exception ex)
{
Log.error(ex.getMessage(), ex);
}
finally {
DbConnectionManager.closeConnection(statement, con);
}
return isAudited;
}
}
請記住,這是工作代碼的簡化片段,因此可能需要修復一些sintax
如果CRUD必須遵循顯式的IQ請求,則必須擴展IQHandler
並創建自定義IQ並以handleIQ(IQ packet)
方法發送給客戶端。 您可以簽入Openfire源代碼以獲取詳細和復雜的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.