Merge branch 'master' into PBRisComing

define_list_fix
Nehon 9 years ago
commit e5608d6e38
  1. 4
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
  2. 20
      jme3-core/src/main/java/com/jme3/renderer/RenderManager.java
  3. 49
      jme3-networking/src/main/java/com/jme3/network/base/DefaultClient.java
  4. 71
      jme3-networking/src/main/java/com/jme3/network/base/DefaultServer.java
  5. 2
      jme3-networking/src/main/java/com/jme3/network/base/MessageProtocol.java
  6. 5
      jme3-networking/src/main/java/com/jme3/network/serializing/Serializer.java
  7. 2
      jme3-networking/src/main/java/com/jme3/network/service/AbstractService.java
  8. 30
      jme3-networking/src/main/java/com/jme3/network/service/ServiceManager.java

@ -737,8 +737,8 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
setKinematic(capsule.readBoolean("kinematic", false)); setKinematic(capsule.readBoolean("kinematic", false));
setRestitution(capsule.readFloat("restitution", 0)); setRestitution(capsule.readFloat("restitution", 0));
Vector3f angularFactor = (Vector3f) capsule.readSavable("angularFactor", Vector3f.NAN.clone()); Vector3f angularFactor = (Vector3f) capsule.readSavable("angularFactor", null);
if(angularFactor == Vector3f.NAN) { if(angularFactor == null) {
setAngularFactor(capsule.readFloat("angularFactor", 1)); setAngularFactor(capsule.readFloat("angularFactor", 1));
} else { } else {
setAngularFactor(angularFactor); setAngularFactor(angularFactor);

@ -746,27 +746,43 @@ public class RenderManager {
} }
/** /**
* Sets the light filter to use when rendering Lighted Geometries * Sets the light filter to use when rendering lighted Geometries
* *
* @see LightFilter * @see LightFilter
* @param lightFilter The light filter tose. Set it to null if you want all lights to be rendered * @param lightFilter The light filter. Set it to null if you want all lights to be rendered
*/ */
public void setLightFilter(LightFilter lightFilter) { public void setLightFilter(LightFilter lightFilter) {
this.lightFilter = lightFilter; this.lightFilter = lightFilter;
} }
/**
* Defines what light mode will be selected when a technique offers several light modes
* @param preferredLightMode
*/
public void setPreferredLightMode(TechniqueDef.LightMode preferredLightMode) { public void setPreferredLightMode(TechniqueDef.LightMode preferredLightMode) {
this.preferredLightMode = preferredLightMode; this.preferredLightMode = preferredLightMode;
} }
/**
* returns the preferred light mode
* @return the light mode
*/
public TechniqueDef.LightMode getPreferredLightMode() { public TechniqueDef.LightMode getPreferredLightMode() {
return preferredLightMode; return preferredLightMode;
} }
/**
* returns the number of lights used for each pass when the light mode is single pass.
* @return the number of lights.
*/
public int getSinglePassLightBatchSize() { public int getSinglePassLightBatchSize() {
return singlePassLightBatchSize; return singlePassLightBatchSize;
} }
/**
* Sets the number of lights to use for each pass when the light mode is single pass.
* @param singlePassLightBatchSize the number of lights
*/
public void setSinglePassLightBatchSize(int singlePassLightBatchSize) { public void setSinglePassLightBatchSize(int singlePassLightBatchSize) {
this.singlePassLightBatchSize = singlePassLightBatchSize; this.singlePassLightBatchSize = singlePassLightBatchSize;
} }

@ -67,18 +67,18 @@ public class DefaultClient implements Client
private static final int CH_UNRELIABLE = 1; private static final int CH_UNRELIABLE = 1;
private static final int CH_FIRST = 2; private static final int CH_FIRST = 2;
private ThreadLocal<ByteBuffer> dataBuffer = new ThreadLocal<ByteBuffer>(); private final ThreadLocal<ByteBuffer> dataBuffer = new ThreadLocal<ByteBuffer>();
private int id = -1; private int id = -1;
private boolean isRunning = false; private boolean isRunning = false;
private CountDownLatch connecting = new CountDownLatch(1); private final CountDownLatch connecting = new CountDownLatch(1);
private String gameName; private String gameName;
private int version; private int version;
private MessageListenerRegistry<Client> messageListeners = new MessageListenerRegistry<Client>(); private final MessageListenerRegistry<Client> messageListeners = new MessageListenerRegistry<Client>();
private List<ClientStateListener> stateListeners = new CopyOnWriteArrayList<ClientStateListener>(); private final List<ClientStateListener> stateListeners = new CopyOnWriteArrayList<ClientStateListener>();
private List<ErrorListener<? super Client>> errorListeners = new CopyOnWriteArrayList<ErrorListener<? super Client>>(); private final List<ErrorListener<? super Client>> errorListeners = new CopyOnWriteArrayList<ErrorListener<? super Client>>();
private Redispatch dispatcher = new Redispatch(); private final Redispatch dispatcher = new Redispatch();
private List<ConnectorAdapter> channels = new ArrayList<ConnectorAdapter>(); private final List<ConnectorAdapter> channels = new ArrayList<ConnectorAdapter>();
private ConnectorFactory connectorFactory; private ConnectorFactory connectorFactory;
@ -100,6 +100,7 @@ public class DefaultClient implements Client
} }
protected void addStandardServices() { protected void addStandardServices() {
log.fine("Adding standard services...");
services.addService(new ClientSerializerRegistrationsService()); services.addService(new ClientSerializerRegistrationsService());
} }
@ -128,6 +129,7 @@ public class DefaultClient implements Client
throw new IllegalStateException( "Client is not started." ); throw new IllegalStateException( "Client is not started." );
} }
@Override
public void start() public void start()
{ {
if( isRunning ) if( isRunning )
@ -179,6 +181,7 @@ public class DefaultClient implements Client
} }
} }
@Override
public boolean isStarted() { public boolean isStarted() {
return isRunning; return isRunning;
} }
@ -195,33 +198,42 @@ public class DefaultClient implements Client
} }
} }
@Override
public boolean isConnected() public boolean isConnected()
{ {
return id != -1 && isRunning; return id != -1 && isRunning;
} }
@Override
public int getId() public int getId()
{ {
return id; return id;
} }
@Override
public String getGameName() public String getGameName()
{ {
return gameName; return gameName;
} }
@Override
public int getVersion() public int getVersion()
{ {
return version; return version;
} }
@Override
public ClientServiceManager getServices() public ClientServiceManager getServices()
{ {
return services; return services;
} }
@Override
public void send( Message message ) public void send( Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "send({0})", message);
}
if( message.isReliable() || channels.get(CH_UNRELIABLE) == null ) { if( message.isReliable() || channels.get(CH_UNRELIABLE) == null ) {
send(CH_RELIABLE, message, true); send(CH_RELIABLE, message, true);
} else { } else {
@ -229,8 +241,12 @@ public class DefaultClient implements Client
} }
} }
@Override
public void send( int channel, Message message ) public void send( int channel, Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "send({0}, {1})", new Object[]{channel, message});
}
if( channel >= 0 ) { if( channel >= 0 ) {
// Make sure we aren't still connecting. Channels // Make sure we aren't still connecting. Channels
// won't be valid until we are fully connected since // won't be valid until we are fully connected since
@ -275,6 +291,7 @@ public class DefaultClient implements Client
channels.get(channel).write(buffer); channels.get(channel).write(buffer);
} }
@Override
public void close() public void close()
{ {
checkRunning(); checkRunning();
@ -287,9 +304,11 @@ public class DefaultClient implements Client
if( !isRunning ) if( !isRunning )
return; return;
// Let the services get a chance to stop before we if( services.isStarted() ) {
// kill the connection. // Let the services get a chance to stop before we
services.stop(); // kill the connection.
services.stop();
}
// Send a close message // Send a close message
@ -313,41 +332,49 @@ public class DefaultClient implements Client
services.terminate(); services.terminate();
} }
@Override
public void addClientStateListener( ClientStateListener listener ) public void addClientStateListener( ClientStateListener listener )
{ {
stateListeners.add( listener ); stateListeners.add( listener );
} }
@Override
public void removeClientStateListener( ClientStateListener listener ) public void removeClientStateListener( ClientStateListener listener )
{ {
stateListeners.remove( listener ); stateListeners.remove( listener );
} }
@Override
public void addMessageListener( MessageListener<? super Client> listener ) public void addMessageListener( MessageListener<? super Client> listener )
{ {
messageListeners.addMessageListener( listener ); messageListeners.addMessageListener( listener );
} }
@Override
public void addMessageListener( MessageListener<? super Client> listener, Class... classes ) public void addMessageListener( MessageListener<? super Client> listener, Class... classes )
{ {
messageListeners.addMessageListener( listener, classes ); messageListeners.addMessageListener( listener, classes );
} }
@Override
public void removeMessageListener( MessageListener<? super Client> listener ) public void removeMessageListener( MessageListener<? super Client> listener )
{ {
messageListeners.removeMessageListener( listener ); messageListeners.removeMessageListener( listener );
} }
@Override
public void removeMessageListener( MessageListener<? super Client> listener, Class... classes ) public void removeMessageListener( MessageListener<? super Client> listener, Class... classes )
{ {
messageListeners.removeMessageListener( listener, classes ); messageListeners.removeMessageListener( listener, classes );
} }
@Override
public void addErrorListener( ErrorListener<? super Client> listener ) public void addErrorListener( ErrorListener<? super Client> listener )
{ {
errorListeners.add( listener ); errorListeners.add( listener );
} }
@Override
public void removeErrorListener( ErrorListener<? super Client> listener ) public void removeErrorListener( ErrorListener<? super Client> listener )
{ {
errorListeners.remove( listener ); errorListeners.remove( listener );
@ -461,11 +488,13 @@ public class DefaultClient implements Client
protected class Redispatch implements MessageListener<Object>, ErrorListener<Object> protected class Redispatch implements MessageListener<Object>, ErrorListener<Object>
{ {
@Override
public void messageReceived( Object source, Message m ) public void messageReceived( Object source, Message m )
{ {
dispatch( m ); dispatch( m );
} }
@Override
public void handleError( Object source, Throwable t ) public void handleError( Object source, Throwable t )
{ {
// Only doing the DefaultClient.this to make the code // Only doing the DefaultClient.this to make the code

@ -66,26 +66,26 @@ public class DefaultServer implements Server
private static final int CH_FIRST = 2; private static final int CH_FIRST = 2;
private boolean isRunning = false; private boolean isRunning = false;
private AtomicInteger nextId = new AtomicInteger(0); private final AtomicInteger nextId = new AtomicInteger(0);
private String gameName; private String gameName;
private int version; private int version;
private KernelFactory kernelFactory = KernelFactory.DEFAULT; private final KernelFactory kernelFactory = KernelFactory.DEFAULT;
private KernelAdapter reliableAdapter; private KernelAdapter reliableAdapter;
private KernelAdapter fastAdapter; private KernelAdapter fastAdapter;
private List<KernelAdapter> channels = new ArrayList<KernelAdapter>(); private final List<KernelAdapter> channels = new ArrayList<KernelAdapter>();
private List<Integer> alternatePorts = new ArrayList<Integer>(); private final List<Integer> alternatePorts = new ArrayList<Integer>();
private Redispatch dispatcher = new Redispatch(); private final Redispatch dispatcher = new Redispatch();
private Map<Integer,HostedConnection> connections = new ConcurrentHashMap<Integer,HostedConnection>(); private final Map<Integer,HostedConnection> connections = new ConcurrentHashMap<Integer,HostedConnection>();
private Map<Endpoint,HostedConnection> endpointConnections private final Map<Endpoint,HostedConnection> endpointConnections
= new ConcurrentHashMap<Endpoint,HostedConnection>(); = new ConcurrentHashMap<Endpoint,HostedConnection>();
// Keeps track of clients for whom we've only received the UDP // Keeps track of clients for whom we've only received the UDP
// registration message // 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>(); = new MessageListenerRegistry<HostedConnection>();
private List<ConnectionListener> connectionListeners = new CopyOnWriteArrayList<ConnectionListener>(); private final List<ConnectionListener> connectionListeners = new CopyOnWriteArrayList<ConnectionListener>();
private HostedServiceManager services; private HostedServiceManager services;
@ -108,24 +108,29 @@ public class DefaultServer implements Server
} }
protected void addStandardServices() { protected void addStandardServices() {
log.fine("Adding standard services...");
services.addService(new ServerSerializerRegistrationsService()); services.addService(new ServerSerializerRegistrationsService());
} }
@Override
public String getGameName() public String getGameName()
{ {
return gameName; return gameName;
} }
@Override
public int getVersion() public int getVersion()
{ {
return version; return version;
} }
@Override
public HostedServiceManager getServices() public HostedServiceManager getServices()
{ {
return services; return services;
} }
@Override
public int addChannel( int port ) public int addChannel( int port )
{ {
if( isRunning ) if( isRunning )
@ -164,6 +169,7 @@ public class DefaultServer implements Server
} }
} }
@Override
public void start() public void start()
{ {
if( isRunning ) if( isRunning )
@ -185,11 +191,13 @@ public class DefaultServer implements Server
services.start(); services.start();
} }
@Override
public boolean isRunning() public boolean isRunning()
{ {
return isRunning; return isRunning;
} }
@Override
public void close() public void close()
{ {
if( !isRunning ) if( !isRunning )
@ -214,13 +222,19 @@ public class DefaultServer implements Server
} }
} }
@Override
public void broadcast( Message message ) public void broadcast( Message message )
{ {
broadcast( null, message ); broadcast( null, message );
} }
@Override
public void broadcast( Filter<? super HostedConnection> filter, Message message ) public void broadcast( Filter<? super HostedConnection> filter, Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "broadcast({0}, {1})", new Object[]{filter, message});
}
if( connections.isEmpty() ) if( connections.isEmpty() )
return; return;
@ -237,8 +251,13 @@ public class DefaultServer implements Server
} }
} }
@Override
public void broadcast( int channel, Filter<? super HostedConnection> filter, Message message ) public void broadcast( int channel, Filter<? super HostedConnection> filter, Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "broadcast({0}, {1}. {2})", new Object[]{channel, filter, message});
}
if( connections.isEmpty() ) if( connections.isEmpty() )
return; return;
@ -251,46 +270,55 @@ public class DefaultServer implements Server
channels.get(channel+CH_FIRST).broadcast( adapter, buffer, true, false ); channels.get(channel+CH_FIRST).broadcast( adapter, buffer, true, false );
} }
@Override
public HostedConnection getConnection( int id ) public HostedConnection getConnection( int id )
{ {
return connections.get(id); return connections.get(id);
} }
@Override
public boolean hasConnections() public boolean hasConnections()
{ {
return !connections.isEmpty(); return !connections.isEmpty();
} }
@Override
public Collection<HostedConnection> getConnections() public Collection<HostedConnection> getConnections()
{ {
return Collections.unmodifiableCollection((Collection<HostedConnection>)connections.values()); return Collections.unmodifiableCollection((Collection<HostedConnection>)connections.values());
} }
@Override
public void addConnectionListener( ConnectionListener listener ) public void addConnectionListener( ConnectionListener listener )
{ {
connectionListeners.add(listener); connectionListeners.add(listener);
} }
@Override
public void removeConnectionListener( ConnectionListener listener ) public void removeConnectionListener( ConnectionListener listener )
{ {
connectionListeners.remove(listener); connectionListeners.remove(listener);
} }
@Override
public void addMessageListener( MessageListener<? super HostedConnection> listener ) public void addMessageListener( MessageListener<? super HostedConnection> listener )
{ {
messageListeners.addMessageListener( listener ); messageListeners.addMessageListener( listener );
} }
@Override
public void addMessageListener( MessageListener<? super HostedConnection> listener, Class... classes ) public void addMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )
{ {
messageListeners.addMessageListener( listener, classes ); messageListeners.addMessageListener( listener, classes );
} }
@Override
public void removeMessageListener( MessageListener<? super HostedConnection> listener ) public void removeMessageListener( MessageListener<? super HostedConnection> listener )
{ {
messageListeners.removeMessageListener( listener ); messageListeners.removeMessageListener( listener );
} }
@Override
public void removeMessageListener( MessageListener<? super HostedConnection> listener, Class... classes ) public void removeMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )
{ {
messageListeners.removeMessageListener( listener, classes ); messageListeners.removeMessageListener( listener, classes );
@ -484,12 +512,12 @@ public class DefaultServer implements Server
protected class Connection implements HostedConnection protected class Connection implements HostedConnection
{ {
private int id; private final int id;
private boolean closed; private boolean closed;
private Endpoint[] channels; private Endpoint[] channels;
private int setChannelCount = 0; 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 ) public Connection( int channelCount )
{ {
@ -523,23 +551,30 @@ public class DefaultServer implements Server
return setChannelCount == channels.length; return setChannelCount == channels.length;
} }
@Override
public Server getServer() public Server getServer()
{ {
return DefaultServer.this; return DefaultServer.this;
} }
@Override
public int getId() public int getId()
{ {
return id; return id;
} }
@Override
public String getAddress() public String getAddress()
{ {
return channels[CH_RELIABLE] == null ? null : channels[CH_RELIABLE].getAddress(); return channels[CH_RELIABLE] == null ? null : channels[CH_RELIABLE].getAddress();
} }
@Override
public void send( Message message ) public void send( Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "send({0})", message);
}
ByteBuffer buffer = MessageProtocol.messageToBuffer(message, null); ByteBuffer buffer = MessageProtocol.messageToBuffer(message, null);
if( message.isReliable() || channels[CH_UNRELIABLE] == null ) { if( message.isReliable() || channels[CH_UNRELIABLE] == null ) {
channels[CH_RELIABLE].send( buffer ); channels[CH_RELIABLE].send( buffer );
@ -548,8 +583,12 @@ public class DefaultServer implements Server
} }
} }
@Override
public void send( int channel, Message message ) public void send( int channel, Message message )
{ {
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "send({0}, {1})", new Object[]{channel, message});
}
checkChannel(channel); checkChannel(channel);
ByteBuffer buffer = MessageProtocol.messageToBuffer(message, null); ByteBuffer buffer = MessageProtocol.messageToBuffer(message, null);
channels[channel+CH_FIRST].send(buffer); channels[channel+CH_FIRST].send(buffer);
@ -573,6 +612,7 @@ public class DefaultServer implements Server
fireConnectionRemoved( this ); fireConnectionRemoved( this );
} }
@Override
public void close( String reason ) public void close( String reason )
{ {
// Send a reason // Send a reason
@ -593,6 +633,7 @@ public class DefaultServer implements Server
} }
} }
@Override
public Object setAttribute( String name, Object value ) public Object setAttribute( String name, Object value )
{ {
if( value == null ) if( value == null )
@ -601,11 +642,13 @@ public class DefaultServer implements Server
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override
public <T> T getAttribute( String name ) public <T> T getAttribute( String name )
{ {
return (T)sessionData.get(name); return (T)sessionData.get(name);
} }
@Override
public Set<String> attributeNames() public Set<String> attributeNames()
{ {
return Collections.unmodifiableSet(sessionData.keySet()); return Collections.unmodifiableSet(sessionData.keySet());
@ -621,6 +664,7 @@ public class DefaultServer implements Server
protected class Redispatch implements MessageListener<HostedConnection> protected class Redispatch implements MessageListener<HostedConnection>
{ {
@Override
public void messageReceived( HostedConnection source, Message m ) public void messageReceived( HostedConnection source, Message m )
{ {
dispatch( source, m ); dispatch( source, m );
@ -629,13 +673,14 @@ public class DefaultServer implements Server
protected class FilterAdapter implements Filter<Endpoint> protected class FilterAdapter implements Filter<Endpoint>
{ {
private Filter<? super HostedConnection> delegate; private final Filter<? super HostedConnection> delegate;
public FilterAdapter( Filter<? super HostedConnection> delegate ) public FilterAdapter( Filter<? super HostedConnection> delegate )
{ {
this.delegate = delegate; this.delegate = delegate;
} }
@Override
public boolean apply( Endpoint input ) public boolean apply( Endpoint input )
{ {
HostedConnection conn = getConnection( input ); HostedConnection conn = getConnection( input );

@ -53,7 +53,7 @@ import java.util.LinkedList;
*/ */
public class MessageProtocol public class MessageProtocol
{ {
private LinkedList<Message> messages = new LinkedList<Message>(); private final LinkedList<Message> messages = new LinkedList<Message>();
private ByteBuffer current; private ByteBuffer current;
private int size; private int size;
private Byte carry; private Byte carry;

@ -45,6 +45,7 @@ import java.nio.ByteBuffer;
import java.util.*; import java.util.*;
import java.util.jar.Attributes; import java.util.jar.Attributes;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger; import java.util.logging.Logger;
/** /**
@ -403,6 +404,10 @@ public abstract class Serializer {
if (reg == null) { if (reg == null) {
throw new SerializerException( "Class not registered:" + type ); throw new SerializerException( "Class not registered:" + type );
} }
if( log.isLoggable(Level.FINER) ) {
log.log(Level.FINER, "writing class:{0} with ID:{1}", new Object[]{type, reg.getId()});
}
buffer.putShort(reg.getId()); buffer.putShort(reg.getId());
return reg; return reg;
} }

@ -106,6 +106,6 @@ public abstract class AbstractService<S extends ServiceManager> implements Servi
@Override @Override
public String toString() { public String toString() {
return getClass().getName() + "[serviceManager.class=" + serviceManager.getClass() + "]"; return getClass().getName() + "[serviceManager.class=" + (serviceManager != null ? serviceManager.getClass() : "") + "]";
} }
} }

@ -34,6 +34,8 @@ package com.jme3.network.service;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* The base service manager class from which the HostedServiceManager * The base service manager class from which the HostedServiceManager
@ -44,7 +46,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/ */
public abstract class ServiceManager<T> { public abstract class ServiceManager<T> {
private List<Service<T>> services = new CopyOnWriteArrayList<Service<T>>(); static final Logger log = Logger.getLogger(ServiceManager.class.getName());
private final List<Service<T>> services = new CopyOnWriteArrayList<Service<T>>();
private volatile boolean started = false; private volatile boolean started = false;
protected ServiceManager() { protected ServiceManager() {
@ -76,6 +80,9 @@ public abstract class ServiceManager<T> {
return; return;
} }
for( Service<T> s : services ) { for( Service<T> s : services ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Starting service:{0}", s);
}
s.start(); s.start();
} }
started = true; started = true;
@ -96,6 +103,9 @@ public abstract class ServiceManager<T> {
throw new IllegalStateException(getClass().getSimpleName() + " not started."); throw new IllegalStateException(getClass().getSimpleName() + " not started.");
} }
for( Service<T> s : services ) { for( Service<T> s : services ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Stopping service:{0}", s);
}
s.stop(); s.stop();
} }
started = false; started = false;
@ -106,9 +116,18 @@ public abstract class ServiceManager<T> {
* has already been started then the service will also be started. * has already been started then the service will also be started.
*/ */
public <S extends Service<T>> void addService( S s ) { public <S extends Service<T>> void addService( S s ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "addService({0})", s);
}
services.add(s); services.add(s);
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Initializing service:{0}", s);
}
s.initialize(getParent()); s.initialize(getParent());
if( started ) { if( started ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Starting service:{0}", s);
}
s.start(); s.start();
} }
} }
@ -120,10 +139,19 @@ public abstract class ServiceManager<T> {
* the service will be terminated. * the service will be terminated.
*/ */
public <S extends Service<T>> void removeService( S s ) { public <S extends Service<T>> void removeService( S s ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "removeService({0})", s);
}
if( started ) { if( started ) {
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Stopping service:{0}", s);
}
s.stop(); s.stop();
} }
services.remove(s); services.remove(s);
if( log.isLoggable(Level.FINE) ) {
log.log(Level.FINE, "Terminating service:{0}", s);
}
s.terminate(getParent()); s.terminate(getParent());
} }

Loading…
Cancel
Save