00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 package org.openmobileis.embedded.webserver;
00031 import java.net.*;
00032
00033 import org.openmobileis.common.util.log.*;
00034
00042 public class ServerThread implements Runnable {
00043
00044 private WebServerConnection connexion;
00045 private Object waiter;
00046 private ServerThreadPool threadPool;
00047 private boolean mustStop = false;
00048
00049 public ServerThread() {
00050 waiter = new Object();
00051 connexion = new WebServerConnection();
00052 Thread thread = new Thread( this );
00053 thread.start();
00054 }
00055
00056 public void run() {
00057 while (mustStop == false) {
00058 try {
00059 synchronized (waiter) {
00060 try {
00061 if (threadPool != null) {
00062 threadPool.disposeObject(this);
00063 }
00064 waiter.wait();
00065 } catch (Exception ex) {
00066 LogManager.traceError(0, ex);
00067 }
00068 }
00069 if (mustStop) {
00070 break;
00071 }
00072 connexion.run();
00073 } catch (Throwable ex) {
00074 LogManager.traceError(LogServices.WEBSERVICE,"ServerThread run connexion error");
00075 LogManager.traceError(LogServices.WEBSERVICE,ex);
00076 }
00077 }
00078 }
00079
00080 public void init(WebServer webserver, Socket socket,ServerThreadPool pool) {
00081 threadPool = pool;
00082 connexion.init(webserver, socket);
00083 synchronized (waiter) {
00084 waiter.notify();
00085 }
00086 }
00087
00088 public WebServerConnection getConnexion() {
00089 return connexion;
00090 }
00091
00092 public void notifyStop() {
00093 this.mustStop = true;
00094 synchronized (waiter) {
00095 waiter.notify();
00096 }
00097 }
00098
00099
00100 }