package edu.harvard.econcs.turkserver.server; import java.util.Map; import javax.servlet.ServletException; import org.cometd.bayeux.server.ConfigurableServerChannel; import org.cometd.bayeux.server.ServerMessage; import org.cometd.bayeux.server.ServerSession; import org.cometd.annotation.Configure; import org.cometd.annotation.Listener; import org.cometd.annotation.Service; import org.cometd.server.authorizer.GrantAuthorizer; import edu.harvard.econcs.turkserver.Codec; public class GroupServlet extends SessionServlet { private static final long serialVersionUID = 8755450296324273985L; protected GroupServer theServer; @Override public void init() throws ServletException { super.init(); theServer = (GroupServer) getServletContext().getAttribute(SessionServer.ATTRIBUTE); processor.process(new LobbyService()); if (bayeux.getLogger().isDebugEnabled()) System.err.println(bayeux.dump()); } @Service("lobby") public class LobbyService { @Configure("/lobby") public void configureLobby(ConfigurableServerChannel channel) { channel.addAuthorizer(GrantAuthorizer.GRANT_SUBSCRIBE_PUBLISH); channel.setPersistent(true); } @Listener("/lobby") public boolean listenLobby(ServerSession session, ServerMessage message) { Map<String,Object> data = message.getDataAsMap(); if( data.containsKey("status") ) { // broadcast all join quit (or other) messages, once they are implemented return true; } else if( data.containsKey("ready") ) { return theServer.lobbyUpdate(session, data); } return true; } @Listener("/service/user") public void listenUser(ServerSession session, ServerMessage message) { Map<String,Object> data = message.getDataAsMap(); String status = data.get("status").toString(); if( Codec.usernameReply.equals(status) ) { String username = data.get("username").toString(); theServer.lobbyLogin(session, username); } } } }