2010-11-19 5 views
2

2人のクライアントがSmack(Scala/Java)でプログラミングされたボットと(2)strophe(Javascript)でプログラミングされたGUIチャットクライアントと対話するXMPPアプリケーションがあります。XMPPでカスタムXML要素を交換する最も良い方法は?

アプリは(以下に示すように、例えば、)カスタムXMLを交換する必要が

<myPacket> 
    <response type='sensorData'> 
     <temperature units='Kelvin'> 
     234 
     </temperature> 
    </response> 
</myPacket> 

データを交換するための最良の方法は何ですか? 、ピシャリについて))

3)

1カスタムXMPPは

2をスタンザ書く)メッセージまたはIQで現在定義されているスタンザ(例えば、中に私のXMLを埋め込む:以下は、私が思い付くことができるものですuse the Message.get(set)Property to read/write custom data

3)は、両方のクライアントがJavaオブジェクトを理解し、同じライブラリ(Smack)を使用する必要があるため、除外されます。

同じ問題に対処する他の質問をしてください。

[編集:]いくつかの調査を行った後、あなたのライブラリがサポートしていれば、Dataforms(XEP-0004)が最も簡単な方法です。

+2

それぞれのXMPPスタンザの子要素である子要素を独自の名前空間で使用して、クライアントからカスタムXMLデータを送信します。例えば。 = "client @ localhost" ..... ...からの "bot @ localhost"そのようなスタンザは、他の設定が必要なく、クライアントのボットによって受け取られます。 –

+0

コメントありがとうございます。私は結局、子要素をdataformsで使用することに決めました。 – Jus12

+0

私はdataforms(XEP-004)が完全にうまくいっていないという難しい方法を見つけました。独自のエンコーディング(メッセージ・スタンザ内のJSONなど)を使用する方がよいでしょう。これが私たちがどこでもやり遂げたことです。 – Jus12

答えて

3

これは、データの使用方法によって大きく異なります。私の経験則では、キーと値のペア(単純なデータ)を渡すだけであれば、Smackのプロパティの機能に行きます。しかし、プロパティー機能はMessageでしか使用できません。何らかの理由で、プロパティ拡張はSmackのプロバイダアーキテクチャを使用せず、PacketPacketParserUtilsクラスにハードコードされています。したがって、IQパケットまたはPresenceパケットで再使用することはできません。

これ以上のキーと値のペアを使用する場合は、カスタム・スタンザ用のプロバイダを作成する必要があります。これはちょっとした作業ですが、マーシャリング/アンマーシャリングを実装すると、カスタムスタンザはSmackフレームワークのどこでも動作します。詳細については、Smacks provider architectureを参照してください。

私はpostのいずれかでプロバイダを書くことについてブログしました。それはポストの主な信頼ではありませんが、あなたもそれが有用であることを願っています。

+0

答えをありがとう。私はSmackプロパティの機能はSmack専用のコードに制限されていると思うので、それは良い選択肢ではありません。私は自分のスタンザを実装するためのプロバイダアーキテクチャをチェックします。ブログのエントリーは便利です。 – Jus12

関連する問題