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 ポスト
  • このエントリーをはてなブックマークに追加

サーバーからのメッセージ送信

 Google トークのセットアップが完了したら、XMPPでメッセージを送信するソースコードを見てみましょう。

JID jid = new JID("xxxxx@gmail.com");  // (1)
Message msg = new MessageBuilder().withRecipientJids(jid).withBody("メッセージ本文").build();  // (2)

XMPPService xmpp = XMPPServiceFactory.getXMPPService();  // (3)
SendResponse status = xmpp.sendMessage(msg);  // (4)

 大まかに次の流れでXMPPでメッセージ送信を行います。

  1. 送信先情報のインスタンスを生成
  2. メッセージ本文の作成
  3. XMPPServiceのインスタンス生成
  4. メッセージの送信

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

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

プロジェクトの作成

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

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

プログラムの作成

  プログラムは、ブラウザからGoogle App Engine上のプログラムにPOSTされたデータを、XMPPで「Google トーク」宛てにインスタントメッセージを送信する機能を実装します。

com.daisukeyamashita.test.xmpp.XmppServlet クラス
package com.daisukeyamashita.test.xmpp;

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 XmppServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");

        String to = request.getParameter("to");
        String body = request.getParameter("body");

        JID jid = new JID(to);
        Message msg = new MessageBuilder().withRecipientJids(jid)
                .withBody(body).build();
        boolean messageSent = false;

        XMPPService xmpp = XMPPServiceFactory.getXMPPService();
        if (!xmpp.getPresence(jid).isAvailable()) {
            response.getWriter().println("<h2>" + to + "は登録されていません。</h2>");
            return;
        }

        SendResponse status = xmpp.sendMessage(msg);
        messageSent = (status.getStatusMap().get(jid) == SendResponse.Status.SUCCESS);
        if (!messageSent) {
            response.getWriter().println("<h2>メッセージの送信に失敗しました。</h2>");
            return;
        }
        response.getWriter().println("<h2>メッセージを送信しました。</h2>");
    }
}

 [war/index.html]を以下のように書き換えます。

war/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    </head>

    <form action="/xmpp" method="post">
        <div>あて先:<input name="to"/></div>  
        <textarea name="body" rows="2" cols="40" ></textarea>
        <div><input type="submit" value="送信" /></div>
    </form>
</body>
</html>

 

次のページ
メッセージ送信プログラムの実行

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング