| パッケージ | net.user1.reactor |
| クラス | public class MessageManager |
| 継承 | MessageManager Object |
| バージョン : | Reactor 1.0.0 |
MessageManagerクラスはクライアントとサーバー間のメッセージ送受信に関連した機能セットを提供します。 各コネクションはMessageManagerを一つだけ持ちます。これはReactorによって自動的に生成され、ReactorのgetMessageManager()メソッドを通してアクセスできます。
MessageManagerは次のタスクを実行するために使用します:
関連項目
| メソッド | 定義元 | ||
|---|---|---|---|
MessageManager(reactor:Reactor) MessageManagerのインスタンスを初期化します。 | MessageManager | ||
addMessageListener(message:String, listener:Function, forRoomIDs:Array = null):Boolean 特定の種類のメッセージをサーバーから受信したときに実行されるメソッドか関数(今後は"メッセージリスナー"と呼びます)を登録します。 | MessageManager | ||
dispose():void | MessageManager | ||
getNumMessagesReceived():int MessageManagerによって受信されたメッセージ数を返します。 | MessageManager | ||
getNumMessagesSent():int MessageManagerによって送信されたメッセージ数を返します。 | MessageManager | ||
getRemoveMessageListenersOnDisconnect():Boolean 自動的なメッセージリスナー除去が有効(true)か無効(false)かを示すBoolean値を返します。 | MessageManager | ||
getTotalMessages():int MessageManagerによって送受信されたメッセージ数を返します。 | MessageManager | ||
hasMessageListener(message:String, listener:Function):Boolean 指定したリスナー関数が指定したメッセージの通知メッセージを受信するように現在登録されているかどうかを示すBoolean値を返します。 | MessageManager | ||
removeMessageListener(message:String, listener:Function):Boolean 先にaddMessageListener()によってメッセージ通知に登録されたメッセージリスナーメソッドを登録解除します。 | MessageManager | ||
removeMessageListenersOnDisconnect(enabled:Boolean):void メッセージリスナーの自動除去を有効化あるいは無効化します。 | 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);theClient.sendMessage("PRIVATE_CHAT", message);
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 {
}
// 正しい(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メッセージオブジェクトです。 |