P2Pイベントハンドラ

クライアント同士のP2Pサービスを補助ためのイベントがこのイベントハンドラに実装されます。

例えばボイスチャットなどを実装する場合、P2Pデータチャンネルでのボイスチャット実行の前準備のために、XMPPサーバーを仲介して、クライアント同士が情報を交換します。


on_toward_user_iq

サーバーではなく、特定のユーザーに向けたIQを受け取ったときに、適切に配信するためのイベントです。

SYNOPSIS
sub 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
typeIQのtype
rawIQの中身

配送には次の配送リクエストビルダーを使います。宛先のチェックだけ行い、後のデータは基本コピーするだけでよいでしょう。

Ocean::Stanza::DeliveryRequestBuilder::TowardUserIQ

セッター名 概要
from送信者のFull JID
to宛先のFull JID
query_typeIQ type
request_idリクエストID
rawIQの中身