More basic stuff.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@392 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2001-10-04 00:29:07 +00:00
parent cc53626cab
commit 7e3805f069
6 changed files with 235 additions and 0 deletions
+10
View File
@@ -9,3 +9,13 @@ services and built on top of the Cocktail networking platform.
The Mi Casa service is comprised of a server that can be configured to The Mi Casa service is comprised of a server that can be configured to
have any number of lobbies in which users can get together to play games. have any number of lobbies in which users can get together to play games.
* Notes
Maybe move lobby stuff into parlor.
Move lobby configuration (which lobbies to load) into database. Make it so
that lobbies can be created/destroyed on the fly.
Sort out a different way for lobbies to get configuration information than
being passed a properties file that was extracted from the server
configuration. We'll want inheritance and all that.
@@ -0,0 +1,18 @@
//
// $Id: LobbyCodes.java,v 1.1 2001/10/04 00:29:07 mdb Exp $
package com.threerings.micasa.lobdy;
import com.threerings.cocktail.cher.client.InvocationCodes;
/**
* Contains codes used by the lobby invocation services.
*/
public interface LobbyCodes extends InvocationCodes
{
/** The module name for the lobby services. */
public static final String MODULE_NAME = "lobby";
/** The message identifier for a get lobbies request. */
public static final String GET_LOBBIES_REQUEST = "GetLobbies";
}
@@ -0,0 +1,31 @@
//
// $Id: LobbyManager.java,v 1.1 2001/10/04 00:29:07 mdb Exp $
package com.threerings.micasa.lobdy;
import java.util.Properties;
import com.threerings.cocktail.party.server.PlaceManager;
import com.threerings.micasa.Log;
/**
* Takes care of the server side of a particular lobby.
*/
public class LobbyManager extends PlaceManager
{
/**
* Initializes this lobby manager with its configuration properties.
*
* @exception Exception thrown if a configuration error is detected.
*/
public void init (Properties config)
throws Exception
{
Log.info("Lobby manager initialized.");
}
protected Class getPlaceObjectClass ()
{
return LobbyObject.class;
}
}
@@ -0,0 +1,10 @@
//
// $Id: LobbyObject.dobj,v 1.1 2001/10/04 00:29:07 mdb Exp $
package com.threerings.micasa.lobdy;
import com.threerings.cocktail.party.data.PlaceObject;
public class LobbyObject extends PlaceObject
{
}
@@ -0,0 +1,40 @@
//
// $Id: LobbyProvider.java,v 1.1 2001/10/04 00:29:07 mdb Exp $
package com.threerings.micasa.lobdy;
import com.threerings.cocktail.cher.server.InvocationProvider;
import com.threerings.cocktail.party.data.BodyObject;
/**
* Handles server side of lobby-related invocation services.
*/
public class LobbyProvider
extends InvocationProvider implements LobbyCodes
{
/**
* Constructs a lobby provider instance which will be used to handle
* all lobby-related invocation service requests. This is
* automatically taken care of by the lobby registry, so no other
* entity need instantiate and register a lobby provider.
*
* @param lobreq a reference to the lobby registry active in this
* server.
*/
public LobbyProvider (LobbyRegistry lobreg)
{
_lobreg = lobreg;
}
/**
* Processes a request by the client to obtain a list of lobbies
* matching the supplied pattern string.
*/
public void handleGetLobbiesRequest (
BodyObject source, int invid, String pattern)
{
}
/** A reference to the lobby registry. */
protected LobbyRegistry _lobreg;
}
@@ -0,0 +1,126 @@
//
// $Id: LobbyRegistry.java,v 1.1 2001/10/04 00:29:07 mdb Exp $
package com.threerings.micasa.lobdy;
import java.util.Properties;
import com.samskivert.util.Config;
import com.samskivert.util.PropertiesUtil;
import com.threerings.micasa.Log;
import com.threerings.micasa.server.MiCasaServer;
/**
* The lobby registry is the primary class that coordinates the lobby
* services on the client. It sets up the necessary invocation services
* and keeps track of the lobbies in operation on the server. Only one
* lobby registry should be created on a server.
*
* <p> Presently, the lobby registry is configured with lobbies via the
* server configuration. An example configuration follows:
*
* <pre>
* lobby_ids = foolobby, barlobby, bazlobby
*
* foolobby.mgrclass = com.threerings.micasa.lobby.LobbyManager
* foolobby.config1 = some config value
* foolobby.config2 = some other config value
*
* barlobby.mgrclass = com.threerings.micasa.lobby.LobbyManager
* ...
* </pre>
*
* This information will be loaded from the MiCasa server configuration
* which means that it should live in
* <code>rsrc/config/micasa/server.properties</code> somwhere in the
* classpath where it will override the default MiCasa server properties
* file.
*/
public class LobbyRegistry
{
/**
* A simple class for keeping track of information for each lobby in
* operation on the server.
*/
public static class Lobby
{
/** The object id of the lobby place object. */
public int placeOid;
/** The human readable name of the lobby. */
public String name;
}
/**
* Initializes the registry. It will use the supplied configuration
* instance to determine which lobbies to load, etc.
*/
public void init (Config config)
{
_config = config;
// create our lobby managers
String[] lmgrs = config.getValue(LOBIDS_KEY, (String[])null);
if (lmgrs == null || lmgrs.length == 0) {
Log.warning("No lobbies specified in config file (via '" +
LOBIDS_KEY + "' parameter.");
} else {
for (int i = 0; i < lmgrs.length; i++) {
loadLobby(lmgrs[i]);
}
}
}
/**
* Extracts the properties for a lobby from the server config and
* creates and initializes the lobby manager.
*/
protected void loadLobby (String lobbyId)
{
try {
// extract the properties for this lobby
Properties props =
_config.getProperties(MiCasaServer.CONFIG_KEY);
props = PropertiesUtil.getSubProperties(props, lobbyId);
// get the lobby manager class
String lmgrClass = props.getProperty("mgrclass");
if (lmgrClass == null) {
throw new Exception("Missing 'mgrclass' definition in " +
"lobby configuration.");
}
// instantiate the manager class and create the lobby
LobbyManager lobmgr = (LobbyManager)
MiCasaServer.plreg.createPlace(Class.forName(lmgrClass));
// initialize the manager
lobmgr.init(props);
} catch (Exception e) {
Log.warning("Unable to create lobby manager " +
"[lobbyId=" + lobbyId + ", error=" + e + "].");
}
}
/**
* Returns information about all lobbies matching the supplied pattern
* string. Presently the pattern is interpreted as a simple prefix and
* all lobbies matching that prefix will be returned.
*
* @param pattern the pattern to match or null if all lobbies should
* be returned.
*/
public Lobby[] getLobbies (String pattern)
{
return null;
}
protected Config _config;
/** The configuration key for the lobby managers list. */
protected static final String LOBIDS_KEY =
MiCasaServer.CONFIG_KEY + ".lobby_ids";
}