SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Google App Engine for Javaを使ってみよう!

Google App Engine for Javaを使ってみよう!
(9)XMPP Java API

Google App Engine for Javaを使ってみよう! (9)

  • X ポスト
  • このエントリーをはてなブックマークに追加

メッセージの受信

 XMPPでメッセージを受信するソースコードを見てみましょう。

XMPPService xmpp = XMPPServiceFactory.getXMPPService();  // (1)
Message message = xmpp.parseMessage(request);  // (2)
String id = "[FROM]" + message.getFromJid();  // (3)
String msgBody = "[BODY]" + message.getBody();  // (4)

 大まかな、XMPPで受信したメッセージの処理方法は以下の通りです。

  1. XMPPServiceのインスタンス取得
  2. HttpServletRequestからメッセージ情報を取得
  3. 送信者の取得
  4. メッセージ本文の取得

 次節から、具体的にサンプルプログラムを作成して検証していきます。

メッセージ受信プログラムの実装

プロジェクトの作成

 まずは、以下の設定でApp Engineのプロジェクトを作成してください。今回はGWTを利用しませんので、Use Google Web Toolkitのチェックはハズして下さい(第2回の解説を参照して下さい)。また、日本語(2バイトコード)を扱いたいので、言語設定を必ず[UTF-8]に設定してください。

プロジェクトの設定(言語設定はUTF-8に)
Project name XmppReceiver
Package com.daisukeyamashita.test.xmppreceiver

プログラムの作成

 プログラムは、サーバーで受信したメッセージを送信元に送り返す機能を実装します。

com.daisukeyamashita.test.xmppreceiver.XmppReceiverServlet クラス
package com.daisukeyamashita.test.xmppreceiver;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.xmpp.JID;
import com.google.appengine.api.xmpp.Message;
import com.google.appengine.api.xmpp.MessageBuilder;
import com.google.appengine.api.xmpp.SendResponse;
import com.google.appengine.api.xmpp.XMPPService;
import com.google.appengine.api.xmpp.XMPPServiceFactory;

@SuppressWarnings("serial")
public class XmppReceiverServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        request.setCharacterEncoding("UTF-8");
        XMPPService xmpp = XMPPServiceFactory.getXMPPService();
        Message message = xmpp.parseMessage(request);

        JID jid = message.getFromJid();
        Message msg = new MessageBuilder().withRecipientJids(jid).withBody(
                message.getBody()).build();

        SendResponse status = xmpp.sendMessage(msg);
        boolean messageSent = (status.getStatusMap().get(jid) == SendResponse.Status.SUCCESS);
        if (!messageSent) {
            System.err.println("メッセージの送信に失敗しました:" + jid);
        }
    }
}

 [war/WEB-INF/appengine-web.xml]の一番下にある</appengine-web-app>の直前に以下の3行を挿入します。

war/WEB-INF/appengine-web.xml
    <inbound-services>
        <service>xmpp_message</service>
    </inbound-services>

 [war/WEB-INF/web.xml]の一番下にある</web-app>の直前に以下の3行を挿入します。

war/WEB-INF/web.xml
	<servlet>
		<servlet-name>XmppReceiver</servlet-name>
		<servlet-class>com.daisukeyamashita.test.xmppreceiver.XmppReceiverServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>XmppReceiver</servlet-name>
		<url-pattern>/_ah/xmpp/message/chat/</url-pattern>
	</servlet-mapping>

メッセージ受信プログラムの実行

 これまでの手順で、サーバーが受信したインスタントメッセージをクライアントに送りなおすプログラムが完成しました。

 プログラムのデプロイが完了したら、クライアントソフトからサーバーにメッセージを送信します。

 すると、以下のようにすぐに同じメッセージがサーバーから送られてきます。

まとめ

 今回はXMPP Java APIを勉強しましたが、いかがでしたでしょうか? 今回の記事で、Google App EngineでXMPPを簡単に使えることが分かっていただけたかと思います。

 サーバーのXMPP IDは、アプリケーションID@appspot.com以外に任意の文字列@アプリケーションID.appspotchat.comも利用することができます。ユーザごとにIDを分けたりすることができるので、アイディア次第で面白いことができると思います。興味のある方は、試してみてはいかがでしょうか?

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Google App Engine for Javaを使ってみよう!連載記事一覧

もっと読む

この記事の著者

山下 大介(ヤマシタ ダイスケ)

  京都大学を中心とした、産官学共同プロジェクトのSOBAプロジェクトに参加後、同プロジェクトで開発したP2P配信によるVoIP技術を2005年に商業化。オープンソース、VoIP、P2P、クラウドコンピューティングに精通。趣味はGoogleの追っかけ。現在は、株式会社SOBAプロジェクト取締役。ブログ:『~ ミネルヴァの梟は黄昏とともに飛び始める ~』所属:株式会社SOBAプロジェクトGoogle Developer Day 2008サポーター, 2009サポーターGoogle App Engine API Expert

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4149 2010/01/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング