server: re-introduce the client/server versions
[fanfix.git] / src / be / nikiroo / utils / serial / server / ServerObject.java
index 0315f90c47f74b19d557e6a029e065da89dd1911..0941f7047f5363e612c299024150663bbadf5f5a 100644 (file)
@@ -4,6 +4,8 @@ import java.io.IOException;
 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.
@@ -66,12 +68,13 @@ abstract public class ServerObject extends Server {
        protected ConnectActionServer createConnectActionServer(Socket s) {
                return new ConnectActionServerObject(s, key) {
                        @Override
-                       public void action() throws Exception {
+                       public void action(Version clientVersion) throws Exception {
+                               long id = getNextId();
                                try {
                                        for (Object data = rec(); true; data = rec()) {
                                                Object rep = null;
                                                try {
-                                                       rep = onRequest(this, data);
+                                                       rep = onRequest(this, data, id);
                                                        if (isClosing()) {
                                                                return;
                                                        }
@@ -83,6 +86,7 @@ abstract public class ServerObject extends Server {
                                        }
                                } catch (NullPointerException e) {
                                        // Client has no data any more, we quit
+                                       onRequestDone(id, getBytesReceived(), getBytesSent());
                                }
                        }
 
@@ -93,6 +97,13 @@ abstract public class ServerObject extends Server {
                };
        }
 
+       @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>
@@ -102,6 +113,9 @@ abstract public class ServerObject extends Server {
         *            the client action
         * @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)
         * 
@@ -109,5 +123,5 @@ abstract public class ServerObject extends Server {
         *             in case of an exception, the error will only be logged
         */
        abstract protected Object onRequest(ConnectActionServerObject action,
-                       Object data) throws Exception;
+                       Object data, long id) throws Exception;
 }