Added a mechanism for participating in server shutdown.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2356 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
//
|
//
|
||||||
// $Id: PresentsServer.java,v 1.30 2003/01/14 22:36:58 shaper Exp $
|
// $Id: PresentsServer.java,v 1.31 2003/03/30 20:40:47 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.presents.server;
|
package com.threerings.presents.server;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.samskivert.util.IntervalManager;
|
import com.samskivert.util.IntervalManager;
|
||||||
|
import com.samskivert.util.ObserverList;
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
import com.samskivert.util.SystemInfo;
|
import com.samskivert.util.SystemInfo;
|
||||||
|
|
||||||
@@ -47,6 +48,16 @@ public class PresentsServer
|
|||||||
StringBuffer buffer, long now, long sinceLast);
|
StringBuffer buffer, long now, long sinceLast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Implementers of this interface will be notified when the server is
|
||||||
|
* shutting down. */
|
||||||
|
public static interface Shutdowner
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Called when the server is shutting down.
|
||||||
|
*/
|
||||||
|
public void shutdown ();
|
||||||
|
}
|
||||||
|
|
||||||
/** The manager of network connections. */
|
/** The manager of network connections. */
|
||||||
public static ConnectionManager conmgr;
|
public static ConnectionManager conmgr;
|
||||||
|
|
||||||
@@ -194,15 +205,38 @@ public class PresentsServer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests that the server shut down.
|
* Requests that the server shut down. All registered shutdown
|
||||||
|
* participants will be shut down, following which the server process
|
||||||
|
* will be terminated.
|
||||||
*/
|
*/
|
||||||
public static void shutdown ()
|
public static void shutdown ()
|
||||||
{
|
{
|
||||||
// shut down our managers
|
// shut down the connection manager (this will cease all network
|
||||||
|
// activity but not actually close the connections)
|
||||||
conmgr.shutdown();
|
conmgr.shutdown();
|
||||||
|
|
||||||
|
// shut down all shutdown participants
|
||||||
|
_downers.apply(new ObserverList.ObserverOp() {
|
||||||
|
public boolean apply (Object observer) {
|
||||||
|
((Shutdowner)observer).shutdown();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// finally shut down the invoker and distributed object manager
|
||||||
|
invoker.shutdown();
|
||||||
omgr.shutdown();
|
omgr.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers an entity that will be notified when the server is
|
||||||
|
* shutting down.
|
||||||
|
*/
|
||||||
|
public static void registerShutdowner (Shutdowner downer)
|
||||||
|
{
|
||||||
|
_downers.add(downer);
|
||||||
|
}
|
||||||
|
|
||||||
public static void main (String[] args)
|
public static void main (String[] args)
|
||||||
{
|
{
|
||||||
Log.info("Presents server starting...");
|
Log.info("Presents server starting...");
|
||||||
@@ -248,6 +282,10 @@ public class PresentsServer
|
|||||||
/** Used to generate "state of server" reports. */
|
/** Used to generate "state of server" reports. */
|
||||||
protected static ArrayList _reporters = new ArrayList();
|
protected static ArrayList _reporters = new ArrayList();
|
||||||
|
|
||||||
|
/** A list of shutdown participants. */
|
||||||
|
protected static ObserverList _downers =
|
||||||
|
new ObserverList(ObserverList.SAFE_IN_ORDER_NOTIFY);
|
||||||
|
|
||||||
/** The frequency with which we generate "state of server" reports. */
|
/** The frequency with which we generate "state of server" reports. */
|
||||||
protected static final long REPORT_INTERVAL = 15 * 60 * 1000L;
|
protected static final long REPORT_INTERVAL = 15 * 60 * 1000L;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user