|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
アドホック通信による連続データ転送に関するイベントのリスナを定義します。 アドホック通信による連続データ転送において、サーバとして振る舞うためには、 このリスナを実装する必要があります。
クライアント側からの
AdhocDataTransfer.setup(String adfURL,
String command, Hashtable params)
呼び出しにより、
この端末のこのアプリケーションが通信相手として指定された場合、
その時点でこのアプリケーションが実行中か否かにかかわらず、
このリスナが呼び出されます。
このアプリケーションが実行中である場合には即座にこのリスナが呼び出されます。
このアプリケーションが実行中でない場合には、
自動的にこのアプリケーションが起動し、
ADF の AppClass で指定された IApplication
のサブクラスがインスタンス化され、コンストラクタの処理が完了した後に、
このリスナが呼び出されます。
なお、システムによってこのリスナが呼び出される際には、
以下のような処理が行われます。
ここで、main は
IApplication.getCurrentApp() の戻り値を、
params は、クライアント側から渡された
Hashtable 型の引数を、それぞれ表します。
main
がこのインタフェースを実装しているかを検査する。
main
がこのインタフェースを実装していない場合、
即座にクライアント側にデータ転送要求を拒否する旨通知し、
リスナの呼び出し処理を終了する。main
がこのインタフェースを実装している場合、
((FelicaAdhocListener)main).requestReceived(params)
が呼び出される。((FelicaAdhocListener)main).requestReceived(params)
を呼び出した時の戻り値が true である場合はデータ転送要求承諾の旨を、
false である場合や戻り値が無かった
(例外が発生した)
場合にはデータ転送要求を拒否する旨を、それぞれクライアント側に通知する。
上記処理からも分かるように、このインタフェースは
ADF の AppClass キーによって指定されている
IApplication クラスのサブクラスにて実装しなければなりません。
IApplication
クラスのサブクラスがこのインタフェースを実装している場合のみ、
システムはこのインタフェースに定義されているメソッドを呼び出すことができます。
IApplication
クラスのサブクラス以外がこのインタフェースを実装しても、
システムはこのインタフェースに定義されているメソッドを呼び出すことができないことに注意してください。
加えて、データ転送要求を受け取った時点で、 以下の条件のいずれかを満たす場合は、アドホック通信を実施できないため、 このリスナは呼び出されずに、 クライアント側にはデータ転送要求を拒否する旨が通知されます。
| メソッドの概要 | |
boolean |
requestReceived(java.util.Hashtable receivedParams)
アドホック通信による連続データ転送において、 クライアント側より、 データ転送先のアプリケーションとして呼び出された場合にコールされます。 |
| メソッドの詳細 |
public boolean requestReceived(java.util.Hashtable receivedParams)
アドホック通信による連続データ転送において、 クライアント側より、 データ転送先のアプリケーションとして呼び出された場合にコールされます。
クライアント側が、
このアプリケーションがインストールされている端末に対して
AdhocDataTransfer.setup(String adfURL,
String command, Hashtable params)
を呼び出すことで、このメソッドがコールされますが、
このメソッドの引数 receivedParams には、
上記メソッドの引数 params
で指定された値がそのまま設定されています。
呼び出され方の詳細については、このインタフェースの説明も参照して下さい。
このアプリケーションが、データ転送要求を受けて起動した場合には、
このメソッドから参照可能な変数は、
起動時にインスタンス化される IApplication
のサブクラスのコンストラクタ呼び出しが完了した時点でアクセス可能なものに限られます。
このメソッドの実装者は、
クライアント側からのデータ転送要求を受け入れたい場合は、
このリスナが呼び出されたら、即座に true をリターンし、
速やかに FelicaServerObexConnection.accept()
を呼び出さなければなりません。
特に、true をリターンしてはじめて、クライアント側が
FelicaClientObexConnection.connect()
を呼び出すため、
以下のようなコードを書くとデッドロックすることに注意して下さい。
public boolean requestReceived(Hashtable receivedParams) {
FelicaServerObexConnection con =
(FelicaServerObexConnection)Connector.open("obex:/felicaserver");
con.accept(); // connect() されるまでブロックする
return true; // true をリターンしないと対向側は connect() してこない
}
なお、OBEX クライアント側の connect() は、
accept() が呼び出されるまでブロックするため、
connect() と accept() の順番は、
どちらが先になっても構いません。
従って、典型的には、このリスナの実装は以下のようになります。
public boolean requestReceived(Hashtable receivedParams) {
// 非同期に通信コード(accept() を含む)を呼び出す
(new Thread() {
public void run() {
doCommunicate();
}
}).start();
// true を返して、相手側からの connect() を待つ
return true;
}
private void doCommunicate() {
FelicaServerObexConnection con =
(FelicaServerObexConnection)Connector.open("obex:/felicaserver");
con.accept();
// 以下、クライアントとの通信コード
}
一方、クライアント側からのデータ転送要求を拒否したい場合には、 単純に false をリターンして下さい。
このメソッド実行中にキャッチされない例外が発生した場合には、 要求を拒否したものとして扱われます。
receivedParams - クライアント側からの、
データ転送リクエストに付随したパラメータが設定されています。
クライアント側からパラメータが設定されなかった(setup()
呼び出し時にサイズ 0 の Hashtable、または null が指定されていた)場合には
null が設定されています。
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
NTT DOCOMO,INC.
本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。
Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。
FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。
「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。
その他記載された会社名、製品名などは該当する各社の商標または登録商標です。