メッセージ配信に関するイベントはMessageイベントカテゴリとなり、Messageイベントハンドラで実装します。
メッセージの送信リクエストのイベントです。
実装例は次のようになります。ここではそのまま配送するのみになっていますが、「スパム対策などのため、友人にしかメッセージを送らせないようにする」というような仕様にしたい場合には、検証処理を入れておくとよいでしょう。
SYNOPSISsub on_message { 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 @conns = $ctx->get('db')->search_available_connection_by_username( $receiver_jid->node ); for my $conn ( @conns ) { my $builder = Ocean::Stanza::DeliveryRequestBuilder::ChatMessage->new; my $to_jid = Ocean::JID->build( $conn->username, $self->domain, $conn->resource, ); $builder->to($to_jid); $builder->from($sender_jid); $builder->body($args->body); $builder->html($args->html); $builder->thread($args->thread); $builder->state($args->state); $ctx->deliver($builder->build()); } }
引数としてOcean::HandlerArgs::Messageを受け取ります。このオブジェクトは次のアクセサを持ちます。
アクセサ名 | 概要 |
---|---|
from | 送信者のFull JID |
to | 宛先のJID。Bare JIDの場合とFull JIDの場合があります。 |
body | メッセージ本文 |
thread | スレッドコード |
state | ステートタイプ。プロトコルガイド - 拡張 [ Chat State ]を参照して下さい。 |
html | HTMLバージョンの本文。プロトコルガイド - 拡張 [ XHTML IM ]を参照して下さい。 |
一般的には、適切な相手に、そのままメッセージを配信するだけの処理になります。Ocean::Stanza::DeliveryRequestBuilder::ChatMessageを利用するとよいでしょう。
セッター名 | 概要 |
---|---|
from | 送信者のJID |
to | 宛先のFull JID |
body | メッセージ本文 |
subject | メッセージタイトル |
thread | スレッドコード |
state | ステートタイプ。プロトコルガイド - 拡張 [ Chat State ]を参照して下さい。 |
html | HTMLバージョンの本文。プロトコルガイド - 拡張 [ XHTML IM ]を参照して下さい。 |