|
@@ -66,26 +66,26 @@ public class DefaultServer implements Server
|
|
|
private static final int CH_FIRST = 2;
|
|
|
|
|
|
private boolean isRunning = false;
|
|
|
- private AtomicInteger nextId = new AtomicInteger(0);
|
|
|
+ private final AtomicInteger nextId = new AtomicInteger(0);
|
|
|
private String gameName;
|
|
|
private int version;
|
|
|
- private KernelFactory kernelFactory = KernelFactory.DEFAULT;
|
|
|
+ private final KernelFactory kernelFactory = KernelFactory.DEFAULT;
|
|
|
private KernelAdapter reliableAdapter;
|
|
|
private KernelAdapter fastAdapter;
|
|
|
- private List<KernelAdapter> channels = new ArrayList<KernelAdapter>();
|
|
|
- private List<Integer> alternatePorts = new ArrayList<Integer>();
|
|
|
- private Redispatch dispatcher = new Redispatch();
|
|
|
- private Map<Integer,HostedConnection> connections = new ConcurrentHashMap<Integer,HostedConnection>();
|
|
|
- private Map<Endpoint,HostedConnection> endpointConnections
|
|
|
+ private final List<KernelAdapter> channels = new ArrayList<KernelAdapter>();
|
|
|
+ private final List<Integer> alternatePorts = new ArrayList<Integer>();
|
|
|
+ private final Redispatch dispatcher = new Redispatch();
|
|
|
+ private final Map<Integer,HostedConnection> connections = new ConcurrentHashMap<Integer,HostedConnection>();
|
|
|
+ private final Map<Endpoint,HostedConnection> endpointConnections
|
|
|
= new ConcurrentHashMap<Endpoint,HostedConnection>();
|
|
|
|
|
|
// Keeps track of clients for whom we've only received the UDP
|
|
|
// registration message
|
|
|
- private Map<Long,Connection> connecting = new ConcurrentHashMap<Long,Connection>();
|
|
|
+ private final Map<Long,Connection> connecting = new ConcurrentHashMap<Long,Connection>();
|
|
|
|
|
|
- private MessageListenerRegistry<HostedConnection> messageListeners
|
|
|
+ private final MessageListenerRegistry<HostedConnection> messageListeners
|
|
|
= new MessageListenerRegistry<HostedConnection>();
|
|
|
- private List<ConnectionListener> connectionListeners = new CopyOnWriteArrayList<ConnectionListener>();
|
|
|
+ private final List<ConnectionListener> connectionListeners = new CopyOnWriteArrayList<ConnectionListener>();
|
|
|
|
|
|
private HostedServiceManager services;
|
|
|
|
|
@@ -112,21 +112,25 @@ public class DefaultServer implements Server
|
|
|
services.addService(new ServerSerializerRegistrationsService());
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public String getGameName()
|
|
|
{
|
|
|
return gameName;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public int getVersion()
|
|
|
{
|
|
|
return version;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public HostedServiceManager getServices()
|
|
|
{
|
|
|
return services;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public int addChannel( int port )
|
|
|
{
|
|
|
if( isRunning )
|
|
@@ -165,6 +169,7 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void start()
|
|
|
{
|
|
|
if( isRunning )
|
|
@@ -186,11 +191,13 @@ public class DefaultServer implements Server
|
|
|
services.start();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public boolean isRunning()
|
|
|
{
|
|
|
return isRunning;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void close()
|
|
|
{
|
|
|
if( !isRunning )
|
|
@@ -215,11 +222,13 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void broadcast( Message message )
|
|
|
{
|
|
|
broadcast( null, message );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void broadcast( Filter<? super HostedConnection> filter, Message message )
|
|
|
{
|
|
|
if( log.isLoggable(Level.FINER) ) {
|
|
@@ -242,6 +251,7 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void broadcast( int channel, Filter<? super HostedConnection> filter, Message message )
|
|
|
{
|
|
|
if( log.isLoggable(Level.FINER) ) {
|
|
@@ -260,46 +270,55 @@ public class DefaultServer implements Server
|
|
|
channels.get(channel+CH_FIRST).broadcast( adapter, buffer, true, false );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public HostedConnection getConnection( int id )
|
|
|
{
|
|
|
return connections.get(id);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public boolean hasConnections()
|
|
|
{
|
|
|
return !connections.isEmpty();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public Collection<HostedConnection> getConnections()
|
|
|
{
|
|
|
return Collections.unmodifiableCollection((Collection<HostedConnection>)connections.values());
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void addConnectionListener( ConnectionListener listener )
|
|
|
{
|
|
|
connectionListeners.add(listener);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void removeConnectionListener( ConnectionListener listener )
|
|
|
{
|
|
|
connectionListeners.remove(listener);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void addMessageListener( MessageListener<? super HostedConnection> listener )
|
|
|
{
|
|
|
messageListeners.addMessageListener( listener );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void addMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )
|
|
|
{
|
|
|
messageListeners.addMessageListener( listener, classes );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void removeMessageListener( MessageListener<? super HostedConnection> listener )
|
|
|
{
|
|
|
messageListeners.removeMessageListener( listener );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void removeMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )
|
|
|
{
|
|
|
messageListeners.removeMessageListener( listener, classes );
|
|
@@ -493,12 +512,12 @@ public class DefaultServer implements Server
|
|
|
|
|
|
protected class Connection implements HostedConnection
|
|
|
{
|
|
|
- private int id;
|
|
|
+ private final int id;
|
|
|
private boolean closed;
|
|
|
private Endpoint[] channels;
|
|
|
private int setChannelCount = 0;
|
|
|
|
|
|
- private Map<String,Object> sessionData = new ConcurrentHashMap<String,Object>();
|
|
|
+ private final Map<String,Object> sessionData = new ConcurrentHashMap<String,Object>();
|
|
|
|
|
|
public Connection( int channelCount )
|
|
|
{
|
|
@@ -532,21 +551,25 @@ public class DefaultServer implements Server
|
|
|
return setChannelCount == channels.length;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public Server getServer()
|
|
|
{
|
|
|
return DefaultServer.this;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public int getId()
|
|
|
{
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public String getAddress()
|
|
|
{
|
|
|
return channels[CH_RELIABLE] == null ? null : channels[CH_RELIABLE].getAddress();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void send( Message message )
|
|
|
{
|
|
|
if( log.isLoggable(Level.FINER) ) {
|
|
@@ -560,6 +583,7 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void send( int channel, Message message )
|
|
|
{
|
|
|
if( log.isLoggable(Level.FINER) ) {
|
|
@@ -588,6 +612,7 @@ public class DefaultServer implements Server
|
|
|
fireConnectionRemoved( this );
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void close( String reason )
|
|
|
{
|
|
|
// Send a reason
|
|
@@ -608,6 +633,7 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public Object setAttribute( String name, Object value )
|
|
|
{
|
|
|
if( value == null )
|
|
@@ -616,11 +642,13 @@ public class DefaultServer implements Server
|
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
+ @Override
|
|
|
public <T> T getAttribute( String name )
|
|
|
{
|
|
|
return (T)sessionData.get(name);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public Set<String> attributeNames()
|
|
|
{
|
|
|
return Collections.unmodifiableSet(sessionData.keySet());
|
|
@@ -636,6 +664,7 @@ public class DefaultServer implements Server
|
|
|
|
|
|
protected class Redispatch implements MessageListener<HostedConnection>
|
|
|
{
|
|
|
+ @Override
|
|
|
public void messageReceived( HostedConnection source, Message m )
|
|
|
{
|
|
|
dispatch( source, m );
|
|
@@ -644,13 +673,14 @@ public class DefaultServer implements Server
|
|
|
|
|
|
protected class FilterAdapter implements Filter<Endpoint>
|
|
|
{
|
|
|
- private Filter<? super HostedConnection> delegate;
|
|
|
+ private final Filter<? super HostedConnection> delegate;
|
|
|
|
|
|
public FilterAdapter( Filter<? super HostedConnection> delegate )
|
|
|
{
|
|
|
this.delegate = delegate;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public boolean apply( Endpoint input )
|
|
|
{
|
|
|
HostedConnection conn = getConnection( input );
|