Tightened up the DefaultServer connection close code
to make sure that the connection closed change event only goes out once. Added some additional logging to the endpoint closings. git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7244 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
189a787d36
commit
1f1c2ac15b
@ -358,18 +358,8 @@ public class DefaultServer implements Server
|
||||
if( removed != null ) {
|
||||
|
||||
log.log( Level.INFO, "Client closed:{0}.", removed );
|
||||
|
||||
// Make sure both endpoints are closed. Note: reliable
|
||||
// should always already be closed through all paths that I
|
||||
// can conceive... but it doesn't hurt to be sure.
|
||||
if( removed.reliable != null && removed.reliable.isConnected() ) {
|
||||
removed.reliable.close();
|
||||
}
|
||||
if( removed.fast != null && removed.fast.isConnected() ) {
|
||||
removed.fast.close();
|
||||
}
|
||||
|
||||
fireConnectionRemoved( removed );
|
||||
|
||||
removed.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@ -378,6 +368,7 @@ public class DefaultServer implements Server
|
||||
private int id;
|
||||
private Endpoint reliable;
|
||||
private Endpoint fast;
|
||||
private boolean closed;
|
||||
|
||||
private Map<String,Object> sessionData = new ConcurrentHashMap<String,Object>();
|
||||
|
||||
@ -410,6 +401,25 @@ public class DefaultServer implements Server
|
||||
fast.send( buffer );
|
||||
}
|
||||
}
|
||||
|
||||
protected void closeConnection()
|
||||
{
|
||||
if( closed )
|
||||
return;
|
||||
closed = true;
|
||||
|
||||
// Make sure both endpoints are closed. Note: reliable
|
||||
// should always already be closed through all paths that I
|
||||
// can conceive... but it doesn't hurt to be sure.
|
||||
if( reliable != null && reliable.isConnected() ) {
|
||||
reliable.close();
|
||||
}
|
||||
if( fast != null && fast.isConnected() ) {
|
||||
fast.close();
|
||||
}
|
||||
|
||||
fireConnectionRemoved( this );
|
||||
}
|
||||
|
||||
public void close( String reason )
|
||||
{
|
||||
@ -422,6 +432,8 @@ public class DefaultServer implements Server
|
||||
|
||||
// Just close the reliable endpoint
|
||||
// fast will be cleaned up as a side-effect
|
||||
// when closeConnection() is called by the
|
||||
// connectionClosed() endpoint callback.
|
||||
if( reliable != null ) {
|
||||
// Close with flush so we make sure our
|
||||
// message gets out
|
||||
|
@ -181,6 +181,8 @@ public class SelectorKernel extends AbstractKernel
|
||||
*/
|
||||
protected void closeEndpoint( NioEndpoint p ) throws IOException
|
||||
{
|
||||
log.log( Level.INFO, "Closing endpoint:{0}.", p );
|
||||
|
||||
thread.cancel(p);
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ import com.jme3.network.kernel.*;
|
||||
*/
|
||||
public class UdpEndpoint implements Endpoint
|
||||
{
|
||||
private long id;
|
||||
private long id;
|
||||
private SocketAddress address;
|
||||
private DatagramSocket socket;
|
||||
private UdpKernel kernel;
|
||||
|
@ -152,6 +152,8 @@ public class UdpKernel extends AbstractKernel
|
||||
*/
|
||||
protected void closeEndpoint( UdpEndpoint p ) throws IOException
|
||||
{
|
||||
log.log( Level.INFO, "Closing endpoint:{0}.", p );
|
||||
|
||||
// Just book-keeping to do here.
|
||||
socketEndpoints.remove( p.getRemoteAddress() );
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user