Cher Mk3 Notes -*- outline -*- * Marshaller Consider how the dobject marshaller deals with classes loaded and reloaded using flushable classloaders. Also consider whether access to the marshaller cache needs to be synchronized. * Check into "connection closed by peer" thread exiting on client * TypedObjectFactory Maybe modify so that types are assigned automatically even if everything has to be registered in a single place, since it pretty much does anyway. * Server components: + Connection manager + Client manager + Event dispatch thread (DObjectManager) + Server side services? + Room/Game managers + Info repository for shared info? * Client components: + Network client (auth + DObject services) + Applet shell + Panel management + Components: chatbox, occupant info, turn indicator? + Room/Game panels, controllers, etc. * Client detail: + Supply credentials (username, password) + Establishes, maintains connection: login (connect), logout (disconnect) + Creates, manages client-side DObjectManager * Events in the client will be dispatched on the AWT thread - Provide pluggable "event dispatcher" on the client - Allow extension of Event as DispatchableEvent so that event objects themselves can extend Runnable and be popped right into SwingUtil.invokeLater(). * Client perform all network ops on own thread, will call back to main code through Observer interface to notify of state changes in the authentication process/connectedness: public interface ClientObserver { public void didConnect (); public void connectionFailed (); public void didLogon (); public void logonFailed (); public void didDisconnect (); public void didLogoff (); } * Three Rings Client flowlist: Instantiate client Obtain auth info Obtain room info Authenticate * Distributed objects are defined like a class with a set of public data members which is then converted into an actual class with get/set methods for each member. public dclass GameObject { public int[] players; public String description; } becomes public class GameObject extends DObject { public void setPlayers (int[] players); public void setPlayersAt (int index, int value); public int[] getPlayers (); public int getPlayersAt (int index); public void setDescription (String description); public String getDescription (); } * Classes: DObjectManager DObject DEvent DTransaction Subscriber * Events: ATTRIBUTE_CHANGED ATTRIBUTES_CHANGED ATTRIBUTES_CHANGED_SPLIT ELEMENT_CHANGED OBJECT_DESTROYED ELEMENT_ADDED ELEMENT_REMOVED OID_ADDED OID_REMOVED