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:
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user