Files
narya/src/java/com/threerings/micasa/client/MiCasaClient.java
T
Michael Bayne c6b0638e9e Apparently, we need an explicit protected constructor in the client
context impl inner class.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@877 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-01-19 04:15:25 +00:00

181 lines
5.0 KiB
Java

//
// $Id: MiCasaClient.java,v 1.9 2002/01/19 04:15:25 mdb Exp $
package com.threerings.micasa.client;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import com.samskivert.util.Config;
import com.threerings.presents.client.Client;
import com.threerings.presents.dobj.DObjectManager;
import com.threerings.crowd.client.LocationDirector;
import com.threerings.crowd.client.OccupantManager;
import com.threerings.crowd.client.PlaceView;
import com.threerings.parlor.client.ParlorDirector;
import com.threerings.micasa.Log;
import com.threerings.micasa.util.MiCasaContext;
/**
* The MiCasa client takes care of instantiating all of the proper
* managers and loading up all of the necessary configuration and getting
* the client bootstrapped. It can be extended by games that require an
* extended context implementation.
*/
public class MiCasaClient
implements Client.Invoker
{
/**
* Initializes a new client and provides it with a frame in which to
* display everything.
*/
public void init (MiCasaFrame frame)
throws IOException
{
// create our context
_ctx = createContextImpl();
// create the directors/managers/etc. provided by the context
createContextServices();
// for test purposes, hardcode the server info
_client.setServer("bering", 4007);
// keep this for later
_frame = frame;
// log off when they close the window
_frame.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent evt) {
// if we're logged on, log off
if (_client.loggedOn()) {
_client.logoff(true);
}
}
});
// create our client controller and stick it in the frame
_frame.setController(new ClientController(_ctx, _frame));
}
/**
* Returns a reference to the context in effect for this client. This
* reference is valid for the lifetime of the application.
*/
public MiCasaContext getContext ()
{
return _ctx;
}
/**
* Creates the {@link MiCasaContext} implementation that will be
* passed around to all of the client code. Derived classes may wish
* to override this and create some extended context implementation.
*/
protected MiCasaContext createContextImpl ()
{
return new MiCasaContextImpl();
}
/**
* Creates and initializes the various services that are provided by
* the context. Derived classes that provide an extended context
* should override this method and create their own extended
* services. They should be sure to call
* <code>super.createContextServices</code>.
*/
protected void createContextServices ()
throws IOException
{
// create the handles on our various services
_config = new Config();
_client = new Client(null, this);
// create our managers and directors
_locdir = new LocationDirector(_ctx);
_occmgr = new OccupantManager(_ctx);
_pardtr = new ParlorDirector(_ctx);
}
// documentation inherited
public void invokeLater (Runnable run)
{
// queue it on up on the swing thread
SwingUtilities.invokeLater(run);
}
/**
* The context implementation. This provides access to all of the
* objects and services that are needed by the operating client.
*/
protected class MiCasaContextImpl implements MiCasaContext
{
/**
* Apparently the default constructor has default access, rather
* than protected access, even though this class is declared to be
* protected. Why, I don't know, but we need to be able to extend
* this class elsewhere, so we need this.
*/
protected MiCasaContextImpl ()
{
}
public Config getConfig ()
{
return _config;
}
public Client getClient ()
{
return _client;
}
public DObjectManager getDObjectManager ()
{
return _client.getDObjectManager();
}
public LocationDirector getLocationDirector ()
{
return _locdir;
}
public OccupantManager getOccupantManager ()
{
return _occmgr;
}
public ParlorDirector getParlorDirector ()
{
return _pardtr;
}
public void setPlaceView (PlaceView view)
{
// stick the place view into our frame
_frame.setPanel((JPanel)view);
}
public MiCasaFrame getFrame ()
{
return _frame;
}
}
protected MiCasaContext _ctx;
protected MiCasaFrame _frame;
protected Config _config;
protected Client _client;
protected LocationDirector _locdir;
protected OccupantManager _occmgr;
protected ParlorDirector _pardtr;
}