Merge branch 'master' of github.com:jeena/GGS-report
This commit is contained in:
commit
6876290535
1 changed files with 277 additions and 133 deletions
410
report.lyx
410
report.lyx
|
@ -5184,7 +5184,7 @@ name "sec:Communication-with-the-GDL-VM"
|
||||||
A game launched on the GGS is run within a virtual machine.
|
A game launched on the GGS is run within a virtual machine.
|
||||||
For each programming language supported, there is a virtual machine which
|
For each programming language supported, there is a virtual machine which
|
||||||
interprets the game.
|
interprets the game.
|
||||||
Furthermore an interface for communication between the GGS, the game and
|
Furthermore an interface for communication among the GGS, the game and
|
||||||
the players playing the game is present.
|
the players playing the game is present.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -5212,7 +5212,7 @@ localStorage
|
||||||
.
|
.
|
||||||
The game state is safely stored in a database and retrieved for manipulation
|
The game state is safely stored in a database and retrieved for manipulation
|
||||||
by a call for the world object.
|
by a call for the world object.
|
||||||
Interaction with the players is done by using the
|
Interaction with the players are done by using the
|
||||||
\emph on
|
\emph on
|
||||||
|
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
|
@ -5309,7 +5309,7 @@ reference "alg:exposing-erlang"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
In JavaScript is is common to use a top level object, called a global object,
|
In JavaScript it is common to use a top level object, called a global object,
|
||||||
to establish a global scope.
|
to establish a global scope.
|
||||||
This allows the declaration of global variables and functions.
|
This allows the declaration of global variables and functions.
|
||||||
To gain access to the global object in the GGS, the
|
To gain access to the global object in the GGS, the
|
||||||
|
@ -5384,7 +5384,7 @@ localStorage
|
||||||
\noun default
|
\noun default
|
||||||
objects are dummy objects, which provide no functionality, these two objects
|
objects are dummy objects, which provide no functionality, these two objects
|
||||||
are simply placed in the GDL for the purpose clearing up the code.
|
are simply placed in the GDL for the purpose clearing up the code.
|
||||||
In order to perform an action using the GGS and
|
To perform an action using the GGS and
|
||||||
\noun on
|
\noun on
|
||||||
localStorage
|
localStorage
|
||||||
\noun default
|
\noun default
|
||||||
|
@ -5834,7 +5834,7 @@ Techniques for ensuring reliability
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
One of the main goals of the project is to achieve high reliability.
|
One main goal of the project is to achieve high reliability.
|
||||||
The term 'reliable system' is defined by the IEEE as
|
The term 'reliable system' is defined by the IEEE as
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -6042,7 +6042,7 @@ key "Savor:1997:HSA:851010.856089"
|
||||||
There are several approaches to supervisor design in general (when not just
|
There are several approaches to supervisor design in general (when not just
|
||||||
considering how they work in Erlang).
|
considering how they work in Erlang).
|
||||||
One common approach is to have the supervisor look in to the state of the
|
One common approach is to have the supervisor look in to the state of the
|
||||||
process(es) it supervises, and let the supervisor make decisions based
|
process(es) it supervises, and let the supervisor makes decisions based
|
||||||
on this state.
|
on this state.
|
||||||
The supervisor has a specification of how the process it supervises should
|
The supervisor has a specification of how the process it supervises should
|
||||||
function, this is how it makes decisions.
|
function, this is how it makes decisions.
|
||||||
|
@ -6054,18 +6054,18 @@ In Erlang, there is a simple version of supervisors.
|
||||||
No state of the processes being supervised is inspected.
|
No state of the processes being supervised is inspected.
|
||||||
There is, however a specification of how the supervised processes should
|
There is, however a specification of how the supervised processes should
|
||||||
behave, but on a higher level.
|
behave, but on a higher level.
|
||||||
The specification describes things such as how many times in a given time
|
The specification describes things such as how many times in a given interval
|
||||||
interval a child process may crash, which processes need restarting when
|
a child process may crash, which processes need restarting when crashes
|
||||||
crashes occur, etc.
|
occur, etc.
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
When the linking of processes in order to monitor exit behavior is coupled
|
When the linking of processes to monitor exit behavior is coupled with the
|
||||||
with the transparent distribution of Erlang, a very powerful supervision
|
transparent distribution of Erlang, a very powerful supervision system
|
||||||
system is created.
|
is created.
|
||||||
For instance, we can restart a failing process on a different, new node,
|
For instance, it is possible to restart a failing process on a different,
|
||||||
with minimal impact on the system as a whole.
|
new node, with minimal impact on the system as a whole.
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -6108,28 +6108,28 @@ reference "fig:The-supervisor-structure"
|
||||||
subsystem.
|
subsystem.
|
||||||
Since these two systems perform very different tasks they have been separated.
|
Since these two systems perform very different tasks they have been separated.
|
||||||
Each subsystem has one worker process, the coordinator or the dispatcher.
|
Each subsystem has one worker process, the coordinator or the dispatcher.
|
||||||
The worker process keeps a state which should not be lost upon a crash.
|
The worker process keeps a state which should not be lost on a crash.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
A choice has been made to let faulty processes crash very easily when they
|
A choice has been made to let faulty processes crash very easily when they
|
||||||
receive bad data, or something unexpected happens.
|
receive bad data, or something unexpected happens.
|
||||||
The alternative to crashing would have been to try and fix this faulty
|
The alternative to crashing would have been to try to fix this faulty data,
|
||||||
data, or to foresee the unexpected events.
|
or to foresee the unexpected events.
|
||||||
This was not chosen since it is so simple to monitor and restart processes,
|
This was not chosen since it is so simple to monitor and restart processes,
|
||||||
and so difficult to try and mend broken states.
|
and so difficult to try to mend broken states.
|
||||||
This approach is something widely deployed in the Erlang world, and developers
|
This approach is something widely deployed in the Erlang world, and developers
|
||||||
are often encouraged to “Let it crash”.
|
are often encouraged to “Let it crash”.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
To prevent any data loss, the good state of the worker processes is stored
|
To prevent any data loss, the good state of the worker processes are stored
|
||||||
in their respective backup processes.
|
in their respective backup processes.
|
||||||
When a worker process (re)starts, the backup process is queried for any
|
When a worker process (re)starts, the backup process is queried for any
|
||||||
previous state, if there is any, that state is loaded in to the worker
|
previous state, if there is any, that state is loaded in to the worker
|
||||||
and it proceeds where it left off.
|
and it proceeds where it left off.
|
||||||
If on the other hand no state is available, a special message is delivered
|
If on the other hand no state is available, a special message is delivered
|
||||||
instead, making the worker create a new state, this is what happens when
|
instead, making the worker creates a new state, this is what happens when
|
||||||
the workers are first created.
|
the workers are first created.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -6138,14 +6138,13 @@ Redundancy
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The modules in the GGS are built to be capable of redundant operation.
|
The modules in the GGS are built to be capable of redundant operations.
|
||||||
By adding a backup process to sensitive processes, the state can be kept
|
By adding a backup process to sensitive processes, the state can be kept
|
||||||
in the event of a crash.
|
in the event of a crash.
|
||||||
The coordinator of the GGS prototype has this backup feature built in.
|
The coordinator of the GGS prototype has this backup feature built in.
|
||||||
The coordinator passes state along to the backup process which keeps the
|
The coordinator passes state along to the backup process which keeps the
|
||||||
data safe.
|
data safe.
|
||||||
In the event of a crash, the coordinator recovers the state from the backup
|
If a crash occurs, the coordinator recovers the state from the backup process.
|
||||||
process.
|
|
||||||
Figure
|
Figure
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
|
@ -6409,8 +6408,8 @@ Typical communication
|
||||||
This case study describes the flow through the GGS when a typical command
|
This case study describes the flow through the GGS when a typical command
|
||||||
is encountered.
|
is encountered.
|
||||||
Below is a case study where a chat client sends a message to change the
|
Below is a case study where a chat client sends a message to change the
|
||||||
nick of a user.
|
nick name of a user.
|
||||||
The actual code performing the change of a nick in JavaScript is discussed
|
The actual code performing the change of a nick name in JavaScript is discussed
|
||||||
in section
|
in section
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
|
@ -6457,7 +6456,8 @@ The protocol parser sends this Erlang touple back to the player process.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The player process checks if it is a Server-Command or a Game-Command.
|
The player process checks if the command is is a Server-Command or a Game-Comman
|
||||||
|
d.
|
||||||
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
|
||||||
process.
|
process.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -6469,31 +6469,21 @@ The table process sends it to its own Game VM process.
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The game VM process calls the function
|
The game VM process calls the function
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand(
|
|
||||||
\begin_inset Quotes eld
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand(278d5 ..
|
||||||
|
49, nick, Peter)}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
278d5002-77d6-11e0-b772-af884def5349
|
|
||||||
\begin_inset Quotes erd
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
,
|
|
||||||
\begin_inset Quotes eld
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
nick
|
|
||||||
\begin_inset Quotes erd
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
,
|
|
||||||
\begin_inset Quotes eld
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
Peter
|
|
||||||
\begin_inset Quotes erd
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
)
|
|
||||||
\emph default
|
\emph default
|
||||||
within the JavaScript VM.
|
within the JavaScript VM.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -6514,25 +6504,64 @@ reference "sec:Example-of-a-GGS-app"
|
||||||
|
|
||||||
we see that the GGS-functions
|
we see that the GGS-functions
|
||||||
\emph on
|
\emph on
|
||||||
GGS.localStorage.setItem(key, value)
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt GGS.localStorage.setItem(key, value)}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
and
|
and
|
||||||
\emph on
|
\emph on
|
||||||
GGS.localStorage(key)
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt GGS.localStorage(key)}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
are used.
|
are used.
|
||||||
Both are callbacks coupled to the database module functions.
|
Both are callbacks coupled to the database module functions.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
Data is being read from and written to the database and handed over to the
|
Data is read from and written to the database and handed over to the JSVM
|
||||||
JSVM via the database process.
|
via the database process.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
In the example the
|
In the example the
|
||||||
\emph on
|
\emph on
|
||||||
GGS.sendCommandToAll()
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt GGS.sendCommandToAll()}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\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.
|
||||||
|
@ -6686,12 +6715,38 @@ The game VM process executes the source code within the JavaScript VM.
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The JavaScript VM evaluates the source code - which has to implement the
|
The JavaScript VM evaluates the source code - which has to implement the
|
||||||
playerCommand() function - within the context of the game.
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand()}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
function - within the context of the game.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The game is at this point fully initialized and can be used by all clients
|
The game is at this point fully initialized and can be used by all clients
|
||||||
with help of the playerCommand() function.
|
with help of the
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand()}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
function.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
|
@ -6734,8 +6789,8 @@ Clients disconnect
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
When the last client disconnects the table process terminates and with it
|
When the last client disconnects, the table process terminates and with
|
||||||
the game context and database content (not implemented in the prototype).
|
it the game context and database content (not implemented in the prototype).
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
\begin_layout Subsection
|
||||||
|
@ -6765,12 +6820,38 @@ Game-Command
|
||||||
from a client, it is passed along to the game VM through a function called
|
from a client, it is passed along to the game VM through a function called
|
||||||
|
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
which is the entry point for each game and has to be implemented by the
|
which is the entry point for each game and has to be implemented by the
|
||||||
developer; one can think of it like the
|
developer; it can be seen as the
|
||||||
\emph on
|
\emph on
|
||||||
main()
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt main()}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function of a C or Java program
|
function of a C or Java program
|
||||||
\emph on
|
\emph on
|
||||||
|
@ -6779,7 +6860,20 @@ main()
|
||||||
\emph default
|
\emph default
|
||||||
Typically the
|
Typically the
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function contains conditional constructs which decide the next action to
|
function contains conditional constructs which decide the next action to
|
||||||
take.
|
take.
|
||||||
|
@ -6792,7 +6886,20 @@ reference "alg:A-concrete-example"
|
||||||
|
|
||||||
an example of the
|
an example of the
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function can be seen.
|
function can be seen.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -6807,24 +6914,46 @@ reference "alg:A-concrete-example"
|
||||||
|
|
||||||
the
|
the
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function accepts two different commands.
|
function accepts two different commands.
|
||||||
The first command is a command which allows chat clients connected to the
|
The first command is a command which allows chat clients connected to the
|
||||||
chat server to change nicknames, which are used when chatting.
|
chat server to change nicknames, which are used when chatting.
|
||||||
In order to change the nickname, a client must send a Game-Command
|
In order to change the nickname, a client must send a Game-Command
|
||||||
\begin_inset Quotes eld
|
\noun on
|
||||||
\end_inset
|
|
||||||
|
|
||||||
nick
|
nick
|
||||||
\begin_inset Quotes erd
|
\noun default
|
||||||
|
with the actual new nick name as a argument.
|
||||||
|
When a message arrives to the GGS which has the form corresponding to the
|
||||||
|
nick name change, the
|
||||||
|
\emph on
|
||||||
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
with the actual new nickname as a argument.
|
|
||||||
When a message arrives to the GGS which has the form corresponding to the
|
|
||||||
nickname change, the
|
|
||||||
\emph on
|
|
||||||
playerCommand
|
|
||||||
\emph default
|
\emph default
|
||||||
function is called with the parameters
|
function is called with the parameters
|
||||||
\emph on
|
\emph on
|
||||||
|
@ -6840,26 +6969,61 @@ args
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The
|
The
|
||||||
\emph on
|
\emph on
|
||||||
playerCommand
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt playerCommand}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function is responsible for calling the helper functions responsibly for
|
function is responsible for calling the helper functions responsibly for
|
||||||
carrying out the actions of each message received.
|
carrying out the actions of each message received.
|
||||||
|
|
||||||
\emph on
|
\emph on
|
||||||
changeNick
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt changeNick}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
is a function which is called when the
|
is a function which is called when the
|
||||||
\begin_inset Quotes eld
|
\noun on
|
||||||
\end_inset
|
|
||||||
|
|
||||||
nick
|
nick
|
||||||
\begin_inset Quotes erd
|
\noun default
|
||||||
\end_inset
|
|
||||||
|
|
||||||
message is received.
|
message is received.
|
||||||
The
|
The
|
||||||
\emph on
|
\emph on
|
||||||
changeNick
|
|
||||||
|
\begin_inset ERT
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
{
|
||||||
|
\backslash
|
||||||
|
tt changeNick}
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
function uses a feature of the GGS called localstorage (see section
|
function uses a feature of the GGS called localstorage (see section
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
|
@ -6883,12 +7047,19 @@ reference "sub:The-database-module"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Access to the localStorage is provided through the
|
Access to the
|
||||||
|
\noun on
|
||||||
|
localStorage
|
||||||
|
\noun default
|
||||||
|
is provided through the
|
||||||
\emph on
|
\emph on
|
||||||
GGS object
|
\noun on
|
||||||
|
GGS
|
||||||
|
\noun default
|
||||||
|
|
||||||
\emph default
|
\emph default
|
||||||
, which also can be used to communicate with the rest of the system from
|
object, which also can be used to communicate with the rest of the system
|
||||||
the GDL.
|
from the GDL.
|
||||||
Implementation specifics of the GGS object are provided in
|
Implementation specifics of the GGS object are provided in
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
|
@ -7149,15 +7320,15 @@ name "cha:Problems-of-implementation"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
This chapter contains specific problems encountered when implementing the
|
This chapter contains descriptions of specific problems encountered when
|
||||||
GGS prototype.
|
implementing the GGS prototype.
|
||||||
Some of the problems described have solutions attached, however some problems
|
Some of the problems described have solutions attached, however some problems
|
||||||
were not solved, therefore only ideas for solutions have been attached.
|
were not solved, therefore only ideas for solutions have been attached.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The integration of JavaScript as a GDL in the GGS prototype was particularly
|
The integration of JavaScript as a GDL in the GGS prototype was particularly
|
||||||
difficult, and is handled in this section and so is the protocol design.
|
difficult, and is handled in this section, so is the protocol design.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
|
@ -7199,6 +7370,8 @@ V8
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
For the Mozilla machines, there exists a Erlang binding called erlang_js,
|
For the Mozilla machines, there exists a Erlang binding called erlang_js,
|
||||||
and for the V8 machine a binding called erlv8 exists.
|
and for the V8 machine a binding called erlv8 exists.
|
||||||
|
Below follows a discussion about the different bindings and machines, and
|
||||||
|
a motivation as to why erlv8 was preferred over erlang_js.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
\begin_layout Subsection
|
||||||
|
@ -7206,9 +7379,9 @@ erlang_js
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
erlang_js provides direct communication with the JavaScript VM.
|
erlang_js provides direct communication with the JavaScript VM, which is
|
||||||
Which is exactly what is desired, however also required is the possibility
|
exactly what is desired, however also required is the possibility to communicat
|
||||||
to communicate from JavaScript to Erlang.
|
e from JavaScript to Erlang.
|
||||||
The ability to communicate from JavaScript to Erlang is not yet implemented
|
The ability to communicate from JavaScript to Erlang is not yet implemented
|
||||||
in erlang_js, due to lack of time of the erlang_js developers.
|
in erlang_js, due to lack of time of the erlang_js developers.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -7232,8 +7405,8 @@ erlv8
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
erlv8 is powered by the V8 engine developed by Google.
|
erlv8 is powered by the V8 engine developed by Google.
|
||||||
The ability to communicate from JavaScript to Erlang using callbacks (aka
|
The ability to communicate from JavaScript to Erlang using NIF callbacks
|
||||||
NIF) is available in the erlv8 bindings and can be used within the GGS.
|
is available in the erlv8 bindings and can be used within the GGS.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -7311,9 +7484,10 @@ key "Slee2007"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The use of Thrift, Google protocol buffers - which is a different approach
|
The use of Google protocol buffers - which is a different approach to a
|
||||||
to that implemented by Google - or other protocols can be supported quite
|
standard protocol framework, implemented by Google - or other protocols
|
||||||
easily by developing protocol modules for each the protocols.
|
can be supported quite easily by developing protocol modules for each the
|
||||||
|
protocols.
|
||||||
No protocol modules for these protocols have however been developed during
|
No protocol modules for these protocols have however been developed during
|
||||||
the writing of this thesis.
|
the writing of this thesis.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -7403,31 +7577,11 @@ In this chapter the results of the GGS prototype are presented and discussed.
|
||||||
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
Statistics
|
Statistics
|
||||||
\begin_inset Note Note
|
|
||||||
status open
|
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
|
||||||
Mention the hardware which the GGS was run on; A Thinkpad T410 with a core
|
|
||||||
i5 and 4GB of ram.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
\begin_inset Note Note
|
|
||||||
status open
|
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
|
||||||
The testing of the GGS prototype occurred in two sessions
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_inset
|
|
||||||
|
|
||||||
Testing of the GGS took place in two separate sessions.
|
Testing of the GGS took place in two separate sessions.
|
||||||
The first session simulates a highly demanding application, the second
|
The first session simulated a highly demanding application, the second
|
||||||
session simulated a less demanding application.
|
session simulated a less demanding application.
|
||||||
The highly demanding application is a real time game which does several
|
The highly demanding application is a real time game which does several
|
||||||
asynchronous database writes each second.
|
asynchronous database writes each second.
|
||||||
|
@ -7542,6 +7696,11 @@ In the second testing session the delay between the server and clients was
|
||||||
messages are put in a queue within the system.
|
messages are put in a queue within the system.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
It should be noted that with distribution in place, having the GGS deployed
|
||||||
|
on several machines, test results could reveal much higher numbers.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
\begin_inset Note Note
|
\begin_inset Note Note
|
||||||
status collapsed
|
status collapsed
|
||||||
|
@ -7816,7 +7975,7 @@ The GGS was originally intended to be a distributed application, running
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Distribution was however not implemented in the GGS.
|
Distribution was however not implemented in the GGS.
|
||||||
Other parts of the GGS were prioritized.
|
Other parts of the GGS were prioritized.
|
||||||
A futute improvement is therefore to implement distribution in the GGS.
|
A future improvement is therefore to implement distribution in the GGS.
|
||||||
A simple way to achieve this is to keep one GGS instance as a coordinating
|
A simple way to achieve this is to keep one GGS instance as a coordinating
|
||||||
instance, and to keep clients on other instances of the GGS, which can
|
instance, and to keep clients on other instances of the GGS, which can
|
||||||
be dynamically added as new clients connect.
|
be dynamically added as new clients connect.
|
||||||
|
@ -7917,21 +8076,6 @@ textbf{ETS}}{Erlang Term Storage}
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
|
||||||
Documentation
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Standard
|
|
||||||
To start the GGS is not self explanatory.
|
|
||||||
This together with overall usage of GGS should be documented.
|
|
||||||
The interface for usage of game developers are also in need of documentation.
|
|
||||||
Features and requirements with respect to the GGS would assist users to
|
|
||||||
know what they need to use the GGS and how they would benefit of it.
|
|
||||||
The GGS does not support many programming languages nor does it have a
|
|
||||||
complete documentation.
|
|
||||||
This needs to be taken care of in future versions.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Chapter
|
\begin_layout Chapter
|
||||||
Conclusion
|
Conclusion
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue