パッケージnet.user1.reactor
クラスpublic class MessageManager
継承MessageManager Inheritance Object

バージョン : Reactor 1.0.0

MessageManagerクラスはクライアントとサーバー間のメッセージ送受信に関連した機能セットを提供します。 各コネクションはMessageManagerを一つだけ持ちます。これはReactorによって自動的に生成され、ReactorのgetMessageManager()メソッドを通してアクセスできます。

MessageManagerは次のタスクを実行するために使用します:

関連項目

addMessageListener()
sendUPC()


パブリック メソッド
 メソッド定義元
  
MessageManagerのインスタンスを初期化します。
MessageManager
  
addMessageListener(message:String, listener:Function, forRoomIDs:Array = null):Boolean
特定の種類のメッセージをサーバーから受信したときに実行されるメソッドか関数(今後は"メッセージリスナー"と呼びます)を登録します。
MessageManager
  
dispose():void
MessageManager
  
MessageManagerによって受信されたメッセージ数を返します。
MessageManager
  
MessageManagerによって送信されたメッセージ数を返します。
MessageManager
  
自動的なメッセージリスナー除去が有効(true)か無効(false)かを示すBoolean値を返します。
MessageManager
  
MessageManagerによって送受信されたメッセージ数を返します。
MessageManager
  
hasMessageListener(message:String, listener:Function):Boolean
指定したリスナー関数が指定したメッセージの通知メッセージを受信するように現在登録されているかどうかを示すBoolean値を返します。
MessageManager
  
removeMessageListener(message:String, listener:Function):Boolean
先にaddMessageListener()によってメッセージ通知に登録されたメッセージリスナーメソッドを登録解除します。
MessageManager
  
メッセージリスナーの自動除去を有効化あるいは無効化します。
MessageManager
  
sendUPC(m:String, ... rest):void
UPCフォーマットのメッセージを生成し、サーバーに送信します。
MessageManager
  
sendUPCObject(upc:UPC):void
渡されたUPCオブジェクトに基づいたUPCフォーマットのメッセージをサーバーに送信します。
MessageManager
コンストラクタの詳細
MessageManager()コンストラクタ
public function MessageManager(reactor:Reactor)

MessageManagerのインスタンスを初期化します。 各コネクションのMessageManagerインスタンスは自動的に生成される点に注意してください。 MessageManagerインスタンスを手動で生成しないでください。

パラメータ
reactor:Reactor — このMessageManagerを生成したReactorインスタンスです。
メソッドの詳細
addMessageListener()メソッド
public function addMessageListener(message:String, listener:Function, forRoomIDs:Array = null):Boolean

バージョン : Reactor 1.0.0

特定の種類のメッセージをサーバーから受信したときに実行されるメソッドか関数(今後は"メッセージリスナー"と呼びます)を登録します。 このメッセージはビルトインのUPCメッセージか、サーバー側のモジュールか他のアカウントからRoom、RoomManager、Client、ClientManagerあるいはServerクラスのsendMessage()メソッドを通して送信される自作のメッセージです。 メッセージリスナーは追加順に実行されます。

例えば、次のコードはdisplayPrivateMessageというメソッドを登録し、他のクライアントからの"PRIVATE_CHAT"と名付けられたメッセージを受信します:

messageManager.addMessageListener("PRIVATE_CHAT", displayPrivateMessage);
次のコードはsendMessage()を通して"PRIVATE_CHAT"メッセージをtheClientに送信します。
theClient.sendMessage("PRIVATE_CHAT", message);
次のコードはdisplayPrivateChat()メソッドを示します。このメソッドは受信した"PRIVATE_CHAT"メッセージを制御します。
    
     protected function displayPrivateChat (client:IClient, 
                                            msg:String):void {
       privateChatField.text = "Private message from: " + client.getClientID() 
                             + ": " + msg);
     }
     

通常は、MessageManagerのaddMessageListener()メソッドはRoomのsendMessage()メソッドを通して送信されたメッセージのリスナー登録には使用しません。 RoomのsendMessage()を通して単一のルームに送信されたメッセージは通常、MessageManagerのaddMessageListener()のかわりにRoomクラスのaddMessageListener()メソッドを使用して登録されたリスナーによって制御されます。 Roomクラス版のaddMessageListener()はMessageManagerのaddMessageListener()によって提供される機能の便利なラッパーを提供します。

MessageManagerのaddMessageListener()メソッドはルームのグループについてメッセージを一元的に制御するためのリスナーを登録するために使用できます。 たとえば、複数のルームをもつチャットアプリケーションが、どれかのルームで新たなメッセージを受信したときに通知アイコンを表示するとします。 全ルームに送られてくる全メッセージを捕捉するには、全ての"CHAT"メッセージに対しての中央管理的なメソッドを一つだけ登録します。 こちらがその登録コードになります。

msgManager.addMessageListener(Messages.CHAT, centralChatListener);

するとcentralChatListener()はMessages.CHATメッセージがいずれかのルームに送信されるといつでも実行されます。

各チャットメッセージを適切なルームに表示するには、個別のルームに対してもMessage.CHATメッセージを登録します。 例えば、次のコードによってroomOneにMessages.CHATメッセージが送信されるといつでもroomOneChatListener()が実行されるようになります。

roomOne.addMessageListener(Messages.CHAT, roomOneChatListener);

roomOneに各チャットメッセージが送信され、そのため、centralChatListener()とroomOneChatListener()の両方をトリガーし、各メソッドにそれぞれの方法でメッセージを制御させます。

与えられたメッセージを限定されたルームの組でのみ制御するリスナーを登録するには、forRoomIDsパラメーターを使用します。 たとえば、現クライアントが"chat1", "chat2", "chat3"に入室しているとします。 ルーム内の誰かによって"WINK"メッセージが時折それらのルームのどれかに送られてくるとします。 "chat1"と"chat2"ルームに送信される"WINK"メッセージにメッセージリスナーを登録し、ただし"chat3"については登録しないようにするためには、次のコードを使用します(3番目の引数forRoomIDsに注目してください)。

     messageManager().addMessageListener("WINK", 
                                         winkListener,
                                         ["chat1", "chat2"]);
     

このコードは"chat3"ルームの入室者から"ウィンクを無効化"するGUIオプションを実装するために使用できるでしょう。

次がwinkListener()メソッドのコードです。 これの二つ目の引数(toRoom)が、メッセージを送信されたルームへの参照を受け取る点に留意してください。

     private function winkListener (client:IClient,
                                    toRoom:Room):void {
      // ここに画面にウィンクを表示するコードを書くことになります
     }
     

MessageManagerのaddMessageListener()メソッドを通して登録されたメッセージリスナーは次のように、受信メッセージについて正しい数と型のパラメータを必ず定義する必要があります。

高度なメモ: メッセージリスナーの最初の引数("from client")のデータ型は通常はIClientですが、これはより細かく指定できます。 もし"from client"がそのメッセージを受信するルームに自作クライアントクラスを登録していれば、リスナーの最初の引数はその自作クライアントクラス型にできます。

例えば、チャットとチェスのハイブリッドなアプリケーションを想像してください。ユーザーは敵の手を待つ間にチャットできます。 チェスルームの入室者として、ユーザーのクライアントはChessClientクラスとして表されます。 ChessClientクラスは次のコードで登録します。

     reactor.self().setClientClass("ChessClient", chessRoom);
     

チャット中は、ユーザーは相手が指したときにはアラートを受信したいので、Messages.MOVEメッセージの集権リスナーを登録します:

     msgManager.addMessageListener(Messages.MOVE,
                                   moveAlertListener);
     

先のコード内では、addMessageListener()の呼び出しはforRoomIDsの引数を渡していない点に留意してください。そのためmoveAlertListener()はMessages.MOVEが現クライアントが入室中か観察しているいずれかのルームに送信されると常にトリガーされます。 相手が指したとき、相手のクライアントは"games.chessRoom"ルームに次のメッセージを送信します:

     chessRoom.sendMessage(Messages.MOVE, false, null, piece, coords);
     

