package net.thesocialos.server; import java.io.IOException; import java.util.Iterator; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.thesocialos.shared.ChannelApiEvents.ChApiChatUserConnected; import net.thesocialos.shared.model.User; import com.google.appengine.api.channel.ChannelPresence; import com.google.appengine.api.channel.ChannelService; import com.google.appengine.api.channel.ChannelServiceFactory; import com.googlecode.objectify.Key; import com.googlecode.objectify.Objectify; import com.googlecode.objectify.ObjectifyService; @SuppressWarnings("serial") public class ChannelConnect extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { ChannelService channelService = ChannelServiceFactory.getChannelService(); ChannelPresence presence = channelService.parsePresence(request); Objectify ofy = ObjectifyService.begin(); User user; try { // System.out.println(presence.clientId() + " connected"); user = UserHelper.getUserWithEmail(ChannelApiHelper.getUserForAppkey(presence.clientId()), ofy); } catch (Exception e) { return; } user.isConnected = true; ofy.put(user); sendConnectionToContacts(ofy.get(user.getContacts()).values().iterator(), user.getEmail()); } private void sendConnectionToContacts(Iterator<User> contacts, String email) { while (contacts.hasNext()) { User user = contacts.next(); if (user.isConnected) ChannelApiHelper.sendMessage(user.getEmail(), ChannelApiHelper.encodeMessage(new ChApiChatUserConnected(Key.create(User.class, email)))); } } }