nodes()


説明

接続中のノード番号一覧を取得します。

構文
@nodes = nodes()
Perl

引数

ありません。

返り値
@nodes : ノードリスト
         ( データ型: 配列,: 接続したノード番号, 順序: 接続順 )
       = ( nodeno, nodeno, ... )
Perl

備考

ノードがBBS.pmに接続またはBBS.pmから切断すると接続ステータスが更新され、 本関数を呼び出することで接続するノードと接続順を得ることができます。

接続ステータスの更新はonConnectハンドラが呼び出される直前、または、 onDisconnectハンドラが呼び出される直前で行われます。

onDisconnectハンドラから削除対象のノード番号は関数from()で取得することはできますが、 削除対象のノード番号はonDisconnectハンドラが呼び出される前に接続リストから除去されるため、 呼び出されたonDisconnectハンドラから本関数を呼び出しても取得することはできません。

sub ondisconnect {
  my $self = shift;
  my $me = $self->from();            # 切断するノード番号を得ることは可能
  my @nodes = $self->nodes();        # サーバに接続する全ノード番号のリストを取得しても
                                     # 取得する配列には切断するノード番号が除外されているため
                                     # 接続順位を得ることはできない
Perl

用例

チャットなど、あるノードのメッセージを接続する全てのノードに送信するような場合は、次のようになります。

$chat->broadcast('Hello');                 # メッセージを一斉送信

sub broadcast {
  my $self = shift;                        # chatオブジェクト
  my $msg = shift;                         # メッセージ
  my $me = $self->from();                  # 発言者のノード番号を得る
  my @listener = $self->nodes();           # サーバに接続する全ノード番号のリストを得る

while (my $to = shift( @lintener ) ) {     # 受け手のノード番号をリストから得る
  next if ( $me == $to );                  # 発言者と受け手のノード番号が同じなら次の受け手へ
  $self->send( $msg, $to );                # 聴衆者にメッセージを送信(発言者と受け手のノード番号が違うなら)
}
Perl
Task Runner