// Copyright 2008 Google Inc. All rights reserved.
package com.google.appengine.demos.helloxmpp;
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.MessageType;
import com.google.appengine.api.xmpp.Presence;
import com.google.appengine.api.xmpp.SendResponse;
import com.google.appengine.api.xmpp.XMPPService;
import com.google.appengine.api.xmpp.XMPPServiceFactory;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* HelloXmpp is an echo bot that sends back the message it receives.
*/
public class HelloXmpp extends HttpServlet {
private XMPPService xmppService;
@Override
public void init() {
this.xmppService = XMPPServiceFactory.getXMPPService();
}
// For testing. Real requests are POST
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException {
Message message =new MessageBuilder()
.withMessageType(MessageType.CHAT)
.withFromJid(new JID(req.getParameter("from")))
.withRecipientJids(new JID(req.getParameter("to")))
.withBody(req.getParameter("body"))
.build();
processMessage(message, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException {
processMessage(xmppService.parseMessage(req), res);
}
public void processMessage(Message message, HttpServletResponse res) throws IOException {
JID fromId = message.getFromJid();
Presence presence = xmppService.getPresence(fromId);
String presenceString = presence.isAvailable() ? "" : "not ";
SendResponse response = xmppService.sendMessage(
new MessageBuilder().
withBody(message.getBody() + " (you are " + presenceString + "available)").
withRecipientJids(fromId).
build());
for (Map.Entry<JID, SendResponse.Status> entry :
response.getStatusMap().entrySet()) {
res.getWriter().println(entry.getKey() + "," + entry.getValue() + "<br>");
}
res.getWriter().println("processed");
}
}