/*
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;
}
}
|