added Initialization and life cycle of a game

This commit is contained in:
Jeena Paradies 2011-05-10 13:34:09 +02:00
parent 775ea8567c
commit d9a535f828

View file

@ -6583,38 +6583,38 @@ reference "fig:The-layout-of"
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
Client packages a Game-Command into a package which conforms to the protocol The client packages a Game-Command into a package which conforms to the
structure the GGS is using and sends it over the network protocol structure the GGS is using and sends it over the network.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The player module, which is coupled to the TCP-module to react on incoming The player process, which is coupled to the TCP-process which reacts on
messages accepts the message and forwards the raw data to the protocol incoming messages, accepts the message and forwards the raw data to the
parser module protocol parser process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The protocol parser parses the message and brings it into the format of The protocol parser process parses the message and brings it into the format
the internal GGS presentation of such a message, which is just a specialized of the internal GGS presentation of such a message, which is just a specialized
Erlang tuple Erlang tuple.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The protocol parser sends this Erlang touple back to the player module The protocol parser sends this Erlang touple back to the player process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The player module checks if it is a Server-Command or a Game-Command. The player process checks if it is a Server-Command or a Game-Command.
In our example it is a Game-Command and it sends the message to the table In our example it is a Game-Command and it sends the message to the table
module process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The table module sends it to its own Game VM The table process sends it to its own Game VM process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The Game VM module calls the function The game VM process calls the function
\emph on \emph on
playerCommand( playerCommand(
\begin_inset Quotes eld \begin_inset Quotes eld
@ -6642,7 +6642,7 @@ Peter
) )
\emph default \emph default
within the JavaScript VM within the JavaScript VM.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
@ -6673,7 +6673,7 @@ GGS.localStorage(key)
\begin_layout Enumerate \begin_layout Enumerate
Data is being read from and written to the database and handed over to the Data is being read from and written to the database and handed over to the
JSVM via the database module JSVM via the database process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
@ -6682,44 +6682,241 @@ In the example the
GGS.sendCommandToAll() GGS.sendCommandToAll()
\emph default \emph default
is being called then which is a callback to a function of the table module is being called then which is a callback to a function of the table module
which iterates through its player list and sends the command to every player which iterates through its player list and sends the command to every player.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The table module sends every player instance the message to send the message The table process sends every player process the message to send the message
with the change of a nickname of a particular user to its own client. with the change of a nickname of a particular user to its own client.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The player module asks the protocol module to create a message conforming The player process asks the protocol process to create a message conforming
to the protocol which is being used to the protocol which is being used.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The protocol module creates a string according to the protocol and returns The protocol process creates a string according to the protocol and returns
it to the player module it to the player process.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
The player module sends the message with help of the gen_tcp module to the The player process sends the message with help of the gen_tcp module to
client the client.
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
Initialization of a game Initialization and life cycle of a game
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
\begin_inset Note Note This case study describes the initialization and definition of a game and
status open in roughly its life cycle untill it is removed from the GGS.
\begin_layout Plain Layout
Fill this in!
\end_layout \end_layout
\begin_layout Subsubsection
Initialization
\end_layout
\begin_layout Enumerate
A client connects via TCP to the GGS.
\end_layout
\begin_layout Enumerate
The dispatcher process reacts on the incomming connecction and creates a
new player process.
\end_layout
\begin_layout Enumerate
The dispatcher process couples the TCP connection to the newly created player
process, this way the new player process is responsible to react on incoming
messages.
\end_layout
\begin_layout Enumerate
The client sends a message with a
\begin_inset Quotes eld
\end_inset \end_inset
hello
\begin_inset Quotes erd
\end_inset
Server-Command to initiate a handshake.
\end_layout
\begin_layout Enumerate
The player module parses the message with help of the protocol module.
\end_layout
\begin_layout Enumerate
If the message was just a plain
\begin_inset Quotes eld
\end_inset
hello
\begin_inset Quotes erd
\end_inset
, without a table token, then the player process asks the coordinator process
to create a new table process and add this player process to this newly
created table.
If the client did send a table token then the player process asks the coordinat
or to att the player process to this table.
\end_layout
\begin_layout Enumerate
During the creation of a new table the table process creates a new game
VM process which creates its own game context within the JavaScript VM.
\end_layout
\begin_layout Enumerate
The player process answers to the client with a
\begin_inset Quotes eld
\end_inset
hello
\begin_inset Quotes erd
\end_inset
Client-Command and passes on the clients player token along with the informatio
n about if it should define a game - because it is the first client to connect
to this table - or not and the table token it was assigned to.
\end_layout
\begin_layout Subsubsection
Defining a game
\end_layout
\begin_layout Standard
Because of the generic nature of the GGS it is the clients job to load up
the source code of the game it would like to play.
It is possible to alter the GGS prototype so that only the server maintainer
is able to install new games on the server but this way the GGS is much
more generic.
\end_layout
\begin_layout Standard
The first client which connects to a table is responsible to provide the
JavaScript server source code.
To do so there is a
\begin_inset Quotes eld
\end_inset
define
\begin_inset Quotes erd
\end_inset
Server-Command.
\end_layout
\begin_layout Enumerate
If during the handshake with the
\begin_inset Quotes eld
\end_inset
hello
\begin_inset Quotes erd
\end_inset
command the client gets the task of providing the server source code then
it sends a
\begin_inset Quotes eld
\end_inset
define
\begin_inset Quotes erd
\end_inset
Server-Command message with the source code as its parameter.
\end_layout
\begin_layout Enumerate
The player process parses, once again with help of the protocoll module,
the message.
\end_layout
\begin_layout Enumerate
The player process sends the source code to its table process as a
\begin_inset Quotes eld
\end_inset
define
\begin_inset Quotes erd
\end_inset
message.
\end_layout
\begin_layout Enumerate
The table process forwards it to the game VM process.
\end_layout
\begin_layout Enumerate
The game VM process executes the source code within the JavaScript VM.
\end_layout
\begin_layout Enumerate
The JavaScript VM evaluates the source code - which has to implement the
playerCommand() function - within the games context.
\end_layout
\begin_layout Enumerate
Now the game is fully initialized and can be used by all clients with help
of the playerCommand() function.
\end_layout
\begin_layout Enumerate
The table process saves the source code in the database for backup reasons
(this is not yet implemented).
\end_layout
\begin_layout Enumerate
The player process sends a
\begin_inset Quotes eld
\end_inset
defined
\begin_inset Quotes erd
\end_inset
Client-Command to the client.
This way the client is notified that everything went well and it can start
the game.
\end_layout
\begin_layout Standard
If it is not the first client on the table, it will get a define=false during
the handshake and is not obligated to send the server source code.
\end_layout
\begin_layout Subsubsection
Life cycle
\end_layout
\begin_layout Enumerate
Initialization
\end_layout
\begin_layout Enumerate
Defining a game
\end_layout
\begin_layout Enumerate
Other clients connect and initialize but do not define anything.
\end_layout
\begin_layout Enumerate
Typical communication
\end_layout
\begin_layout Enumerate
Clients disconnect
\end_layout
\begin_layout Enumerate
When the last client disconnects the table process terminates and with it
the game context and database content (not implemented yet).
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection