Loading [MathJax]/extensions/tex2jax.js

2011-04-21

GWTでChannelAPIクライアントを実装する

昨日に引き続いて、Channel APIの話題です。ライブラリを使って意外と簡単にGWTで実装できましたので、取り急ぎ報告します。あ、まだGAE上では試してません。

gwt-gae-channelライブラリを使う
gwt-gae-channelプロジェクトというのがありますので、これを使いました。まだバージョン0.3αですがいちおう動くようです。なお、gwt.xmlファイルへの記述は、
  • <inherits name='com.google.gwt.appengine.channel.Channel' />
となります。
Tokenの入手
これは、前回の記事を参考にして、まずはTokenを入手してください。入手方法はお好きなように、、、まあ、GWTユーザならGWT-RPCを使うのが普通でしょう。
Channelの接続
ここで、gwt-gae-channelのライブラリを使います。以下のような記述でOK。
  1. ChannelFactory.createChannel(token, new ChannelCreatedCallback() {  
  2.             @Override  
  3.             public void onChannelCreated(Channel channel) {  
  4.                 channel.open(new SocketListener() {  
  5.                     @Override  
  6.                     public void onOpen() {  
  7.                         Window.alert("Channel opened!");  
  8.                     }  
  9.                     @Override  
  10.                     public void onMessage(String message) {  
  11.                         Window.alert("Received: " + message);  
  12.                     }  
  13.   
  14.                     @Override  
  15.                     public void onError(SocketError error) {  
  16.                         Window.alert("Error: " + error.getDescription());  
  17.                     }  
  18.   
  19.                     @Override  
  20.                     public void onClose() {  
  21.                         Window.alert("Channel closed!");  
  22.                     }  
  23.                 });  
  24.             }  
  25.         });  
この記述は、Tokenを入手した直後にするのが無難でしょう。接続が確立すると、onOpenメソッドが反応します。この処理を終えることで、サーバとのcomet接続が維持されます。

Pushの呼び出し
上記の処理が終えた後、サーバー側でpushをする処理(前日の記事を参照)を実行させれば、上記のonMessageが反応します。push処理の呼び出し方は、サーブレットでもいいし、GWT-RPCでもいいです。

正直、なんでこれでpushされてくるのかイマイチがところはあります(笑)。サンプルとか殆どないのでわかりにくいですが、cometのことがわかっていれば理解可能だと思います。

0 件のコメント:

コメントを投稿