Mega Code Archive

 
Categories / Java / J2ME
 

Patchy MIDlet

/* Wireless Java 2nd edition  Jonathan Knudsen Publisher: Apress ISBN: 1590590775  */ import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.pki.*; public class PatchyMIDlet extends MIDlet implements CommandListener, Runnable {   private Display mDisplay;   private Form mForm;      private ServerSocketConnection mServerSocketConnection;   private boolean mTrucking = true;      public void startApp() {     mDisplay = Display.getDisplay(this);          if (mForm == null) {       mForm = new Form("PatchyMIDlet");          mForm.addCommand(new Command("Exit", Command.EXIT, 0));       mForm.setCommandListener(this);     }          Thread t = new Thread(this);     t.start();          mDisplay.setCurrent(mForm);   }   public void pauseApp() {}   public void destroyApp(boolean unconditional) { shutdown(); }      private void log(String text) { log(null, text); }      private void log(String label, String text) {     StringItem si = new StringItem(label, text);     //si.setLayout(Item.LAYOUT_NEWLINE_AFTER);     mForm.append(si);   }      private void shutdown() {     mTrucking = false;     try { mServerSocketConnection.close(); }     catch (IOException ioe) {}   }      public void commandAction(Command c, Displayable s) {     if (c.getCommandType() == Command.EXIT) {       shutdown();       notifyDestroyed();     }   }   public void run() {     try {       mServerSocketConnection = (ServerSocketConnection)           Connector.open("socket://:80");       log("Startup complete.");       SocketConnection sc = null;       while (mTrucking) {         sc = (SocketConnection)           mServerSocketConnection.acceptAndOpen();         log("client: ", sc.getAddress());         // Strictly speaking, each client connection         // should be handled in its own thread. For         // simplicity, this implementation handles         // client connections inline.         Reader in = new InputStreamReader(             sc.openInputStream());         String line;         while ((line = readLine(in)) != null) ;         // Ignoring the request, send a response.         PrintStream out = new PrintStream(sc.openOutputStream());         out.print("HTTP/1.1 200 OK\r\n\r\n");         out.print(getMessage());         out.close();         in.close();         sc.close();       }     }     catch (Exception e) {       log("exception: ", e.toString());     }   }      private String readLine(Reader in) throws IOException {     // This is not efficient.     StringBuffer line = new StringBuffer();     int i;     while ((i = in.read()) != -1) {       char c = (char)i;       if (c == '\n') break;       if (c == '\r') ;       else line.append(c);     }     if (line.length() == 0) return null;     return line.toString();   }      private java.util.Random mRandom = new java.util.Random();      private String getMessage() {     int i = Math.abs(mRandom.nextInt()) % 5;     String s = null;     switch (i) {       case 0: s = "Above all the others we'll fly"; break;       case 1: s = "There is no reason to hide"; break;       case 2: s = "I dreamed about Ray Charles last night"; break;       case 3: s = "Someone keeps moving my chair"; break;       case 4: s = "Joseph's face was black as night"; break;       default: break;     }     return s;   } }