いつの間にかこんなことが出来るようになっていた。去年(?)ぐらいから軽くGAEに触り、最近面白さをしってどんどん開発しているのですがこんなことは出来なかったような。
公式からはポーリング(定期的にデータを送信)でなんとかしてくれ。みたいなことが書かれてたような。
というわけでやり方をさっくり説明します。
Channel API Overview (Java)の「Tracking Client Connections and Disconnections」の意訳になりますかね。
ここではChannel APIが何かは説明しませんので。(もし質問があればTwitterで)
それでは説明
とりあえず war/WEB-INF/appengine-web.xmlに
<inbound-services>
<service>channel_presence</service>
</inbound-services>
これを追記しましょう。
<appengine-web-app xmlns=”http://appengine.google.com/ns/1.0″>
・・・・・
・・・・・
<inbound-services>
<service>channel_presence</service>
</inbound-services>
</appengine-web-app>
こんな感じで。
そうすると
Channel APIの接続があった場合 “/_ah/channel/connected/”
Channel APIの切断があった場合 “/_ah/channel/disconnected/”
にデータがPOSTされるようです。
web.xmlでここにサーブレッドプログラムを置いておきましょう。
Javaxのやつの場合はdoPostメソッドで取得できますね。
要するに “/_ah/channel/disconnected/” のサーブレッドに
import javax.servlet.http.*;
import com.google.appengine.api.channel.*;
@SuppressWarnings(“serial”)
public class Disconnected extends HttpServlet {
ChannelService channelService = ChannelServiceFactory.getChannelService();
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException{
ChannelPresence presence = channelService.parsePresence(req);
//このときpresenceに切断したユーザーのデータが入っています。詳しくはメンバ変数、メンバメソッドを各自ご確認ください。
//ここ以下でpresenceをつかって動作内容を記述する。ここでは切断したユーザーのIDを表示するだけ。
System.out.println(presence.clientId());
//以下動作内容をちょめちょめする。
}
}
これを置いておけば切断されたときにメッセージが出ます。が、デプロイ後はもちろん見れません(笑)
適当に解説を書きましたがわからない方はTwitterでご連絡をください。気まぐれですが説明します。
なお、Axe1lyzeは現在楽しく協力開発出来る人を募集しています!どんどん声をかけてね!
勉強中の人でもいいですよ!自分も勉強中なので(笑)