/*
* SocketServerMIDlet.java
* 07/23/2007
*/
package midlet;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.vendor.dept.midp21.network.Const;
import com.vendor.dept.midp21.network.SocketServerListener;
/**
* MIDlet to run a socket server
*
* @author
*
*/
public class SocketServerMIDlet extends MIDlet implements CommandListener {
private static final String LBL_PORT = "Port";
private static final String TITLE = "SocketServer";
private Display display;
private Command exitCommand;
private Form form;
private StringItem msgField;
private TextField portField;
private Command startCommand;
private StringItem statusField;
private String url;
public SocketServerMIDlet() {
// TODO Auto-generated constructor stub
}
public void commandAction(Command c, Displayable arg1) {
if (c.equals(startCommand)) {
processStart();
} else {
this.destroyApp(true);
super.notifyDestroyed();
}
}
protected void destroyApp(boolean arg0) {
// empty
}
private void initUI() {
display = Display.getDisplay(this);
form = new Form(TITLE);
startCommand = new Command("Start", Command.OK, 1);
exitCommand = new Command("Exit", Command.EXIT, 0);
form.addCommand(startCommand);
form.addCommand(exitCommand);
form.setCommandListener(this);
portField = new TextField(LBL_PORT, Const.DEF_9033, 4,
TextField.DECIMAL);
form.append(portField);
statusField = new StringItem("Status", "");
form.append(statusField);
msgField = new StringItem("MsgReceived", "");
form.append(msgField);
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
/**
* start a new thread listener
*/
private void processStart() {
String port = portField.getString().trim();
try {
Integer.parseInt(port);
} catch (NumberFormatException e) {
return;
}
SocketServerListener server = new SocketServerListener(port, msgField,statusField);
server.start();
this.form.removeCommand(startCommand);
}
protected void startApp() throws MIDletStateChangeException {
if (display == null) {
initUI();
}
display.setCurrent(form);
}
}
/*
* SocketServerListener.java
* July 23, 2007
*/
package com.vendor.dept.midp21.network;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.StringItem;
/**
* Listener class of incoming socket server connection
*
* @author
*
*/
public class SocketServerListener implements Runnable {
private InputStream is;
private StringItem output;
private String port;
private SocketConnection sc;
private ServerSocketConnection scn;
private StringItem status;
private boolean stop;
public SocketServerListener(String listenPort, StringItem msgField,
StringItem statusField) {
this.port = listenPort;
this.output = msgField;
this.status = statusField;
this.stop = false;
}
public void run() {
try {
scn = (ServerSocketConnection) Connector.open(Const.SOCKET_PROTOCOL
.concat(Const.SEMI).concat(port));
String sport = String.valueOf(scn.getLocalPort());
String sip = scn.getLocalAddress();
String url = Const.SOCKET_PROTOCOL + sip + Const.SEMI
+ sport;
this.status.setText("Listening " + url);
sc = (SocketConnection) scn.acceptAndOpen();
is = sc.openInputStream();
while (true) {
StringBuffer sb = new StringBuffer();
int c = 0;
while (((c = is.read()) != '/n') && (c != -1)) {
sb.append((char) c);
}
if (c == -1) {
break;
}
this.output.setText(sb.toString());
}
stop();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void start() {
Thread t = new Thread(this);
t.start();
}
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {
// ignored
}
}
}
/*
* Const.java
* July 23, 2007
*/
package com.vendor.dept.midp21.network;
/**
* @author
*
*/
public class Const {
public static final String DEF_9033 = "9033";
public static final String SEMI = ":";
public static final String SOCKET_PROTOCOL = "socket://";
}