1 4 package nl.justobjects.pushlet.core; 5 6 import nl.justobjects.pushlet.util.Log; 7 8 import javax.servlet.http.HttpServletResponse ; 9 import java.io.IOException ; 10 import java.io.PrintWriter ; 11 import java.util.Iterator ; 12 13 19 public class BrowserAdapter implements ClientAdapter, Protocol { 20 21 public static final String START_DOCUMENT = 22 "<html><head><meta http-equiv=\"Pragma\" content=\"no-cache\"><meta http-equiv=\"Expires\" content=\"Tue, 31 Dec 1997 23:59:59 GMT\"></head>" 23 + "<body>" 24 + "\n<script language=\"JavaScript\"> var url=\" \"; \nfunction refresh() { document.location.href=url; }</script>"; 25 public static final String END_DOCUMENT = "</body></html>"; 26 27 private PrintWriter servletOut; 28 private HttpServletResponse servletRsp; 29 private int bytesSent; 30 31 32 public BrowserAdapter(HttpServletResponse aServletResponse) { 33 servletRsp = aServletResponse; 34 } 35 36 37 public void start() throws IOException { 38 servletRsp.setStatus(HttpServletResponse.SC_OK); 41 servletRsp.setContentType("text/html"); 42 43 servletOut = servletRsp.getWriter(); 46 send(START_DOCUMENT); 47 } 48 49 50 public void push(Event anEvent) throws IOException { 51 Log.debug("BCA event=" + anEvent.toXML()); 52 53 if (anEvent.getEventType().equals(Protocol.E_REFRESH)) { 55 long refreshWaitMillis = Long.parseLong(anEvent.getField(P_WAIT)); 61 62 String url = anEvent.getField(P_URL); 64 String jsRefreshTrigger = "\n<script language=\"JavaScript\">url=\"" + url + "\";\n setTimeout(\"refresh()\", " + refreshWaitMillis + ");\n</script>"; 65 66 67 send(jsRefreshTrigger + END_DOCUMENT); 68 } else { 69 send(event2JavaScript(anEvent)); 70 } 71 } 72 73 74 public void stop() { 75 servletOut = null; 77 } 78 79 80 protected void send(String s) throws IOException { 81 if (servletOut == null) { 84 throw new IOException ("Client adapter was stopped"); 85 } 86 87 servletOut.print(s); 88 89 servletOut.flush(); 90 91 servletRsp.flushBuffer(); 94 95 bytesSent += s.length(); 96 Log.debug("bytesSent= " + bytesSent); 97 } 99 100 101 protected String event2JavaScript(Event event) throws IOException { 102 103 String jsArgs = ""; 105 for (Iterator iter = event.getFieldNames(); iter.hasNext();) { 106 String name = (String ) iter.next(); 107 String value = event.getField(name); 108 String nextArgument = (jsArgs.equals("") ? "" : ",") + "'" + name + "'" + ", \"" + value + "\""; 109 jsArgs += nextArgument; 110 } 111 112 return "<script language=\"JavaScript\">parent.push(" + jsArgs + ");</script>"; 114 } 115 116 } 117 118 182 183 | Popular Tags |