Initial revision of cocktail multiplayer networked gaming platform. (Far

from complete.)


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2001-05-22 06:08:00 +00:00
parent 53d02843bb
commit 40ecd80e09
25 changed files with 1544 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
Cher Mk3 Design -*- outline -*-
* Why Cher?
The basic function of this layer is to allow the sharing (Cher-ing) of
information among different nodes in the network. Plus, I don't think Cher
has ever had a software system named after her and it's high time. Imagine
Cher as the social lubricant that allows the party goers to communicate.
* Client components
** DObjectManager
Manages object proxies; converts value change requests into events,
forwards them via the iomgr; dispatches events on incoming queue; reaps
proxies when last subscriber goes away
** UI (AWT/Swing)
Standard AWT/Swing UI
** UI (Controller)?
Provides a paradigm of controllers and commands; code can post commands
back to the controller queue for later execution; UI elements structured
to automatically generate commands; will probably opt not to use this in
favor of Swing's built-in paradigms
** I/O Manager
*** Reader
Reads incoming data from the socket; decodes messages; posts events to
domgr queue; notifies object subscription penders (this should be done
asychronously)
*** Writer
Encodes object subscription and event forwarding requests; writes them to
the outgoing socket
** Client object
Informs exo-client about connection state changes; provides interface to
connection + authentication (logon) and disconnection (logoff); provides
access to omgr and client dobj
+94
View File
@@ -0,0 +1,94 @@
Cher Mk3 Notes -*- outline -*-
* 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