/**
* Return the assigned port.
+ *
+ * @return the assigned port
*/
public int getPort() {
return port;
* Start the server (listen on the network for new connections).
* <p>
* Can only be called once.
+ * <p>
+ * This call is synchronous.
*/
public void start() {
+ start(true);
+ }
+
+ /**
+ * Start the server (listen on the network for new connections).
+ * <p>
+ * Can only be called once.
+ *
+ * @param wait
+ * TRUE for synchronous, FALSE for asynchronous
+ */
+ public void start(boolean wait) {
boolean ok = false;
synchronized (lock) {
if (!started && ss != null) {
- started = true;
- new Thread(this).start();
ok = true;
+ started = true;
+ if (!wait) {
+ new Thread(this).start();
+ }
}
}
if (ok) {
tracer.trace(name + ": server started on port " + port);
+ if (wait) {
+ run();
+ }
} else if (ss == null) {
tracer.error(name + ": cannot start server on port " + port
+ ", it has already been used");
exiting = true;
try {
- new ConnectActionClient(createSocket(null, port, ssl)) {
- @Override
- public void action(Version serverVersion)
- throws Exception {
- }
- }.connect();
-
+ new ConnectActionClient(createSocket(null, port, ssl))
+ .connect();
long time = 0;
while (ss != null && timeout > 0 && timeout > time) {
Thread.sleep(10);
@Override
public void run() {
try {
- tracer.trace(name + ": server starting on port " + port);
while (started && !exiting) {
count(1);
Socket s = ss.accept();
new ConnectActionServer(s) {
- private Version clientVersion = new Version();
-
@Override
- public void action(Version dummy) throws Exception {
+ public void action(Version clientVersion) throws Exception {
try {
- for (Object data = flush(); true; data = flush()) {
+ for (Object data = rec(); true; data = rec()) {
Object rep = null;
try {
rep = onRequest(this, clientVersion, data);
}
} catch (NullPointerException e) {
// Client has no data any more, we quit
+ tracer.trace("Client has data no more, stopping connection");
}
}
count(-1);
}
}
-
- @Override
- protected void onClientVersionReceived(Version clientVersion) {
- this.clientVersion = clientVersion;
- }
}.connectAsync();
}