Merge commit '77d3a60869e7a780c6ae069e51530e1eacece5e2'
[fanfix.git] / src / be / nikiroo / utils / serial / server / ServerObject.java
index 4f72013a3e7008896a65107d6e8737f87a640c0e..a6a5dd1b83573c3ca0814f7c409ae872d2061e59 100644 (file)
@@ -69,21 +69,24 @@ abstract public class ServerObject extends Server {
                return new ConnectActionServerObject(s, key) {
                        @Override
                        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, clientVersion, data);
+                                                       rep = onRequest(this, clientVersion, 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());
                                }
                        }
 
@@ -94,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>
@@ -101,16 +111,70 @@ abstract public class ServerObject extends Server {
         * 
         * @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)
         * 
         * @throws Exception
         *             in case of an exception, the error will only be logged
         */
-       abstract protected Object onRequest(ConnectActionServerObject action,
-                       Version clientVersion, Object data) throws Exception;
+       protected Object onRequest(ConnectActionServerObject action,
+                       Version clientVersion, Object data,
+                       @SuppressWarnings("unused") long id) throws Exception {
+               // TODO: change to abstract when deprecated method is removed
+               // Default implementation for compat
+               return onRequest(action, clientVersion, data);
+       }
+
+       // Deprecated //
+
+       /**
+        * @deprecated SSL support has been replaced by key-based encryption.
+        *             <p>
+        *             Please use the version with key encryption (this deprecated
+        *             version uses an empty key when <tt>ssl</tt> is TRUE and no
+        *             key (NULL) when <tt>ssl</tt> is FALSE).
+        */
+       @Deprecated
+       public ServerObject(int port, boolean ssl) throws IOException {
+               this(port, ssl ? "" : null);
+       }
+
+       /**
+        * @deprecated SSL support has been replaced by key-based encryption.
+        *             <p>
+        *             Please use the version with key encryption (this deprecated
+        *             version uses an empty key when <tt>ssl</tt> is TRUE and no
+        *             key (NULL) when <tt>ssl</tt> is FALSE).
+        */
+       @Deprecated
+       public ServerObject(String name, int port, boolean ssl) throws IOException {
+               this(name, port, ssl ? "" : null);
+       }
+
+       /**
+        * Will be called if the correct version is not overrided.
+        * 
+        * @deprecated use the version with the id.
+        * 
+        * @param action
+        *            the client action
+        * @param data
+        *            the data sent by the client
+        * 
+        * @return the answer to return to the client
+        * 
+        * @throws Exception
+        *             in case of an exception, the error will only be logged
+        */
+       @Deprecated
+       @SuppressWarnings("unused")
+       protected Object onRequest(ConnectActionServerObject action,
+                       Version version, Object data) throws Exception {
+               return null;
+       }
 }