moveAlertListener()メソッドはこのメッセージを受信した時に起動します。 このメッセージはchessRoomに送信されたため、送信者は自動的にChessClientクラスとして表されます。それにより最初のパラメータのデータ型はChessClientにセットできます。 するとmoveAlertListener()メソッドはChessClientクラスのメソッド、たとえば、相手のランキングを表示するといったものをチャットのインターフェースから抜けることさえなしに使用できます。

     private function moveAlertListener (client:ChessClient, 
                                         piece:String,
                                         coords:String):void {
       alertField.text = client.getName() + " (Ranking: " 
                       + client.getRanking() + ") just moved!";
     }

自作クライアントクラスについてのより詳しい情報は、ClientクラスのsetClientClass()メソッドを参照してください。

メモ: メッセージリスナー用に必須のIClientパラメータの提供に失敗すると、次のような引数エラーを引き起こします:
     Error: A message listener for incoming message [CHAT_MESSAGE], received 
     from client [291], encountered an argument error:
     
     ArgumentError: Error #1063: UnionChatPart1/chatMessageListener() 
     の引数の数が一致していません。1 が必要ですが、2 が指定されました。
     
     Ensure that all [CHAT_MESSAGE] listeners supply a first parameter whose 
     datatype is IClient (あるいは互換性のある型). Listeners that registered for
     the message via MessageManager's addMessageListener() method with anything 
     other than a single roomID for the toRoomIDs parameter must define a second 
     paramter whose datatype is Room (あるいは互換性のある型). Finally, ensure 
     that the listeners declared message parameters match the following actual 
     message arguments:
         hello world
     
     Stack trace follows:
       at CoreMessageListener/u7()[/net/user1/reactor/CoreMessageListener.as:269]
       at Function/http://adobe.com/AS3/2006/builtin::apply()
       at net.user1.reactor::MessageManager/notifyMessageListeners()[/net/user1/reactor/MessageManager.as:666]
       at net.user1.reactor::MessageManager/upcReceivedListener()[/net/user1/reactor/MessageManager.as:266]
       at flash.events::EventDispatcher/dispatchEventFunction()
       at flash.events::EventDispatcher/dispatchEvent()
       at net.user1.reactor::XMLSocketConnection/dataListener()[/net/user1/reactor/XMLSocketConnection.as:225]
       at flash.events::EventDispatcher/dispatchEventFunction()
       at flash.events::EventDispatcher/dispatchEvent()
       at flash.net::XMLSocket/scanAndSendEvent()
     

メッセージリスナーの引数エラーを修正するには、要求されるIClientパラメータと、必要なら、要求されるRoomパラメータを追加してください。 例えば、次のリスナーのコードは必須のIClientパラメータが欠如しているためにエラーを生成するでしょう:

     // 正しくない:
     protected function chatMessageListener (messageText:String):void {
     }
     
次のコードはIClientパラメータを追加することによって上のエラーを修正します:
     // 正しい(fromClientパラメータの追加に留意してください):
     protected function chatMessageListener (fromClient:IClient,
                                             messageText:String):void {
     }
     

パラメータ

message:String — リスナーが受信用に登録するメッセージ名です。
 
listener:Function — 指定したメッセージを受信したときに起動する関数あるいはメソッドです。 リスナーのパラメーターに要求されるデータタイプを記述するルールはドキュメントのaddMessageListener()メソッドの項目にリストされています。
 
forRoomIDs:Array (default = null) — ルームIDのリストです。 もしメッセージがこのリストにあるルームのどれか一つにでも送られれば、このリスナーが実行されます。 そうでない場合、このリスナーは実行されません。 ルームに送信されたメッセージにのみ適用されます。特定のクライアントやサーバー全体へ送信されたメッセージには適用されません。

戻り値
Boolean — 登録が成功の場合はtrue、それ以外の場合はfalseです。 指定のリスナーが既に登録されている場合はfalseを返します。

関連項目

dispose()メソッド 
public function dispose():void

getNumMessagesReceived()メソッド 
public function getNumMessagesReceived():int

