クライアント同士のP2Pサービスを補助ためのイベントがこのイベントハンドラに実装されます。
例えばボイスチャットなどを実装する場合、P2Pデータチャンネルでのボイスチャット実行の前準備のために、XMPPサーバーを仲介して、クライアント同士が情報を交換します。
サーバーではなく、特定のユーザーに向けたIQを受け取ったときに、適切に配信するためのイベントです。
SYNOPSISsub on_toward_user_iq {
my ($self, $ctx, $args) = @_;
my $sender_jid = $args->from;
my $receiver_jid = $args->to;
my $receiver =
$ctx->get('db')->find_user_by_username($receiver_jid->node);
return unless $receiver;
my $builder =
Ocean::Stanza::DeliveryRequestBuilder::TowardUserIQ->new;
$builder->to($receiver_jid);
$builder->from($sender_jid);
$builder->query_type($args->type);
$builder->request_id($args->id);
$builder->raw($args->raw);
$ctx->deliver($builder->build());
}
引数としてOcean::HandlerArgs::TowardUserIQを受け取ります。このオブジェクトは次のアクセサを持ちます。
| アクセサ名 | 概要 |
|---|---|
| from | 送信者のFull JID |
| to | 宛先のFull JID |
| id | リクエストID |
| type | IQのtype |
| raw | IQの中身 |
配送には次の配送リクエストビルダーを使います。宛先のチェックだけ行い、後のデータは基本コピーするだけでよいでしょう。
| セッター名 | 概要 |
|---|---|
| from | 送信者のFull JID |
| to | 宛先のFull JID |
| query_type | IQ type |
| request_id | リクエストID |
| raw | IQの中身 |