/* Written by Erik Krause, 2006. http://www.drivenbycuriosity.com/mywp * Free for use in a good home. */ import com.google.gwt.user.client.HTTPRequest; import com.google.gwt.user.client.ResponseTextHandler; import java.util.Vector; import java.util.List; public class ServerComm implements ResponseTextHandler { /* handles basic I/O with server * @gwt.typeArgs waitingReqs * @gwt.typeArgs workingReqs */ private final static ServerComm instance = new ServerComm(); private final static String url = "http://www.drivenbycuriosity.com/sample_files/ServerComm.php"; private static List waitingReqs = new Vector(); // objects wanting data from the server private static List workingReqs = new Vector(); // objects waiting for server response private static String waitingPost = ""; // data sent from an object to the server public interface ServerData { public String getTitle(); public void serverDataHandler(String[] s); } private ServerComm() { // weak version of a singleton that should be ok in a javascript environment } public static void requestUpdate(ServerData sd) { // add requester to waiting list waitingReqs.add(sd); // start a request if we aren't waiting for a response if (!pendingRequest()) { doRequest(); } } public static void requestUpdate(ServerData sd, String data) { // add string to waiting post data if (waitingPost.length() > 0) { waitingPost = waitingPost + "&"; } // note the following does no encoding of data whatsoever. extra ampersands will cause // problems and arbitrary data may have issues. waitingPost = waitingPost + "sender[]=" + sd.getTitle() + "&data[]=" + data; requestUpdate(sd); } private static boolean pendingRequest() { return (workingReqs.size()!=0); // have a request waiting if } private static void doRequest() { String addlPost = ""; // combine all requesters into a single post as they go from waiting to working for (int i=0; i * @gwt.typeArgs data */ public void onCompletion(String rt) { String[] response = rt.replaceAll("\r", "").split("\n"); List title = new Vector(); //[response.length]; List data = new Vector(); //String[response.length]; for (int i=0; i0) { /* deferred command might be better, although it doesn't work under win2k * currently because of the timer problem. */ // DeferredCommand.add(new Command() { // public void execute() { ServerComm.doRequest(); // } // }); } } }