ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

XMPPを利用したメッセージの送受信

XMPPとは

eXtensible Messaging and Presence Protocolの略
異なるサービス間でインスタントメッセージを送受信する為のXMLベースのプロトコル

web.xmlの設定

Servlet名とservlet-mappingを設定する。

	<servlet>
		<servlet-name>{SERVLETNAME}</servlet-name>
		<servlet-class>{PACKEGENAME}.{SERVLETNAME}Servlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>{SERVLETNAME}</servlet-name>
		<url-pattern>/_ah/xmpp/message/chat/</url-pattern>
	</servlet-mapping>
  1. GAEのchat urlは「/_ah/xmpp/message/chat/」

Servlet作成

Import

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.SendResponse.Status;
import com.google.appengine.api.xmpp.XMPPService;
import com.google.appengine.api.xmpp.XMPPServiceFactory;

メッセージの取得

doPostメッソドでResquesetをMessageへ変換する。
メッセージはfromid, toid, type, bodyで構成されており、
Messageより、取得判別が可能

req.setCharacterEncoding("UTF-8");
XMPPService xmppService = XMPPServiceFactory.getXMPPService();
//メッセージの変換
Message rcvMsg = xmppService.parseMessage(req);

//toIDの取得
JID toId = rcvMsg.getFromJid();
//fromIDの取得
JID[] fromID = rcvMsg.getRecipientJids();
//Message Bodyの取得
String strBody = rcvMsg.getBody();
  1. toIDの場合、貰った場合のfromIDが相手のIDとなる

メッセージの送信

MessageBuilderで送信用メッセージを作成する。

Message msg = new MessageBuilder().withFromJid(fromJid).withRecipientJids(toJid).withBody(”Message Text”).build();
Status status = xmppService.sendMessage(msg).getStatusMap().get(toJid);
if (!SendResponse.Status.SUCCESS.equals(status)) {
    //失敗の場合の処理
}

未確認

Chat Type : Presence, Subscriptionの使い方