import java.net.Socket;
import java.net.UnknownHostException;
-import be.nikiroo.utils.Version;
-
/**
* This class implements a simple server that can listen for connections and
* send/receive objects.
protected ConnectActionServer createConnectActionServer(Socket s) {
return new ConnectActionServerObject(s, key) {
@Override
- public void action(Version clientVersion) throws Exception {
+ public void action() throws Exception {
+ long id = getNextId();
try {
for (Object data = rec(); true; data = rec()) {
Object rep = null;
try {
- rep = onRequest(this, clientVersion, data);
+ rep = onRequest(this, data, id);
if (isClosing()) {
return;
}
} catch (Exception e) {
onError(e);
}
+
send(rep);
}
} catch (NullPointerException e) {
// Client has no data any more, we quit
+ onRequestDone(id, getBytesReceived(), getBytesSent());
}
}
};
}
+ @Override
+ protected ConnectActionClient getConnectionToMe()
+ throws UnknownHostException, IOException {
+ return new ConnectActionClientObject(new Socket((String) null,
+ getPort()), key);
+ }
+
/**
* This is the method that is called on each client request.
* <p>
*
* @param action
* the client action
- * @param clientVersion
- * the client version
* @param data
* the data sent by the client (which can be NULL)
+ * @param id
+ * an ID to identify this request (will also be re-used for
+ * {@link ServerObject#onRequestDone(long, long, long)}.
*
* @return the answer to return to the client (which can be NULL)
*
* in case of an exception, the error will only be logged
*/
abstract protected Object onRequest(ConnectActionServerObject action,
- Version clientVersion, Object data) throws Exception;
+ Object data, long id) throws Exception;
}