Strophe.js に基づくチャット アプリのプレゼンス処理を提供する既存のソリューションはありますか?
Strophe.js に基づくシンプルなチャット アプリケーションがあります。オンラインでリストを動的に変更するユーザーのみを表示したいと思います。これを処理する既存のソリューション (おそらく Strophe プラグイン) があるかどうか疑問に思っていました。そのようなものがない場合、それを実装するための最良/最も簡単な方法は何ですか?
Strophe.js に基づくチャット アプリのプレゼンス処理を提供する既存のソリューションはありますか?
Strophe.js に基づくシンプルなチャット アプリケーションがあります。オンラインでリストを動的に変更するユーザーのみを表示したいと思います。これを処理する既存のソリューション (おそらく Strophe プラグイン) があるかどうか疑問に思っていました。そのようなものがない場合、それを実装するための最良/最も簡単な方法は何ですか?
Strophe を使用すると、IQ をサーバーに送信して、次のように名簿リストを要求することができます。
iq = $iq({type: 'get'}).c('query', {xmlns: 'jabber:iq:roster'});
App.connection.sendIQ(iq, your_roster_callback_function);
これにより、サーバーに名簿が照会され、名簿リストを含むオブジェクトが返されます。その後、次のように名簿を反復処理できます。
your_roster_callback_function(iq){
$(iq).find('item').each(function(){
var jid = $(this).attr('jid'); // The jabber_id of your contact
// You can probably put them in a unordered list and and use their jids as ids.
});
App.connection.addHandler(App.on_presence, null, "presence");
App.connection.send($pres());
}
on_presence
コールバックとを追加したことに注意してくださいconnection.send($pres())
。その目的は、連絡先のプレゼンスが変わった場合に連絡先から更新を取得できるようにすることです。プレゼンス コールバックは次のようになります。
on_presence(presence){
var presence_type = $(presence).attr('type'); // unavailable, subscribed, etc...
var from = $(presence).attr('from'); // the jabber_id of the contact
if (presence_type != 'error'){
if (presence_type === 'unavailable'){
// Mark contact as offline
}else{
var show = $(presence).find("show").text(); // this is what gives away, dnd, etc.
if (show === 'chat' || show === ''){
// Mark contact as online
}else{
// etc...
}
}
}
return true;
}
詳細については、Strophe.js のドキュメントを確認してください。sendIQ を使用すると、エラー コールバックなどのパラメータをさらに追加できます。
お役に立てれば!
編集:
すみません、間違えました。$(presence).attr('type')
連絡先がオンラインかどうかは表示されませんが、プレゼンス タイプは表示されます。プレゼンス タイプは、実際には、連絡先が利用できないかどうか、または連絡先に登録されているか、登録解除されているかなどを知らせるシグナルです。
XMPPドキュメント:
2.2.1. プレゼンスの種類
プレゼンススタンザの「タイプ」属性はオプションです。「タイプ」属性を持たないプレゼンススタンザは、送信者がオンラインで通信可能であることをサーバーに通知するために使用されます。含まれている場合、'type' 属性は、可用性の欠如、別のエンティティのプレゼンスへのサブスクリプションを管理する要求、別のエンティティの現在のプレゼンスに対する要求、または以前に送信されたプレゼンス スタンザに関連するエラーを指定します。含まれる場合、「type」属性には次の値のいずれかが含まれている必要があります。
- 使用不可 -- エンティティが通信に使用できなくなったことを示します。
- サブスクライブ -- 送信者は、受信者の存在をサブスクライブしたいと考えています。
- 購読済み -- 送信者は、受信者が自分のプレゼンスを受け取ることを許可しました。
- 購読解除 -- 送信者は、別のエンティティの存在から購読を解除しています。
- unsubscribed -- サブスクリプション要求が拒否されたか、以前に許可されたサブスクリプションがキャンセルされました。等...
連絡先のステータスが表示され$(presence).find("show")
ます。ドキュメントから:
2.2.2.1. 見せる
OPTIONAL 要素には、エンティティまたは特定のリソースの特定の可用性ステータスを指定する、人間が判読できない XML 文字データが含まれます。プレゼンス スタンザには、複数の要素を含めてはなりません。要素は属性を所有してはなりません。提供される場合、XML 文字データ値は次のいずれかでなければなりません (追加の可用性タイプは、存在スタンザの適切な名前空間の子要素を介して定義できます)。
- 離れて -- エンティティまたはリソースは一時的に離れています。
- チャット -- エンティティまたはリソースは積極的にチャットに関心があります。
- dnd -- エンティティまたはリソースがビジーです (dnd = "Do Not Disturb")。
- xa -- エンティティまたはリソースが長期間不在です (xa = "eXtended Away")。
show 要素が指定されていない場合、エンティティはオンラインで利用可能であると見なされます。