バージョン : Reactor 1.0.0

MessageManagerによって受信されたメッセージ数を返します。 統計追跡とロードテストに使用されます。

戻り値
int

関連項目

getNumMessagesSent()メソッド 
public function getNumMessagesSent():int

バージョン : Reactor 1.0.0

MessageManagerによって送信されたメッセージ数を返します。 統計追跡とロードテストに使用されます。

戻り値
int

関連項目

getRemoveMessageListenersOnDisconnect()メソッド 
public function getRemoveMessageListenersOnDisconnect():Boolean

バージョン : Reactor 1.0.0

自動的なメッセージリスナー除去が有効(true)か無効(false)かを示すBoolean値を返します。

戻り値
Boolean — trueかfalseのBoolean値です。

関連項目

getTotalMessages()メソッド 
public function getTotalMessages():int

バージョン : Reactor 1.0.0

MessageManagerによって送受信されたメッセージ数を返します。 統計追跡とロードテストに使用されます。

戻り値
int

関連項目

hasMessageListener()メソッド 
public function hasMessageListener(message:String, listener:Function):Boolean

バージョン : Reactor 1.0.0

指定したリスナー関数が指定したメッセージの通知メッセージを受信するように現在登録されているかどうかを示すBoolean値を返します。

パラメータ

message:String — UnionメッセージのストリングIDです。
 
listener:Function — 関数かメソッドです。

戻り値
Boolean

関連項目

removeMessageListener()メソッド 
public function removeMessageListener(message:String, listener:Function):Boolean

バージョン : Reactor 1.0.0

先にaddMessageListener()によってメッセージ通知に登録されたメッセージリスナーメソッドを登録解除します。 デフォルトでは、全てのメッセージリスナーはサーバー接続が切断されたときに自動的に除去される点に注意してください。

パラメータ

message:String — このリスナーが登録を解除するメッセージのストリングIDです。
 
listener:Function — 登録解除する関数あるいはメソッドです。

戻り値
Boolean — リスナーの除去に成功したかどうかを示すBoolean値です。

関連項目

removeMessageListenersOnDisconnect()メソッド 
public function removeMessageListenersOnDisconnect(enabled:Boolean):void

バージョン : Reactor 1.0.0

メッセージリスナーの自動除去を有効化あるいは無効化します。 デフォルトでは、サーバー接続が切断されたとき、MessageManagerは自動的に全ての登録済みメッセージリスナーを除去します。 この自動除去は、接続が回復したときにリスナーが取り残されてしまって意図しない効果を引き起こすことを防ぎます。 メッセージリスナーの自動除去を無効化するには、removeMessageListenersOnDisconnect()にfalseを渡します。 メッセージリスナーの自動除去が無効のときは、切断時に全ての不要なメッセージリスナーを手動で除去するように気をつけてください。

パラメータ

enabled:Boolean — trueならば、メッセージリスナーの自動除去が有効化されます。 falseならば、メッセージリスナーの自動除去は無効化されます。

関連項目

sendUPC()メソッド 
public function sendUPC(m:String, ... rest):void

バージョン : Reactor 1.0.0

UPCフォーマットのメッセージを生成し、サーバーに送信します。 このメソッドは内部的にUPCフォーマットのメッセージをサーバーに送信するために使用されます。 サーバーからの全てのUPCフォーマットのレスポンスがConnectionEvent.RECEIVED_UPCイベントをトリガーします。

sendUPC()パラメータ m はUPCメッセージ内の<m>要素の値を指定します。残りの全てのパラメータはUPCメッセージの<a>要素の値を指定します。

UPCフォーマットのメッセージについての完全な詳細についてはUPC仕様を参照してください。

パラメータ

m:String — メッセージ名です。
 
... rest — メッセージの引数です。

関連項目

sendUPCObject()メソッド 
public function sendUPCObject(upc:UPC):void

渡されたUPCオブジェクトに基づいたUPCフォーマットのメッセージをサーバーに送信します。

パラメータ

upc:UPC — UPCメッセージオブジェクトです。