Unwinding the ouroboros... modified these public API
classes to not expose their internals by implementing listeners directly. Moved the listeners inside. git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7005 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
e441958434
commit
212b5e243a
@ -54,7 +54,7 @@ import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class Client extends ServiceManager implements MessageListener, ConnectionListener {
|
||||
public class Client extends ServiceManager {
|
||||
protected Logger log = Logger.getLogger(Client.class.getName());
|
||||
|
||||
protected static int clientIDCounter = 0;
|
||||
@ -79,6 +79,7 @@ public class Client extends ServiceManager implements MessageListener, Connectio
|
||||
|
||||
protected boolean isConnector;
|
||||
|
||||
protected ClientObserver listener = new ClientObserver();
|
||||
|
||||
/**
|
||||
* Constructs this client.
|
||||
@ -211,10 +212,10 @@ public class Client extends ServiceManager implements MessageListener, Connectio
|
||||
|
||||
private void registerInternalListeners() {
|
||||
if (tcp != null) {
|
||||
tcp.addConnectionListener(this);
|
||||
tcp.addConnectionListener(listener);
|
||||
tcp.socketChannel.keyFor(tcp.selector).attach(this);
|
||||
}
|
||||
addMessageListener(this, DisconnectMessage.class);
|
||||
addMessageListener(listener, DisconnectMessage.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -516,57 +517,6 @@ public class Client extends ServiceManager implements MessageListener, Connectio
|
||||
if (udp != null) udp.removeMessageListener(c, listener);
|
||||
}
|
||||
}
|
||||
|
||||
public void messageReceived(Message message) {
|
||||
try {
|
||||
disconnectInternal((DisconnectMessage)message);
|
||||
} catch (IOException e) {
|
||||
log.log(Level.WARNING, "[{0}][???] Could not disconnect.", label);
|
||||
}
|
||||
}
|
||||
|
||||
public void messageSent(Message message) {
|
||||
|
||||
}
|
||||
|
||||
public void objectReceived(Object object) {
|
||||
|
||||
}
|
||||
|
||||
public void objectSent(Object object) {
|
||||
|
||||
}
|
||||
|
||||
public void clientConnected(Client client) {
|
||||
// We are a client. This means that we succeeded in connecting to the server.
|
||||
if (!isConnected) return;
|
||||
long time = System.currentTimeMillis();
|
||||
playerID = time;
|
||||
ClientRegistrationMessage message = new ClientRegistrationMessage();
|
||||
message.setId(time);
|
||||
try {
|
||||
message.setReliable(false);
|
||||
send(message);
|
||||
message.setReliable(true);
|
||||
send(message);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.log(Level.SEVERE, "[{0}][???] Could not sent client registration message. Disconnecting.", label);
|
||||
try {
|
||||
disconnect(DisconnectMessage.ERROR);
|
||||
} catch (IOException ie) {}
|
||||
}
|
||||
}
|
||||
|
||||
public void clientDisconnected(Client client) {
|
||||
if (thread != null) {
|
||||
// We can disconnect now.
|
||||
thread.setKeepAlive(false);
|
||||
|
||||
// GC it.
|
||||
thread = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
@ -583,4 +533,58 @@ public class Client extends ServiceManager implements MessageListener, Connectio
|
||||
}
|
||||
}
|
||||
|
||||
protected class ClientObserver implements MessageListener, ConnectionListener {
|
||||
|
||||
public void messageReceived(Message message) {
|
||||
try {
|
||||
disconnectInternal((DisconnectMessage)message);
|
||||
} catch (IOException e) {
|
||||
log.log(Level.WARNING, "[{0}][???] Could not disconnect.", label);
|
||||
}
|
||||
}
|
||||
|
||||
public void messageSent(Message message) {
|
||||
|
||||
}
|
||||
|
||||
public void objectReceived(Object object) {
|
||||
|
||||
}
|
||||
|
||||
public void objectSent(Object object) {
|
||||
|
||||
}
|
||||
|
||||
public void clientConnected(Client client) {
|
||||
// We are a client. This means that we succeeded in connecting to the server.
|
||||
if (!isConnected) return;
|
||||
long time = System.currentTimeMillis();
|
||||
playerID = time;
|
||||
ClientRegistrationMessage message = new ClientRegistrationMessage();
|
||||
message.setId(time);
|
||||
try {
|
||||
message.setReliable(false);
|
||||
send(message);
|
||||
message.setReliable(true);
|
||||
send(message);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.log(Level.SEVERE, "[{0}][???] Could not sent client registration message. Disconnecting.", label);
|
||||
try {
|
||||
disconnect(DisconnectMessage.ERROR);
|
||||
} catch (IOException ie) {}
|
||||
}
|
||||
}
|
||||
|
||||
public void clientDisconnected(Client client) {
|
||||
if (thread != null) {
|
||||
// We can disconnect now.
|
||||
thread.setKeepAlive(false);
|
||||
|
||||
// GC it.
|
||||
thread = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ import java.util.logging.Logger;
|
||||
*
|
||||
* @author Lars Wesselius
|
||||
*/
|
||||
public class Server extends ServiceManager implements MessageListener {
|
||||
public class Server extends ServiceManager {
|
||||
protected Logger log = Logger.getLogger(Server.class.getName());
|
||||
|
||||
protected static int serverIDCounter = 0;
|
||||
@ -75,6 +75,8 @@ public class Server extends ServiceManager implements MessageListener {
|
||||
|
||||
protected ClientManager clientManager = new ClientManager();
|
||||
|
||||
protected MessageListener listener = new ServerMessageObserver();
|
||||
|
||||
/**
|
||||
* Default constructor. Sets the label to
|
||||
* <code>Server#[serverID]</code>
|
||||
@ -171,12 +173,12 @@ public class Server extends ServiceManager implements MessageListener {
|
||||
|
||||
private void registerInternalListeners() {
|
||||
if (tcp != null) {
|
||||
tcp.addMessageListener(DisconnectMessage.class, this);
|
||||
tcp.addMessageListener(DisconnectMessage.class, listener);
|
||||
tcp.addMessageListener(ClientRegistrationMessage.class, clientManager);
|
||||
tcp.addConnectionListener(clientManager);
|
||||
}
|
||||
if (udp != null) {
|
||||
udp.addMessageListener(DisconnectMessage.class, this);
|
||||
udp.addMessageListener(DisconnectMessage.class, listener);
|
||||
udp.addMessageListener(ClientRegistrationMessage.class, clientManager);
|
||||
udp.addConnectionListener(clientManager);
|
||||
}
|
||||
@ -423,31 +425,34 @@ public class Server extends ServiceManager implements MessageListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void messageReceived(Message message) {
|
||||
// Right now, this is definitely a DisconnectMessage.
|
||||
DisconnectMessage dcMessage = (DisconnectMessage)message;
|
||||
Client client = dcMessage.getClient();
|
||||
|
||||
if (clientManager.isClientConnected(client)) {
|
||||
log.log(Level.INFO, "[{0}][???] Client {1} disconnected ({2}: {3}).", new Object[]{
|
||||
label,
|
||||
client,
|
||||
dcMessage.getType(),
|
||||
(dcMessage.getReason() != null) ? dcMessage.getReason() : "No description"
|
||||
});
|
||||
protected class ServerMessageObserver implements MessageListener {
|
||||
|
||||
public void messageReceived(Message message) {
|
||||
// Right now, this is definitely a DisconnectMessage.
|
||||
DisconnectMessage dcMessage = (DisconnectMessage)message;
|
||||
Client client = dcMessage.getClient();
|
||||
|
||||
if (clientManager.isClientConnected(client)) {
|
||||
log.log(Level.INFO, "[{0}][???] Client {1} disconnected ({2}: {3}).", new Object[]{
|
||||
label,
|
||||
client,
|
||||
dcMessage.getType(),
|
||||
(dcMessage.getReason() != null) ? dcMessage.getReason() : "No description"
|
||||
});
|
||||
}
|
||||
dcMessage.getConnection().addToDisconnectionQueue(client);
|
||||
}
|
||||
|
||||
public void messageSent(Message message) {
|
||||
|
||||
}
|
||||
dcMessage.getConnection().addToDisconnectionQueue(client);
|
||||
}
|
||||
|
||||
public void messageSent(Message message) {
|
||||
public void objectReceived(Object object) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void objectReceived(Object object) {
|
||||
|
||||
}
|
||||
|
||||
public void objectSent(Object object) {
|
||||
|
||||
}
|
||||
public void objectSent(Object object) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user