1 4 package nl.justobjects.pushlet.servlet; 5 6 import nl.justobjects.pushlet.core.*; 7 import nl.justobjects.pushlet.util.Log; 8 import nl.justobjects.pushlet.util.Servlets; 9 import nl.justobjects.pushlet.util.PushletException; 10 import nl.justobjects.pushlet.Version; 11 12 import javax.servlet.ServletException ; 13 import javax.servlet.http.HttpServlet ; 14 import javax.servlet.http.HttpServletRequest ; 15 import javax.servlet.http.HttpServletResponse ; 16 import java.io.IOException ; 17 import java.io.InputStreamReader ; 18 import java.util.Enumeration ; 19 20 26 public class Pushlet extends HttpServlet implements Protocol { 27 28 public void init() throws ServletException { 29 Log.info("init() Pushlet Webapp - version=" + Version.SOFTWARE_VERSION + " built=" + Version.BUILD_DATE); 31 32 Config.load(); 34 35 Log.setLevel(Config.getIntProperty(Config.LOG_LEVEL)); 37 38 SessionManager.getInstance().start(); 40 41 Dispatcher.getInstance().start(); 43 44 45 if (Config.getBoolProperty(Config.SOURCES_ACTIVATE)) { 46 EventSourceManager.start(); 47 } else { 48 Log.info("Not starting local event sources"); 49 } 50 } 52 53 public void destroy() { 54 Log.info("destroy(): Exit Pushlet webapp"); 55 56 if (Config.getBoolProperty(Config.SOURCES_ACTIVATE)) { 57 EventSourceManager.stop(); 59 } else { 60 Log.info("No local event sources to stop"); 61 } 62 63 Dispatcher.getInstance().stop(); 65 66 SessionManager.getInstance().stop(); 68 } 69 70 71 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 72 Event event = null; 73 74 try { 75 String eventType = Servlets.getParameter(request, P_EVENT); 77 78 if (eventType == null) { 80 Log.warn("Pushlet.doGet(): bad request, no event specified"); 81 response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No eventType specified"); 82 return; 83 } 84 85 event = new Event(eventType); 87 for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { 88 String nextAttribute = (String ) e.nextElement(); 89 event.setField(nextAttribute, request.getParameter(nextAttribute)); 90 } 91 92 93 } catch (Throwable t) { 94 Log.warn("Pushlet: Error creating event in doGet(): ", t); 96 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 97 return; 98 } 99 100 doRequest(event, request, response); 102 103 } 104 105 106 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 107 Event event = null; 108 try { 109 event = EventParser.parse(new InputStreamReader (request.getInputStream())); 111 112 if (event.getEventType() == null) { 114 Log.warn("Pushlet.doPost(): bad request, no event specified"); 115 response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No eventType specified"); 116 return; 117 } 118 119 120 } catch (Throwable t) { 121 Log.warn("Pushlet: Error creating event in doPost(): ", t); 123 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 124 return; 125 } 126 127 doRequest(event, request, response); 129 130 } 131 132 133 protected void doRequest(Event anEvent, HttpServletRequest request, HttpServletResponse response) { 134 String eventType = anEvent.getEventType(); 136 try { 137 138 Session session = null; 141 if (eventType.startsWith(Protocol.E_JOIN)) { 142 session = SessionManager.getInstance().createSession(anEvent); 144 145 String userAgent = request.getHeader("User-Agent"); 146 if (userAgent != null) { 147 userAgent = userAgent.toLowerCase(); 148 } else { 149 userAgent = "unknown"; 150 } 151 session.setUserAgent(userAgent); 152 153 } else { 154 156 String id = anEvent.getField(P_ID); 158 159 if (id == null) { 161 response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No id specified"); 162 Log.warn("Pushlet: bad request, no id specified event=" + eventType); 163 return; 164 } 165 166 session = SessionManager.getInstance().getSession(id); 168 169 if (session == null) { 171 response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid or expired id"); 172 Log.warn("Pushlet: bad request, no session found id=" + id + " event=" + eventType); 173 return; 174 } 175 } 176 177 179 Command command = Command.create(session, anEvent, request, response); 182 session.getController().doCommand(command); 183 } catch (Throwable t) { 184 Log.warn("Pushlet: Exception in doRequest() event=" + eventType, t); 186 t.printStackTrace(); 187 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 188 return; 189 } 190 191 } 192 } 193 194 195 271 272 | Popular Tags |