import java.io.IOException;
import java.net.Socket;
-
-import be.nikiroo.utils.Version;
+import java.net.UnknownHostException;
/**
* This class implements a simple server that can listen for connections and
* the port to listen on, or 0 to assign any unallocated port
* found (which can later on be queried via
* {@link ServerObject#getPort()}
- * @param ssl
- * use a SSL connection (or not)
+ * @param key
+ * an optional key to encrypt all the communications (if NULL,
+ * everything will be sent in clear text)
*
* @throws IOException
* in case of I/O error
+ * @throws UnknownHostException
+ * if the IP address of the host could not be determined
+ * @throws IllegalArgumentException
+ * if the port parameter is outside the specified range of valid
+ * port values, which is between 0 and 65535, inclusive
*/
- public ServerObject(int port, boolean ssl) throws IOException {
- super(port, ssl);
+ public ServerObject(int port, String key) throws IOException {
+ super(port, key);
}
/**
* the server name (only used for debug info and traces)
* @param port
* the port to listen on
- * @param ssl
- * use a SSL connection (or not)
+ * @param key
+ * an optional key to encrypt all the communications (if NULL,
+ * everything will be sent in clear text)
*
* @throws IOException
* in case of I/O error
+ * @throws UnknownHostException
+ * if the IP address of the host could not be determined
+ * @throws IllegalArgumentException
+ * if the port parameter is outside the specified range of valid
+ * port values, which is between 0 and 65535, inclusive
*/
- public ServerObject(String name, int port, boolean ssl) throws IOException {
- super(name, port, ssl);
+ public ServerObject(String name, int port, String key) throws IOException {
+ super(name, port, key);
}
@Override
protected ConnectActionServer createConnectActionServer(Socket s) {
- return new ConnectActionServerObject(s) {
+ return new ConnectActionServerObject(s, key) {
@Override
- public void action(Version clientVersion) throws Exception {
+ public void action() throws Exception {
try {
for (Object data = rec(); true; data = rec()) {
Object rep = null;
try {
- rep = onRequest(this, clientVersion, data);
+ rep = onRequest(this, data);
+ if (isClosing()) {
+ return;
+ }
} catch (Exception e) {
onError(e);
}
+
send(rep);
}
} catch (NullPointerException e) {
// Client has no data any more, we quit
}
}
+
+ @Override
+ protected void onError(Exception e) {
+ ServerObject.this.onError(e);
+ }
};
}
*
* @param action
* the client action
- * @param clientVersion
- * the client version
* @param data
* the data sent by 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) throws Exception;
}