package org.prevayler.foundation.network;
import java.io.IOException;
import java.net.SocketException;
/**
* Provides a server connection service.
* Uses a thread to wait for connections. It then creates a new instance of
* a Receiver.
*/
public class NetworkServerObjectReceiverImpl extends Thread implements NetworkServerObjectReceiver {
private Service _service;
private ObjectServerSocket _provider;
private boolean _wantedOpen;
private NetworkReceiverFactory _factory;
public NetworkServerObjectReceiverImpl( NetworkReceiverFactory factory, Service service, int port) throws IOException {
this(factory,service,new ObjectServerSocketImpl(port));
}
protected NetworkServerObjectReceiverImpl( NetworkReceiverFactory factory, Service service, ObjectServerSocket server){
_factory=factory;
_service=service;
_provider=server;
_wantedOpen=true;
setName("Prevayler Network Server Receiver");
setDaemon(true);
start();
}
public void run(){
while (_wantedOpen) {
try {
_factory.newReceiver(_service,_provider.accept());
}
catch ( SocketException sox) {
_wantedOpen=false;
}
catch ( IOException iox) {
}
}
}
public void shutdown(){
try {
_wantedOpen=false;
this._provider.close();
}
catch ( IOException ex) {
}
}
}