GGS-report/stats.txt
2011-05-13 12:08:00 +02:00

8139 lines
644 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 1) #LyX 2.0 created this file. For more info see http://www.lyx.org/
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 2) \lyxformat 413
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3) \begin_document
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 4) \begin_header
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5) \textclass report
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6) \begin_preamble
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7) \usepackage{indentfirst}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8) \usepackage{tocloft}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 9) \usepackage{calc}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 10) \date{}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 11) \usepackage[section] {placeins}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 12) \def\myClearpage{%
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 13) \ifvmode
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 14) \ifnum \@dbltopnum =\m@ne
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 15) \ifdim \pagetotal <\topskip
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 16) \hbox{}%
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 17) \fi
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 18) \fi
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 19) \fi
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 20) % \newpage
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 21) \write\m@ne{}%
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 22) \vbox{}%
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 23) \penalty -\@Mi
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 24) }
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 25) \def\myCleardoublepage{\myClearpage\if@twoside \ifodd\c@page\else
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 26) \hbox{}\if@twocolumn\hbox{}\fi\fi\fi}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 27) \usepackage{morefloats}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 28) \usepackage{graphicx}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 29) \usepackage{subfig}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 30) \usepackage{tocloft}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 31) \renewcommand{\cftchapfont}{\bfseries}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 32) \renewcommand{\cftchappagefont}{\bfseries}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 33) \renewcommand{\cftchappresnum}{Chapter }
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 34) \renewcommand{\cftchapnumwidth}{6em}
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 35)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 36) \oddsidemargin 0.5in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 37) \textwidth 6in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 38) \topmargin 0.0in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 39) \textheight 8.0in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 40) \setlength\topskip{24pt}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 41) \footskip 0.75in
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 42)
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 43) \usepackage[compact]{titlesec}
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 44)
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 45)
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 46) \titleformat{\chapter}[display]
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 47) {\vskip-8em\normalfont\bfseries}
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 48) {\LARGE\raggedright\thechapter}
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 49) {14ex}
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 50) {\vspace{-20ex}%
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 51) \LARGE\raggedleft}
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 52) [\vspace{1ex}%
8b927de4 (Jonatan Pålsson 2011-03-22 23:42:51 +0100 53) {\titlerule[1pt]}]
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 54)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 55) \usepackage[absolute]{textpos}
1d72336c (niklas 2011-03-25 14:15:14 +0100 56)
1d72336c (niklas 2011-03-25 14:15:14 +0100 57) \usepackage{fancyheadings}
1d72336c (niklas 2011-03-25 14:15:14 +0100 58) \pagestyle{fancy}
1d72336c (niklas 2011-03-25 14:15:14 +0100 59) \lhead{\thechapter}
5478f1a4 (Jeena Paradies 2011-03-30 12:27:25 +0200 60)
5478f1a4 (Jeena Paradies 2011-03-30 12:27:25 +0200 61) \usepackage[hmargin=3cm,vmargin=3.5cm]{geometry}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 62) \usepackage{algorithmic}
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 63) \usepackage{listings}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 64)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 65) \usepackage{color}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 66) \definecolor{lightgray}{rgb}{.9,.9,.9}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 67) \definecolor{darkgray}{rgb}{.4,.4,.4}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 68) \definecolor{purple}{rgb}{0.65, 0.12, 0.82}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 69)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 70) \lstdefinelanguage{JavaScript}{
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 71) keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 72) keywordstyle=\color{blue}\bfseries,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 73) ndkeywords={class, export, boolean, throw, implements, import, this},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 74) ndkeywordstyle=\color{darkgray}\bfseries,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 75) identifierstyle=\color{black},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 76) sensitive=false,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 77) comment=[l]{//},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 78) morecomment=[s]{/*}{*/},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 79) commentstyle=\color{purple}\ttfamily,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 80) stringstyle=\color{red}\ttfamily,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 81) morestring=[b]',
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 82) morestring=[b]"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 83) }
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 84)
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 85) \lstdefinelanguage{Erlang}{
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 86) keywords={typeof, true, false, catch, return, null, catch, switch, var, if, in, while, do, else, case, break, expose},
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 87) keywordstyle=\color{blue}\bfseries,
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 88) ndkeywords={class, export, boolean, throw, implements, import, this,erlv8_vm, erlv8_fun_invocation
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 89) ,erlv8_object},
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 90) ndkeywordstyle=\color{darkgray}\bfseries,
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 91) identifierstyle=\color{black},
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 92) sensitive=false,
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 93) comment=[l]{\%},
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 94) morecomment=[s]{/*}{*/},
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 95) commentstyle=\color{purple}\ttfamily,
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 96) stringstyle=\color{red}\ttfamily,
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 97) morestring=[b]',
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 98) morestring=[b]"
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 99) }
4d3bd757 (Jonatan Pålsson 2011-05-04 12:38:34 +0200 100)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 101) \usepackage{float}
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 102)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 103) \floatstyle{ruled}
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 104) \newfloat{code}{thp}{lop}
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 105) \floatname{code}{Code}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 106)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 107) \usepackage{nomencl}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 108) \makenomenclature
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 109) \renewcommand{\nomname}{Glossary}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 110) \end_preamble
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 111) \use_default_options true
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 112) \maintain_unincluded_children false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 113) \language english
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 114) \language_package default
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 115) \inputencoding auto
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 116) \fontencoding global
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 117) \font_roman lmodern
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 118) \font_sans default
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 119) \font_typewriter default
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 120) \font_default_family rmdefault
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 121) \use_non_tex_fonts false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 122) \font_sc false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 123) \font_osf false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 124) \font_sf_scale 100
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 125) \font_tt_scale 100
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 126)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 127) \graphics default
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 128) \default_output_format default
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 129) \output_sync 0
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 130) \bibtex_command default
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 131) \index_command default
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 132) \paperfontsize default
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 133) \spacing onehalf
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 134) \use_hyperref false
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 135) \papersize a4paper
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 136) \use_geometry false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 137) \use_amsmath 1
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 138) \use_esint 1
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 139) \use_mhchem 1
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 140) \use_mathdots 1
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 141) \cite_engine natbib_authoryear
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 142) \use_bibtopic false
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 143) \use_indices false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 144) \paperorientation portrait
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 145) \suppress_date false
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 146) \use_refstyle 0
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 147) \index Index
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 148) \shortcut idx
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 149) \color #008000
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 150) \end_index
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 151) \paperwidth 11in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 152) \paperheight 8.5in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 153) \leftmargin 1.25in
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 154) \topmargin 0in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 155) \rightmargin 1in
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 156) \bottommargin 1.7in
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 157) \secnumdepth 2
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 158) \tocdepth 2
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 159) \paragraph_separation indent
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 160) \paragraph_indentation default
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 161) \quotes_language english
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 162) \papercolumns 1
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 163) \papersides 1
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 164) \paperpagestyle empty
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 165) \tracking_changes false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 166) \output_changes false
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 167) \html_math_output 0
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 168) \html_css_as_file 0
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 169) \html_be_strict false
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 170) \end_header
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 171)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 172) \begin_body
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 173)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 174) \begin_layout Standard
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 175) \begin_inset ERT
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 176) status open
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 177)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 178) \begin_layout Plain Layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 179)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 180)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 181) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 182) begin{textblock*}{
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 183) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 184) paperwidth}(0mm,40mm)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 185) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 186)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 187) \begin_layout Plain Layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 188)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 189)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 190) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 191) begin{center}
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 192) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 193)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 194) \begin_layout Plain Layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 195)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 196)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 197) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 198) includegraphics[width=
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 199) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 200) paperwidth/2]{graphics/logo}
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 201) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 202)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 203) \begin_layout Plain Layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 204)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 205)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 206) \backslash
ebc5ad85 (Jeena Paradies 2011-03-30 11:12:51 +0200 207) end{center}
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 208) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 209)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 210) \begin_layout Plain Layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 211)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 212)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 213) \backslash
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 214) end{textblock*}
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 215) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 216)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 217) \end_inset
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 218)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 219)
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 220) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 221)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 222) \begin_layout Title
8179b8c5 (Jeena Paradies 2011-05-06 10:58:31 +0200 223) A Reliable Generic Game Server
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 224) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 225)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 226) \begin_layout Author
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 227) Niklas Landin
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 228) \begin_inset Newline newline
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 229) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 230)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 231) Richard Pannek
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 232) \begin_inset Newline newline
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 233) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 234)
6ba5fb57 (Kallfaktorn 2011-04-07 14:31:47 +0200 235) Mattias Pettersson
2112d245 (Jeena Paradies 2011-03-30 00:39:53 +0200 236) \begin_inset Newline newline
2112d245 (Jeena Paradies 2011-03-30 00:39:53 +0200 237) \end_inset
2112d245 (Jeena Paradies 2011-03-30 00:39:53 +0200 238)
2112d245 (Jeena Paradies 2011-03-30 00:39:53 +0200 239) Jonatan Pålsson
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 240) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 241)
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 242) \begin_layout Abstract
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 243) This is the abstract!
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 244) \end_layout
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 245)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 246) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 247) \begin_inset ERT
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 248) status open
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 249)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 250) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 251)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 252)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 253) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 254) pagenumbering{roman}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 255) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 256)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 257) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 258)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 259)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 260) \backslash
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 261) setcounter{page}{3}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 262) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 263)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 264) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 265)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 266)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 267) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 268) renewcommand
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 269) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 270) contentsname{Table of Contents}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 271) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 272)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 273) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 274)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 275)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 276) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 277) renewcommand{
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 278) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 279) cfttoctitlefont}{
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 280) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 281) hfill
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 282) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 283) Large}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 284) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 285) renewcommand{
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 286) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 287) cftaftertoctitle}{
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 288) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 289) hfill}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 290) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 291)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 292) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 293)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 294)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 295) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 296) renewcommand
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 297) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 298) cftpartdotsep{6.6}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 299) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 300)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 301) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 302)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 303)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 304) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 305) renewcommand
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 306) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 307) cftchapdotsep{6.6}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 308) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 309)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 310) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 311)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 312)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 313) \begin_inset CommandInset toc
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 314) LatexCommand tableofcontents
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 315)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 316) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 317)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 318)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 319) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 320)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 321) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 322) \begin_inset Newpage newpage
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 323) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 324)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 325)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 326) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 327)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 328) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 329) \begin_inset ERT
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 330) status open
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 331)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 332) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 333)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 334)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 335) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 336) pagenumbering{arabic}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 337) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 338)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 339) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 340)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 341)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 342) \backslash
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 343) setcounter{page}{1}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 344) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 345)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 346) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 347)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 348)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 349) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 350)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 351) \begin_layout Chapter
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 352) Introduction
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 353) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 354)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 355) \begin_layout Standard
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 356) Online gaming, and computer gaming in general has become an important part
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 357) in many peoples day-to day lives.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 358) A few years ago, computer games were not at all as popular as they are
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 359) today.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 360) With the advances in computer graphics and computer hardware today's games
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 361) are much more sophisticated then they were in the days of
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 362) \emph on
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 363) NetHack
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 364) \emph default
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 365) ,
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 366) \emph on
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 367) Zork,
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 368) \emph default
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 369) or
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 370) \emph on
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 371) Pacman.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 372) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 373) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 374)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 375) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 376)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 377)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 378) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 379) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 380) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 381) textbf{Zork}}{A textual computer game developed by students at MIT}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 382) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 383)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 384) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 385)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 386)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 387) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 388) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 389) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 390) textbf{Pacman}}{An early graphical computer game developed by Namco}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 391) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 392)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 393) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 394)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 395)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 396) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 397) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 398) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 399) textbf{NetHack}}{An early computer game developed by the NetHack team, arguably
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 400) the oldest computer game still in development}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 401) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 402)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 403) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 404)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 405)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 406) \end_layout
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 407)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 408) \begin_layout Standard
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 409) The early computer games featured simple, or no graphics at all
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 410) \begin_inset CommandInset citation
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 411) LatexCommand citet
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 412) key "nethack:website"
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 413)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 414) \end_inset
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 415)
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 416) .
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 417) The games often took place in a textual world, leaving the task of picturing
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 418) the world up to the player.
676989b8 (unknown 2011-05-06 17:41:21 +0200 419) Multiplayer games were not as common as they are today, whereas most games
676989b8 (unknown 2011-05-06 17:41:21 +0200 420) today are expected to have a multiplayer mode, most early games did not.
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 421) \end_layout
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 422)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 423) \begin_layout Standard
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 424) Since these early games, the gaming industry have become much more influential
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 425) in many ways.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 426) Many advanced in computer hardware are thought to come from pressure from
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 427) the computer game industry.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 428) More powerful games require more powerful, and more easily available hardware
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 429) \begin_inset Note Note
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 430) status collapsed
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 431)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 432) \begin_layout Plain Layout
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 433) Drop a reference to the gaming industry pressuring more advanced hardware
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 434) \end_layout
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 435)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 436) \end_inset
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 437)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 438) .
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 439) Due to the high entertainment value of modern computer games, gaming has
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 440) become a huge industry, where large amounts of money are invested.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 441) The gaming industry is today, in some places even larger than the motion
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 442) picture industry.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 443)
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 444) \begin_inset CommandInset citation
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 445) LatexCommand citet
4ffc1ac6 (Jonatan Pålsson 2011-05-01 13:58:55 +0200 446) key "esa:website,thenumbers:website"
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 447)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 448) \end_inset
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 449)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 450)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 451) \end_layout
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 452)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 453) \begin_layout Standard
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 454) Due to the increasing importance of computer gaming, more focus should be
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 455) spent on improving the quality of the gaming service.
676989b8 (unknown 2011-05-06 17:41:21 +0200 456) As more and more computer games are gaining multiplayer capabilities, the
676989b8 (unknown 2011-05-06 17:41:21 +0200 457) demands for multiplayer networking software rises.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 458) The topic of this thesis is techniques for improving the quality of this
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 459) networking software.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 460) \end_layout
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 461)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 462) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 463) The Reliable Generic Game Server, hereafter known as the GGS
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 464) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 465) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 466)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 467) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 468)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 469)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 470) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 471) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 472) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 473) textbf{GGS}}{Generic Game Server, a software for reliably hosting network
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 474) games.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 475) The subject of this thesis.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 476) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 477)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 478) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 479)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 480) , is a computer program designed to
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 481) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 482) host
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 483) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 484) network games on one or more server computers.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 485) Hosting, in a network software setting, means allowing client software
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 486) connect to the server software, for the purpose of utilizing services provided
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 487) by the server.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 488) The GGS software provides games as a service, and the clients connecting
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 489) to the GGS can play these games on the GGS.
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 490) \end_layout
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 491)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 492) \begin_layout Standard
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 493) The idea of game servers is not new, network games have been played for
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 494) decades.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 495) Early, popular examples of network games include the
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 496) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 497) Quake
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 498) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 499) series, or the
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 500) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 501) Doom
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 502) \begin_inset Note Note
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 503) status collapsed
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 504)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 505) \begin_layout Plain Layout
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 506)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 507) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 508) Come up w/ better game
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 509) \end_layout
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 510)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 511) \end_inset
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 512)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 513)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 514) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 515) games.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 516) Newer examples of network games include
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 517) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 518) World of Warcraft
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 519) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 520) , and
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 521) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 522) Counter-Strike
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 523) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 524) .
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 525) The difference between the GGS and the servers for these games is that
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 526) the servers for Doom, Quake, and the others listed, were designed with
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 527) these specific games in mind.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 528) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 529) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 530)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 531) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 532)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 533)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 534) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 535) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 536) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 537) textbf{Quake}}{A first person shooter series developed by ID software.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 538) The series consists of four games.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 539) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 540)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 541) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 542)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 543)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 544) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 545) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 546) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 547) textbf{Doom}}{A first person shooter series developed by ID software.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 548) The series consists of three games.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 549) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 550)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 551) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 552)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 553)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 554) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 555) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 556) \backslash
6bdb9f0d (Jeena Paradies 2011-05-06 16:27:14 +0200 557) textbf{Counter-Strike}}{A multiplayer first person shooter game, popular
6bdb9f0d (Jeena Paradies 2011-05-06 16:27:14 +0200 558) in E-Sports.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 559) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 560)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 561) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 562)
40c76adf (Jonatan Pålsson 2011-05-10 11:04:41 +0200 563)
40c76adf (Jonatan Pålsson 2011-05-10 11:04:41 +0200 564) \backslash
40c76adf (Jonatan Pålsson 2011-05-10 11:04:41 +0200 565) nomenclature{
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 566) \backslash
6bdb9f0d (Jeena Paradies 2011-05-06 16:27:14 +0200 567) textbf{World of Warcraft}}{A MMORPG game developed by Blizzard.
6bdb9f0d (Jeena Paradies 2011-05-06 16:27:14 +0200 568) The world's most popular MMORPG by subscriber count.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 569) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 570)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 571) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 572)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 573)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 574) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 575) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 576) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 577) textbf{Framework}}{A supporting structure, the GGS is a framework for developing
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 578) network games}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 579) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 580)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 581) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 582)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 583)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 584) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 585) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 586) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 587) textbf{First-person shooter}}{A game in which centers around gun combat
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 588) from the first person perspective.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 589) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 590)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 591) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 592)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 593)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 594) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 595) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 596) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 597) textbf{MMORPG}}{Massively multiplayer online role playing game.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 598) An online game with several thousand participants.}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 599) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 600)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 601) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 602)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 603)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 604) \end_layout
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 605)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 606) \begin_layout Standard
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 607) What GGS does is to provide a
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 608) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 609) generic
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 610) \emph default
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 611) framework for developing network games.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 612) The framework is generic in the sense that it is not bound to a specific
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 613) game.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 614) There are many different types of games, some are inherently more time
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 615) sensitive than others Strategy games are examples of games which are not
79848ce5 (niklas 2011-05-04 15:37:19 +0200 616) very sensitive to time delays, first-person shooters however, can be very
79848ce5 (niklas 2011-05-04 15:37:19 +0200 617) sensitive.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 618) \end_layout
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 619)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 620) \begin_layout Standard
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 621) The generic nature of the GGS allows the creation of many different types
79848ce5 (niklas 2011-05-04 15:37:19 +0200 622) of games, the motivation behind this is to remove the necessity of writing
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 623) new game servers when developing new games.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 624) \end_layout
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 625)
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 626) \begin_layout Standard
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 627) The GGS is in addition to being generic, also
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 628) \emph on
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 629) reliable
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 630) \emph default
79848ce5 (niklas 2011-05-04 15:37:19 +0200 631) in the sense that the gaming service provided is consistent and available.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 632) A consistent and available server is a server that handles hardware failures
79848ce5 (niklas 2011-05-04 15:37:19 +0200 633) and software failures gracefully.
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 634) In the event of a component breaking within the GGS, the error is handled
62f3f6ed (Jonatan Pålsson 2011-04-26 18:23:01 +0200 635) by fault recovery processes, thereby creating a more reliable system.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 636) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 637) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 638)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 639) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 640)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 641)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 642) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 643) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 644) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 645) textbf{Hardware failiure}}{A failiure in hardware (hard drive, memory, processor
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 646) , etc) which causes a system to stop functioning}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 647) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 648)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 649) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 650)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 651)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 652) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 653) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 654) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 655) textbf{Software failiure}}{A failiure in software (the GGS, the operating
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 656) system, etc) which causes a system to stop functioning}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 657) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 658)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 659) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 660)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 661)
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 662) \end_layout
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 663)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 664) \begin_layout Section
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 665) Background
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 666) \begin_inset CommandInset label
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 667) LatexCommand label
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 668) name "sec:Background"
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 669)
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 670) \end_inset
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 671)
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 672)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 673) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 674)
f3134323 (niklas 2011-04-05 10:58:15 +0200 675) \begin_layout Standard
946f4584 (Jeena Paradies 2011-05-11 16:01:55 +0200 676) The game industry is a quickly growing industry with high revenues and many
946f4584 (Jeena Paradies 2011-05-11 16:01:55 +0200 677) clever computer scientists.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 678) Strangely enough gamers often experience long downtimes due to maintaining
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 679) or because of problems with the servers
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 680) \begin_inset CommandInset citation
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 681) LatexCommand citet
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 682) key "news/cnet/com/WoWProblems"
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 683)
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 684) \end_inset
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 685)
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 686) .
f3134323 (niklas 2011-04-05 10:58:15 +0200 687) This is a problem that has existed and been resolved in other industries.
946f4584 (Jeena Paradies 2011-05-11 16:01:55 +0200 688) The telecom industry, for instance, has already found solutions to similar
946f4584 (Jeena Paradies 2011-05-11 16:01:55 +0200 689) problems.
f3134323 (niklas 2011-04-05 10:58:15 +0200 690) \end_layout
f3134323 (niklas 2011-04-05 10:58:15 +0200 691)
f3134323 (niklas 2011-04-05 10:58:15 +0200 692) \begin_layout Standard
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 693) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 694) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 695)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 696) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 697)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 698)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 699) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 700) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 701) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 702) textbf{The nine nines}}{A common goal for availability in the telecom business.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 703) A system with nine nines of availability is available 99.999999999% of the
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 704) time}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 705) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 706)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 707) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 708)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 709)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 710) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 711) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 712) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 713) textbf{Downtime}}{The amount of time a system is unavailable and does not
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 714) function}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 715) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 716)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 717) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 718)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 719)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 720) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 721) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 722) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 723) textbf{Uptime}}{The amount of time a system is available and functions}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 724) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 725)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 726) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 727)
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 728) A common figure often used in telecoms is that of
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 729) \emph on
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 730) the nine nines
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 731) \emph default
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 732) , referring to
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 733) \begin_inset Formula $99.999999999\%$
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 734) \end_inset
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 735)
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 736) of availability
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 737) \begin_inset CommandInset citation
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 738) LatexCommand citet
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 739) key "Armstrong03"
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 740)
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 741) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 742)
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 743) , or roughly
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 744) \begin_inset Formula $15ms$
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 745) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 746)
37976c49 (Jeena Paradies 2011-05-11 10:11:50 +0200 747) downtime in a year.
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 748) The level of instability and bad fault tolerance seen in the game server
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 749) industry would not have been accepted in the telecom industry.
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 750) This level of instability should not be accepted in the game server industry
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 751) either.
676989b8 (unknown 2011-05-06 17:41:21 +0200 752) An unavailable phone system could potentially have life threatening consequence
676989b8 (unknown 2011-05-06 17:41:21 +0200 753) s, leaving the public unable to contact emergency services.
5a9339b3 (niklas 2011-05-11 14:17:41 +0200 754) The same cannot be said about an unavailable game server.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 755) The statement that game servers are less important than phone systems is
676989b8 (unknown 2011-05-06 17:41:21 +0200 756) not a reason not to draw wisdom from what the telecoms have already learned.
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 757) \end_layout
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 758)
55448caa (Jonatan Pålsson 2011-04-05 11:51:28 +0200 759) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 760) Moving back to the gaming industry.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 761) The main reason to develop reliable servers is a higher revenue, to achive
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 762) this it is important for game companies to expand their customer base.
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 763) Reliable game servers will create a good image of the company.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 764) In general the downtime of game servers is much higher than the downtime
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 765) of telecom systems even so the overall structure of the systems is similar
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 766) in many ways.
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 767) It should be possible to learn and reuse solutions from the telecom systems
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 768) to improve game servers.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 769)
f3134323 (niklas 2011-04-05 10:58:15 +0200 770) \end_layout
f3134323 (niklas 2011-04-05 10:58:15 +0200 771)
f3134323 (niklas 2011-04-05 10:58:15 +0200 772) \begin_layout Standard
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 773) In the current state game servers are developed on a per-game basis, often
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 774) this seems like bad practice.
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 775) Developers of multiplayer games need to understand network programming,
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 776) which can be a problem for small companies and independent game developers
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 777) who often lack expertise in that field.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 778) A way to help game developers in developign servers would be to offer a
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 779) generic game server which gives developers an environment in which they
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 780) can implement their game.
f3134323 (niklas 2011-04-05 10:58:15 +0200 781) This approach would not only make it easier to develop network games, it
f3134323 (niklas 2011-04-05 10:58:15 +0200 782) would also allow games in different programming languages to be implemented
f3134323 (niklas 2011-04-05 10:58:15 +0200 783) using the same server.
f3134323 (niklas 2011-04-05 10:58:15 +0200 784) \end_layout
f3134323 (niklas 2011-04-05 10:58:15 +0200 785)
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 786) \begin_layout Standard
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 787) Some key factors to the development of the GGS have been isolated.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 788) Many of these are also found in the telecom sector.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 789) The factors are
4d8e264a (niklas 2011-03-25 15:43:15 +0100 790) \emph on
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 791) scalability, fault tolerance
4d8e264a (niklas 2011-03-25 15:43:15 +0100 792) \emph default
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 793) and a
4d8e264a (niklas 2011-03-25 15:43:15 +0100 794) \emph on
4d8e264a (niklas 2011-03-25 15:43:15 +0100 795) generic
4d8e264a (niklas 2011-03-25 15:43:15 +0100 796) \emph default
a3e93eff (Jeena Paradies 2011-05-11 16:41:41 +0200 797) nature.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 798) These terms are defined below.
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 799) \end_layout
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 800)
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 801) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 802) Scalability (see
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 803) \begin_inset CommandInset ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 804) LatexCommand ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 805) reference "sec:Scalability"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 806)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 807) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 808)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 809) ) in computer science is a large topic and is commonly divided into sub-fields,
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 810) two of which are
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 811) \emph on
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 812) structural scalability
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 813) \emph default
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 814) and
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 815) \emph on
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 816) load scalability
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 817) \emph default
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 818)
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 819) \begin_inset CommandInset citation
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 820) LatexCommand citet
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 821) key "Bondi:2000:CSI:350391.350432"
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 822)
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 823) \end_inset
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 824)
1817c6fd (Jonatan Pålsson 2011-03-24 15:21:51 +0100 825) .
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 826) These two issues are addressed in this thesis.
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 827) Structural scalability means expanding an architecture, e.g.
e86badbe (niklas 2011-04-21 10:21:45 +0200 828) adding nodes to a system without requiring modification of the system.
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 829) Load scalability means using the available resources in a way which allows
c93a0e4f (Jonatan Pålsson 2011-03-24 14:21:09 +0100 830) handling increasing load, e.g more users, gracefully.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 831) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 832)
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 833) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 834) Fault tolerance (see
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 835) \begin_inset CommandInset ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 836) LatexCommand ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 837) reference "sec:Fault-Tolerance"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 838)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 839) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 840)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 841) ) is used to raise the level of
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 842) \emph on
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 843) dependability
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 844) \emph default
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 845) in a system, so that the dependability is high even in presence of errors.
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 846) Dependability is the statistical probability of the system functioning
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 847) as intended at a given point in time.
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 848) Fault tolerance is the property of a system always to follow a specification,
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 849) even in the presence of errors.
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 850) The specification could define error handling procedures which activate
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 851) when an error occurs.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 852) This means that a fault tolerant, dependable system will have a very high
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 853) probability of functioning at a given point in time, and is exactly what
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 854) is desired.
4d8e264a (niklas 2011-03-25 15:43:15 +0100 855)
4d8e264a (niklas 2011-03-25 15:43:15 +0100 856) \begin_inset CommandInset citation
4d8e264a (niklas 2011-03-25 15:43:15 +0100 857) LatexCommand citet
4d8e264a (niklas 2011-03-25 15:43:15 +0100 858) key "Gartner:1999:FFD:311531.311532"
4d8e264a (niklas 2011-03-25 15:43:15 +0100 859)
4d8e264a (niklas 2011-03-25 15:43:15 +0100 860) \end_inset
4d8e264a (niklas 2011-03-25 15:43:15 +0100 861)
4d8e264a (niklas 2011-03-25 15:43:15 +0100 862)
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 863) \end_layout
c0e8f212 (Jonatan Pålsson 2011-03-25 14:36:14 +0100 864)
078ef2d4 (Jeena Paradies 2011-03-25 13:54:31 +0100 865) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 866) A generic (see
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 867) \begin_inset CommandInset ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 868) LatexCommand ref
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 869) reference "sec:Generic"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 870)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 871) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 872)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 873) ) game server has to be able to run different client-server network games
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 874) regardless of the platform the clients are running on.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 875) It runs network games of different type.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 876) A very rough separation of games is real time games and turn based games.
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 877) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 878)
078ef2d4 (Jeena Paradies 2011-03-25 13:54:31 +0100 879) \begin_layout Standard
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 880) The server behaves in a way similar to an application server, but is designed
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 881) to help running games instead pf typical applications.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 882) An application server provides processing ability and time, therefore it
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 883) is different from a file- or print-server, which only serves resources
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 884) to the clients.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 885) In order to more easily understand the purpose of the GGS, it can be of
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 886) use to briefly think of application servers, thereafter viewing the differences
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 887) between the GGS and application servers.
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 888) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 889)
078ef2d4 (Jeena Paradies 2011-03-25 13:54:31 +0100 890) \begin_layout Standard
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 891) The most common type of application servers are web servers, where you run
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 892) a web application within the server.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 893) The application server provides an environment and interfaces to the outer
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 894) world, in which applications run.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 895) Hooks and helpers are provided to use the resources of the server.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 896) Some examples for web application servers are the
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 897) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 898) Glassfish
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 899) \emph default
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 900) server which allows running applications written in Java or the
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 901) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 902) Google App Engine
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 903) \emph default
078ef2d4 (Jeena Paradies 2011-03-25 13:54:31 +0100 904) where you can run applications written in Python or some language which
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 905) runs in the
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 906) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 907) Java Virtual Machine
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 908) \emph default
ab14fb10 (Jeena Paradies 2011-03-30 00:22:39 +0200 909) .
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 910) An example of an application server not powering web applications, but
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 911) instead regular business logic, is Oracles
ab14fb10 (Jeena Paradies 2011-03-30 00:22:39 +0200 912) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 913) TUXEDO
ab14fb10 (Jeena Paradies 2011-03-30 00:22:39 +0200 914) \emph default
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 915) application server, which can be used to run applications written in COBOL,
71c4da0a (niklas 2011-04-12 12:05:47 +0200 916) C++ and other languages.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 917) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 918) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 919)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 920) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 921)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 922)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 923) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 924) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 925) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 926) textbf{SQL}}{Structured Query Language, a computer language common in querying
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 927) certain databases}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 928) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 929)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 930) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 931)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 932)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 933) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 934) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 935) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 936) textbf{JavaScript}}{A programming language originally developed by Netscape,
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 937) common in web programming}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 938) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 939)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 940) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 941)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 942)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 943) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 944) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 945) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 946) textbf{COBOL}}{Programming language}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 947) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 948)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 949) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 950)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 951)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 952) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 953) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 954) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 955) textbf{C++}}{Programming language}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 956) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 957)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 958) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 959)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 960)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 961) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 962) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 963) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 964) textbf{Java}}{Programming language}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 965) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 966)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 967) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 968)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 969)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 970) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 971) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 972) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 973) textbf{AXD301}}{Telephone switch developed by Ericsson}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 974) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 975)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 976) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 977)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 978)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 979) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 980) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 981) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 982) textbf{Erlang}}{A concurrent programming language, often used for telecom
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 983) applications.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 984) The main language of the GGS}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 985) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 986)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 987) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 988)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 989)
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 990) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 991)
ab14fb10 (Jeena Paradies 2011-03-30 00:22:39 +0200 992) \begin_layout Standard
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 993) A database server can also be seen as an application server.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 994) Scripts, for example SQL queries or JavaScript, are sent to the server,
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 995) which runs them and returns the evaluated data to the clients.
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 996) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 997)
aa4afffd (Jeena Paradies 2011-03-30 00:24:40 +0200 998) \begin_layout Standard
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 999) The difference between the application servers and database servers described
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1000) and the GGS is the purpose of the servers.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1001) Application servers were developed to run applications, often web applications.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1002) The application servers offer appealing features for application developers,
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1003) which aid these developers in writing applications.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1004) Database servers were developed in order to provide access to and allow
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1005) programming of databases, thus having features specifically tailored for
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1006) database development.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1007) \end_layout
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1008)
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1009) \begin_layout Standard
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1010) The GGS on the other hand offers features appealing to game developers.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1011) While it would be technically possible to write both regular applications
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1012) and database software using the GGS, this is not the intended usage of
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1013) the server, and this is how the GGS differs from other kinds of application
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1014) servers.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1015) \end_layout
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1016)
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1017) \begin_layout Standard
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1018) To allow the development of different games, the game server developed need
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1019) to be generic, therefore one purpose of this thesis is to investigate how
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1020) one could make a game server as generic as possible.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1021) Some important helpers for game developers are discussed, such as abstraction
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1022) of the network layer, data store and game specific features.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1023)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1024) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1025)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1026) \begin_layout Standard
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1027) A prototype has been developed in order to aid the discussion of the theoretical
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1028) parts of the GGS.
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 1029) The prototype does not feature all the characteristics described in this
1b1a6084 (niklas 2011-05-11 15:05:32 +0200 1030) thesis.
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1031) A selection has been made among the features and the most important ones
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1032) have been implemented either full or in part in the prototype.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1033) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1034)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1035) \begin_layout Standard
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1036) The choice of the implementation language for the prototype of the GGS was
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1037) made with inspiration from the telecom industry.
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1038) The Erlang language was developed by the swedish telecom company Ericsson
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1039) to develop highly available and dependable telecom switches.
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1040) One of the most reliable systems ever developed by Ericsson, the AXD301
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1041) was developed using Erlang.
618243ff (niklas 2011-05-11 17:42:39 +0200 1042) The AXD301 has possibly the largest code base even written in a functional
618243ff (niklas 2011-05-11 17:42:39 +0200 1043) language
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1044) \begin_inset CommandInset citation
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1045) LatexCommand citep
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1046) key "Armstrong03"
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1047)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1048) \end_inset
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1049)
249c76e4 (Jonatan Pålsson 2011-04-27 13:56:03 +0200 1050) .
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1051) The same language is used to develop the prototype of the GGS.
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1052) The usage of Erlang in the GGS is discussed in further detail in section
45631ee8 (Jeena Paradies 2011-05-11 17:17:25 +0200 1053)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1054) \begin_inset CommandInset ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1055) LatexCommand ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1056) reference "sec:The-usage-of-erlang"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1057)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1058) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1059)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 1060) .
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 1061) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 1062)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1063) \begin_layout Section
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1064) Purpose
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1065) \end_layout
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1066)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1067) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1068) The purpose of creating a generic and fault tolerant game server is to provide
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1069) a good framework for the development of many different types of games.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1070) Allowing the system to scale up and down is a powerful way to maximize
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1071) the usage of physical resources.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1072) By scaling up to new machines when load increases, and scaling down from
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1073) machines when load decreases costs and energy consumption can be optimized.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1074) \end_layout
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1075)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1076) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1077) Fault tolerance is important for the GGS to create a reliable service.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1078) The purpose of a reliable game server is to provide a consistent service
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1079) to people using the server.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1080) Going back to the telecom example, the purpose of creating a reliable telecom
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1081) system is to allow calls, possibly emergency calls, at any time.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1082) Should the telecom network be unavailable at any time, emergency services
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1083) may become unavailable, furthermore the consumer's image of the telecom
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1084) system degrades.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1085) \end_layout
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1086)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1087) \begin_layout Standard
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1088) Returning to the game industry, emergency services will not be contacted
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1089) using a game server, however an unavailable server will degrade the consumer's
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1090) image of the system.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1091) Consider an online casino company.
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1092) The online casino company's servers must be available at all times to allow
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1093) customers to play.
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1094) If the servers are unavailable customers cannot play and the company loses
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1095) money.
140d3f54 (Jeena Paradies 2011-05-11 17:28:05 +0200 1096) In this scenario an unavailable server can be compared to a closed real-world
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 1097) casino.
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 1098) \end_layout
e169c208 (Jeena Paradies 2011-03-25 11:55:15 +0100 1099)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1100) \begin_layout Section
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1101) Challenges in developing the prototype
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1102) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1103)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1104) \begin_layout Standard
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1105) The word
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1106) \emph on
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1107) generic
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1108) \emph default
2f2c5ab5 (Jonatan Pålsson 2011-04-30 23:09:07 +0200 1109) in the name of the GGS implies that the system is able to run a very broad
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1110) range of different code, for instance code written in different programming
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1111) languages or code written for a broad range of different game types.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1112) To support this, a virtual machine (VM) for each
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1113) \emph on
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1114) game development language
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1115) \emph default
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1116) (hereafter GDL for brevity) is used.
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1117)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1118) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1119) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1120)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1121) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1122)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1123)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1124) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1125) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1126) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1127) textbf{GDL}}{Game Development Language, the language used to program games
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1128) in the GGS}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1129) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1130)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1131) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1132)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1133)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1134) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1135) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1136) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1137) textbf{VM}}{Virtual Machine}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1138) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1139)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1140) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1141)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1142)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1143) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1144)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1145) \begin_layout Standard
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1146) No hard limit has been set on which languages can be used for game development
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1147) on the GGS, but there are several factors which should be taken into considerat
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1148) ion when deciding the feasibility of a language:
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1149) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1150)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1151) \begin_layout Itemize
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1152) How well it integrates with Erlang, which is used in the core the GGS system?
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1153) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1154)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1155) \begin_layout Itemize
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1156) How easy it is to send messages from the GGS to the GDL VM?
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1157) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1158)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1159) \begin_layout Itemize
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1160) How easy it is to send messages from the GDL VM to the GGS?
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1161) \end_layout
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1162)
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1163) \begin_layout Itemize
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1164) Is it possible to sandbox every game with a context or something comparable?
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1165) \end_layout
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1166)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1167) \begin_layout Standard
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1168) Internally the GDL VM needs to interface with the GGS to make use of the
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1169) helpers and tools that the GGS provides.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1170) Thus an internal API has to be designed to make the GDL VM be able to interact
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1171) with the GGS.
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1172) This API is ideally completely independent of the GDL, and reusable for
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1173) any GDL.
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1174) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1175)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1176) \begin_layout Standard
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1177) The communication with the gaming clients has to take place with help a
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1178) protocol.
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1179) Ideally a standard protocol should be used in order to shorten the learning
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1180) curve for developers and also make the system as a whole less obscure.
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1181) A major challenge during this project is to decide whether an existing
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1182) protocol can be used, and if not, how a new protocol can be designed which
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1183) performs technically as desired, while still being familiar enough to existing
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1184) developers.
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1185) \end_layout
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1186)
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1187) \begin_layout Standard
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1188) A great deal of work is devoted to make the GGS
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1189) \emph on
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1190) reliable
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1191) \emph default
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1192) .
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1193) This includes ensuring that the system scales well and to make sure it
2c915a70 (Jonatan Pålsson 2011-03-30 11:39:52 +0200 1194) is fault tolerant.
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1195) In order to facilitate scalability the GGS needs a storage platform which
997ce8b6 (Jeena Paradies 2011-05-11 18:03:59 +0200 1196) is accessible and consistent.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1197) The sclability aspects of the GGS are discussed from a theoretical point
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1198) of view, however no practical implementation of the scalability aspects
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1199) are found in the prototype.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1200) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1201)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1202) \begin_layout Section
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1203) Limitations of the prototype
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1204) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1205)
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1206) \begin_layout Standard
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1207) The implementation of the GGS protocol together with storage possibilities,
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1208) server capacity, and game language support imposes some limitations on
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1209) the project.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1210) To get a functional prototype, some limits must be set on the types games
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1211) that can be played on the prototype.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1212) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1213) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1214)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1215) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1216)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1217)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1218) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1219) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1220) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1221) textbf{UDP}}{User Datagram Protocol, a connectionless networking protocol}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1222) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1223)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1224) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1225)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1226)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1227) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1228) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1229) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1230) textbf{TCP}}{Transmission Control Protocol, a streaming network protocol}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1231) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1232)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1233) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1234)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1235)
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1236) \end_layout
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1237)
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1238) \begin_layout Standard
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1239) The UDP protocol is not supported for communication between client and server.
676989b8 (unknown 2011-05-06 17:41:21 +0200 1240) The TCP protocol was chosen in favor of UDP, due to the fact that the implement
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1241) ation process using TCP was faster and easier than if UDP would have been
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1242) used.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1243) UDP is generally considered to be faster than TCP for the transfer of game
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1244) (and other) related data, this is discussed in more depth in
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1245) \begin_inset CommandInset ref
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1246) LatexCommand vref
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1247) reference "sec:Choice-of-network"
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1248)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1249) \end_inset
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1250)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1251) .
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1252) In short, the decision of using TCP means that games that requires a high
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1253) speed protocol will not be supported by the GGS prototype.
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1254) Another limitation necessary to set on the system is the possibility to
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1255) have huge game worlds due to the implementation of the scaling mechanism
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1256) in the prototype.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1257) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1258) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1259)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1260) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1261)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1262)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1263) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1264) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1265) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1266) textbf{Latency}}{A measure of delay, often measured in milliseconds}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1267) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1268)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1269) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1270)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1271)
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1272) \end_layout
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1273)
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1274) \begin_layout Standard
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1275) In real time games all players are playing together at the same time.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1276) Latency is a huge problem in real time games, a typical round trip time
929e531f (niklas 2011-05-05 12:11:45 +0200 1277) for such games are one of
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1278) \begin_inset Formula $50$
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1279) \end_inset
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1280)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1281) to
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1282) \begin_inset Formula $150ms$
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1283) \end_inset
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1284)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1285) and everything above
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1286) \begin_inset Formula $200ms$
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1287) \end_inset
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1288)
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1289) is reported to be intolerable (see
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1290) \begin_inset CommandInset citation
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1291) LatexCommand citet
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1292) key "Farber:2002:NGT:566500.566508"
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1293)
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1294) \end_inset
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1295)
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1296) ).
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1297) Latency sensitive games include most of the first person shooters with
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1298) multiplayer ability, for example
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1299) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1300) Counter Strike
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1301) \emph default
676989b8 (unknown 2011-05-06 17:41:21 +0200 1302) or massively multiplayer online role playing games (MMORPGs), for example
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1303)
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1304) \emph on
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1305) World of Warcraft
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1306) \emph default
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1307) .
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1308) \end_layout
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1309)
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1310) \begin_layout Standard
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1311) In turn based games each player has to wait for their turn.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1312) Latency is not a problem since the gameplay does not require fast interactions
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1313) among the players, long round trip times will not be noticed.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1314) Examples of turn based games include board and card games, as well as multiplay
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1315) er games like
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1316) \emph on
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1317) Jeopardy
e30b4197 (niklas 2011-03-30 12:11:02 +0200 1318) \emph default
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1319) .
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1320) Both game types have varying difficulties and needs when it comes to implementi
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1321) ng them, a Generic Game Server should address all of these difficulties
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1322) in order to provide the tools neccessary for the implementation of both
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1323) game types.
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1324) \end_layout
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1325)
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1326) \begin_layout Standard
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 1327) Due to the limited capability of threading in many GDL VMs, the GGS prototype
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 1328) will not support MMORPGs.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1329) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1330)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1331) \begin_layout Standard
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1332) The implementation of the GGS described in this thesis is only a small prototype
333635c9 (Jeena Paradies 2011-03-30 16:06:35 +0200 1333) and tests will be performed on simple games like pong or chess, thus there
31a7cd05 (Jeena Paradies 2011-05-11 19:07:22 +0200 1334) is no need to implement more advanced features in the system.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1335) Note that these limitations only apply for the prototype of the project,
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1336) and that further developments to the GGS could be to implement these features.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1337) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1338)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1339) \begin_layout Section
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1340) Method
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1341) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1342)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1343) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1344) A prototype was developed early on in the project to carry out experiments.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1345) Using this prototype, the system was divided into modules.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1346) A demand specification was created, using this specification, the modules
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1347) were easily identifiable.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1348) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1349) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1350)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1351) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1352)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1353)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1354) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1355) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1356) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 1357) textbf{Module}}{A part of a larger system}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1358) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1359)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1360) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1361)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 1362)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1363) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1364)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1365) \begin_layout Standard
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1366) The first prototype of the GGS consisted of simple modules, however, due
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1367) to the separation of concerns among the modules, they were easily independently
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1368) modified and improved.
476b56e0 (Jonatan Pålsson 2011-05-06 15:46:16 +0200 1369) Once the basic structure of the GGS had been established, the first prototype
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1370) was removed, remaining was the structure of the modules and the internal
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1371) flow of the application.
676989b8 (unknown 2011-05-06 17:41:21 +0200 1372) This could be seen as an iterative workflow, with the first prototype being
676989b8 (unknown 2011-05-06 17:41:21 +0200 1373) the first iteration.
a75278a9 (Jonatan Pålsson 2011-05-03 23:23:23 +0200 1374) The second iteration later became the final result of the GGS.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1375) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1376)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1377) \begin_layout Standard
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1378) The layout of the GGS is both layered and modular.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1379) The first layer handles the most primitive data and produces a higher level
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1380) representation of the data, passing it along to different modules of the
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1381) GGS.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1382) The modular structure of the GGS plays an important role in making the
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1383) system fault tolerant.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1384) The approach to fault tolerance is by replication, and restarting the faulting
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1385) modules with the last known good data.
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1386) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1387)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 1388) \begin_layout Standard
a75278a9 (Jonatan Pålsson 2011-05-03 23:23:23 +0200 1389) An informal specification and list of requirements of the system was outlined
a75278a9 (Jonatan Pålsson 2011-05-03 23:23:23 +0200 1390) early on in the project.
676989b8 (unknown 2011-05-06 17:41:21 +0200 1391) Usability goals for developers were set.
a75278a9 (Jonatan Pålsson 2011-05-03 23:23:23 +0200 1392) During the project several demo applications were constructed, by constructing
a75278a9 (Jonatan Pålsson 2011-05-03 23:23:23 +0200 1393) these applications, the usability goals were enforced.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1394) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1395)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1396) \begin_layout Chapter
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1397) Theory behind the GGS
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1398) \begin_inset CommandInset label
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1399) LatexCommand label
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1400) name "cha:Theory"
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1401)
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1402) \end_inset
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1403)
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 1404)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1405) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1406)
28d4ba02 (Jonatan Pålsson 2011-04-05 11:03:45 +0200 1407) \begin_layout Standard
e86badbe (niklas 2011-04-21 10:21:45 +0200 1408) In this chapter, the theory behind the techniques used in the GGS are discussed.
28d4ba02 (Jonatan Pålsson 2011-04-05 11:03:45 +0200 1409) Performance issues and the measuring of performance is discussed.
e86badbe (niklas 2011-04-21 10:21:45 +0200 1410) Benchmarking techniques are discussed.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1411) The options when choosing network protocols are given, along with a discussion
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1412) of each alternative.
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 1413) Finally, an overview of scalability, fault tolerance and availability is
e86badbe (niklas 2011-04-21 10:21:45 +0200 1414) presented.
28d4ba02 (Jonatan Pålsson 2011-04-05 11:03:45 +0200 1415) \end_layout
28d4ba02 (Jonatan Pålsson 2011-04-05 11:03:45 +0200 1416)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 1417) \begin_layout Section
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1418) Design of the GGS system
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1419) \begin_inset CommandInset label
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1420) LatexCommand label
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1421) name "sec:Design-of-the"
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1422)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1423) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1424)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1425)
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1426) \end_layout
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1427)
71c4da0a (niklas 2011-04-12 12:05:47 +0200 1428) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1429) The GGS is modeled after a real world system performing much of the same
d0b9cd1f (Jeena Paradies 2011-05-11 19:46:51 +0200 1430) duties as the GGS.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1431) This is common practice
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1432) \begin_inset CommandInset citation
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1433) LatexCommand citep
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1434) key "armstrong2011"
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1435)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1436) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1437)
d0b9cd1f (Jeena Paradies 2011-05-11 19:46:51 +0200 1438) in the computer software world to understand complex problems more easily.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1439) While there may not always be a real world example of a system performing
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1440) the exact duties of the system being modeled in the computer, it is often
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1441) easier to create and analyze requirements for real world systems and processes
d0b9cd1f (Jeena Paradies 2011-05-11 19:46:51 +0200 1442) than systems existing solely in virtual form in a computer.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1443) The requirements and limitations imposed on the real-world system can,
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1444) using the proper tools, be transferred in to the software.
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1445) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1446)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1447) \begin_layout Standard
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1448) The real world system chosen to represent the GGS is a
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1449) \begin_inset Quotes eld
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1450) \end_inset
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1451)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1452) Chess club
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1453) \begin_inset Quotes erd
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1454) \end_inset
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1455)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1456) - a building where chess players can meet and play chess.
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1457) In the following text the choice of using a chess club for modelling the
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1458) GGS is discussed.
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1459) The chess club is described in greater detail, furthermore the corresponding
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1460) parts of the chess club in the GGS are described.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1461) Since a real-world scenario is readily available, and to such a large extent
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1462) resembles the computer software required for the GGS, the next step in
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1463) developing the GGS system is to duplicate this real world scenario in a
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1464) software setting.
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1465) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1466)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1467) \begin_layout Standard
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1468) Some requirements, limitations and additions were made to the chess club
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1469) system, so that the system would more easily and efficiently be replicated
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1470) in a software setting.
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1471) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1472)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1473) \begin_layout Standard
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1474) In the text below, two examples will be presented.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1475) On example is that of a real-world chess club, in which players meet to
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1476) play chess against each other, the other example is the GGS, and how it
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1477) corresponds to this chess club.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1478)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1479) \begin_inset Float figure
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1480) wide false
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1481) sideways false
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1482) status collapsed
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1483)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1484) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1485) \begin_inset ERT
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1486) status open
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1487)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1488) \begin_layout Plain Layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1489)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1490)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1491) \backslash
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1492) begin{centering}
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1493) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1494)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1495) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1496)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1497)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1498) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1499)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1500) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1501) \begin_inset Graphics
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1502) filename graphics/theory_layout.eps
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1503) scale 40
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 1504)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1505) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1506)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1507)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1508) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1509)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1510) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1511) \begin_inset ERT
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1512) status open
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1513)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1514) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1515)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1516)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1517) \backslash
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1518) end{centering}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1519) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1520)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1521) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1522)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1523)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1524) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1525)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1526) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1527) \begin_inset Caption
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1528)
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1529) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1530) \begin_inset CommandInset label
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1531) LatexCommand label
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1532) name "fig:theory-layout"
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1533)
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1534) \end_inset
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1535)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1536) The layout of a physical
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1537) \begin_inset Quotes eld
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1538) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1539)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1540) Chess club
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1541) \begin_inset Quotes erd
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1542) \end_inset
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1543)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1544) with two players (P) sitting by each chess table (Table), a coordinator
7d08de32 (Jeena Paradies 2011-05-11 19:59:11 +0200 1545) keeps track of all movements of players in the building.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1546) A player has to pass by the entrance to enter or exit the building.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1547) The building is represented by the outermost box.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1548) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1549)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1550) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1551)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1552)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1553) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1554)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1555) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1556)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 1557) In figure
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1558) \begin_inset CommandInset ref
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1559) LatexCommand vref
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1560) reference "fig:theory-layout"
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1561)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1562) \end_inset
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1563)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1564) a graphical representation for the chess club is presented.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1565) The club is seen from above.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1566) The outermost box represents the building.
d0b9cd1f (Jeena Paradies 2011-05-11 19:46:51 +0200 1567) In the GGS setting, the building would represent one instance of the GGS.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1568) Several buildings linked together would represent a cluster of GGS instances.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1569) In order for a player (the P symbol in the graphic) to enter the theoretical
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1570) chess club, the player must pass by the entrance.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1571) By having each player pass by the entrance, a tally
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1572) \begin_inset Note Note
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1573) status open
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1574)
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1575) \begin_layout Plain Layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1576) Does this mean what I think it does?
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1577) \begin_inset Quotes eld
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1578) \end_inset
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1579)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1580) Räkning
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1581) \begin_inset Quotes erd
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1582) \end_inset
4a4d5bfb (Jeena Paradies 2011-04-04 15:44:48 +0200 1583)
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1584) ?
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1585) \end_layout
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1586)
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1587) \begin_layout Plain Layout
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1588) Richard: it means a list where you count how many people entered or left
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1589) for example
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1590) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1591)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1592) \end_inset
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1593)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1594) can be kept, ensuring that there are not too many players within the building.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1595) In the GGS setting, too many players entering would mean too many connections
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1596) have been accepted by the GGS system, and that the structure of the system
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1597) thus must be modified, adding additional servers.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1598) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1599)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1600) \begin_layout Standard
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1601) Once a player has been allowed in to the chess club the player is greeted
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1602) by the host of the chess club, in the GGS setting represented by the
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1603) \emph on
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1604) Coordinator
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1605) \emph default
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1606) , and is seated by a table.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1607) The coordinator keeps track of all the players in the building, and all
618243ff (niklas 2011-05-11 17:42:39 +0200 1608) moves made by the players.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1609) The information available to the coordinator means that cheating can be
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 1610) monitored and book keeping can be performed by this entity.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1611) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1612)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1613) \begin_layout Standard
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1614) A player can only move the figures on her table in the chess club thus every
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1615) game is isolated to a table, just as expected.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1616) This means that communication during a game only has to pass by the players
618243ff (niklas 2011-05-11 17:42:39 +0200 1617) of that particular game and the coordinator, making sure that no cheating
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1618) takes place.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1619) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1620)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 1621) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1622) This isolation of the games play an important part in many properties of
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1623) the GGS, the isolation means that games can for example be transferred
618243ff (niklas 2011-05-11 17:42:39 +0200 1624) among different chess clubs.
618243ff (niklas 2011-05-11 17:42:39 +0200 1625) Furthermore, if cheating takes place, corruption can only occur in the
618243ff (niklas 2011-05-11 17:42:39 +0200 1626) particular table where it was found and cannot spread.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1627) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1628)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1629) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1630) Moving chess players from one location to another is one alteration made
79848ce5 (niklas 2011-05-04 15:37:19 +0200 1631) to the real world chess club system to make the system more appropriate
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1632) for a software setting.
618243ff (niklas 2011-05-11 17:42:39 +0200 1633) Allowing games to be transferred is not an attribute usually desired in
618243ff (niklas 2011-05-11 17:42:39 +0200 1634) a real world chess club, where transferring players would mean moving the
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1635) players from one building to another.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1636) In the software setting, moving players means moving the game processes
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1637) from one system to another, perhaps to balance the system load.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1638) This transfer of players can occur transparently, without notifying the
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1639) players.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1640) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1641)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1642) \begin_layout Standard
618243ff (niklas 2011-05-11 17:42:39 +0200 1643) The simplified life cycle of a game in the GGS can be viewed using algorithm
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1644)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1645) \begin_inset CommandInset ref
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1646) LatexCommand vref
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1647) reference "alg:game-lifecycle"
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1648)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1649) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1650)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1651) .
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1652) To make this life cycle as efficient and useful as possible the scalability,
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1653) fault tolerance and generic traits are being added to the GGS.
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1654) These are not shown in the algorithm since these traits are tools in making
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1655) the algorithm behave as efficient as possible and are not the main focus
e60938e5 (Jonatan Pålsson 2011-05-12 19:01:13 +0200 1656) when studying the life cycle of a game.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1657) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1658)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1659) \begin_layout Standard
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1660) The limits imposed in
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1661) \begin_inset CommandInset ref
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1662) LatexCommand vref
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1663) reference "alg:game-lifecycle"
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1664)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1665) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1666)
618243ff (niklas 2011-05-11 17:42:39 +0200 1667) are arbitrary for this example, there are for example no limits in the
618243ff (niklas 2011-05-11 17:42:39 +0200 1668) GGS on the number of players connecting.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1669) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1670)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1671) \begin_layout Standard
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1672) \begin_inset Float algorithm
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1673) wide false
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1674) sideways false
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 1675) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1676)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1677) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1678) \begin_inset ERT
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1679) status open
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1680)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1681) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1682)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1683)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1684) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1685) begin{algorithmic}[1]
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1686) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1687)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1688) \end_inset
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 1689)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1690)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1691) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 1692)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1693) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1694) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1695) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1696)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1697) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1698)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1699)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1700) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1701) newcommand{
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1702) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1703) INDSTATE}[1][1]{
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1704) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1705) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1706) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1707) hspace{#1
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1708) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1709) algorithmicindent}}
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1710) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1711)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1712) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1713)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1714)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1715) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1716)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1717) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1718) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1719) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1720)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1721) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1722)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1723)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1724) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1725) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1726) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1727)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1728) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1729)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1730)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1731) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1732) while
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1733) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1734)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1735) \begin_inset Formula $players<2$
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1736) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1737)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1738) :
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1739) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1740)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1741) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1742) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1743) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1744)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1745) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1746)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1747)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1748) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1749) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1750) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1751)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1752) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1753)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1754)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1755) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1756) if
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1757) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1758) a player connects, call
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1759) \emph on
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1760) connected
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1761) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1762)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1763) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1764) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1765) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1766)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1767) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1768)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1769)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1770) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1771) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1772) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1773)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1774) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1775)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1776)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1777) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1778) while
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1779) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1780) the game commences:
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1781) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1782)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1783) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1784) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1785) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1786)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1787) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1788)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1789)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1790) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1791) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1792) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1793)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1794) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1795)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1796) call the function
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1797) \emph on
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1798) game
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1799) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1800)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1801) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1802) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1803) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1804)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1805) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1806)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1807)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1808) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1809) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1810) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1811)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1812) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1813)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1814)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1815) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1816) when
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1817) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1818) the game has stopped
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1819) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1820)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1821) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1822) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1823) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1824)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1825) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1826)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1827)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1828) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1829) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1830) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1831)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1832) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1833)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1834) call the function
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1835) \emph on
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1836) endGame
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1837) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1838)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1839) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1840) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1841) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1842)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1843) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1844)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1845)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1846) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1847) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1848) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1849)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1850) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1851)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1852)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1853) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1854) function
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1855) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1856) connected:
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1857) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1858)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1859) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1860) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1861) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1862)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1863) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1864)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1865)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1866) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1867) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1868) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1869)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1870) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1871)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1872) assign the new player an id
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1873) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1874)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1875) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1876) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1877) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1878)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1879) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1880)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1881)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1882) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1883) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1884) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1885)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1886) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1887)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1888) alert the coordinator of the new player
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1889) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1890)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1891) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1892) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1893) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1894)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1895) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1896)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1897)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1898) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1899) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1900) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1901)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1902) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1903)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1904)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1905) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1906) if
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1907) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1908) a free table does not exist:
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1909) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1910)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1911) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1912) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1913) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1914)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1915) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1916)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1917)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1918) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1919) INDSTATE[2]
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1920) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1921)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1922) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1923)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1924) the coordinator creates a new table
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1925) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1926)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1927) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1928) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1929) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1930)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1931) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1932)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1933)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1934) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1935) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1936) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1937)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1938) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1939)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1940) the coordinator places the player by the table, and begins watching the
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1941) player
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1942) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1943)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1944) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1945) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1946) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1947)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1948) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1949)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1950)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1951) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1952) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1953) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1954)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1955) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1956)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1957)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1958) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1959) function
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1960) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1961) game
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1962) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1963) :
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1964) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1965)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1966) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1967) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1968) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1969)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1970) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1971)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1972)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1973) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1974) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1975) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1976)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1977) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1978)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1979) perform game-specific functions.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1980) In chess, the rules of chess are placed here
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1981) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1982)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1983) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1984) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1985) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1986)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1987) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1988)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1989)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1990) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1991) STATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1992) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1993)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1994) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1995)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1996)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1997) \series bold
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1998) function
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 1999) \series default
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2000) endGame:
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2001) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2002)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2003) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2004) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2005) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2006)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2007) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2008)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2009)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2010) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2011) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2012) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2013)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2014) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2015)
676989b8 (unknown 2011-05-06 17:41:21 +0200 2016) alert the coordinator, unregistering the players
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2017) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2018)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2019) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2020) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2021) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2022)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2023) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2024)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2025)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2026) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2027) INDSTATE
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2028) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2029)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2030) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2031)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2032) disconnect the players from the system, freeing system resources
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2033) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2034)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2035) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2036) \begin_inset ERT
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2037) status open
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2038)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2039) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2040)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2041)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2042) \backslash
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2043) end{algorithmic}
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2044) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2045)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2046) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2047)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2048)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2049) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2050)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2051) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2052) \begin_inset Caption
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2053)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2054) \begin_layout Plain Layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2055) \begin_inset CommandInset label
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2056) LatexCommand label
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2057) name "alg:game-lifecycle"
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2058)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2059) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2060)
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2061) A very simple example of the flow through the GGS system when a game is
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2062) played.
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2063) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2064)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2065) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2066)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2067)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2068) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2069)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2070) \end_inset
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2071)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2072)
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2073) \end_layout
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2074)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 2075) \begin_layout Section
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2076) Performance
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2077) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2078)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2079) \begin_layout Standard
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2080) There are many ways in which performance could be measured.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2081) For the clients, time and response times are useful measurements in time
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2082) critical settings.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2083) In non-time critical settings, the reliability of message delivery may
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2084) be an even more important factor than speed.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2085) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2086)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2087) \begin_layout Standard
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2088) In a first person shooter game, the speed of delivery of messages with informati
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2089) on about the current positions of all players is essential.
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2090) The failure to deliver messages in time results in choppy gameplay for
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2091) the players.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2092) In strategy games, the reliability of delivery may be more important than
676989b8 (unknown 2011-05-06 17:41:21 +0200 2093) the speed, since the game is not perceived as choppy even if the messages
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2094) are delayed.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2095) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2096)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2097) \begin_layout Standard
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2098) For someone operating a GGS, it is perhaps more interesting to measure the
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2099) system load, memory consumption, energy consumption and network saturation.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2100) These topics are discussed in theory in this section.
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2101) The implementation for the prototype is discussed in chapter
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2102) \begin_inset CommandInset ref
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2103) LatexCommand vref
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2104) reference "cha:Implementation-of-a"
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2105)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2106) \end_inset
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2107)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2108) .
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2109) For test results, refer to chapter
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2110) \begin_inset CommandInset ref
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2111) LatexCommand ref
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2112) reference "chap:Results-and-discussion"
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2113)
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2114) \end_inset
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2115)
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2116) , which contains graphs and a discussion concerning the performance of the
ed44db9f (Jonatan Pålsson 2011-05-12 19:04:44 +0200 2117) GGS prototype.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2118) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2119)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2120) \begin_layout Standard
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2121) \begin_inset Note Note
fd2e80ac (Jeena Paradies 2011-05-11 20:12:00 +0200 2122) status open
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2123)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2124) \begin_layout Plain Layout
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2125) Performance measurements
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2126) \end_layout
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2127)
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2128) \begin_layout Plain Layout
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2129)
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2130) \end_layout
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2131)
5ac7affa (Jonatan Pålsson 2011-05-12 08:48:42 +0200 2132) \begin_layout Plain Layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2133) Tue apr 26, 9:15.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2134) Continue from here on.
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2135) Discuss which results we may expect in a fully fledged GGS system.
676989b8 (unknown 2011-05-06 17:41:21 +0200 2136) What impedes the speeds, what raises the CPU load (and therefore the temperatur
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2137) es & power consumption).
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2138) What factors are there in the network saturation problem?
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2139) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2140)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2141) \begin_layout Plain Layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2142) Which games are affected by what, and what does this mean for the number
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2143) of players a GGS can handle?
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2144) \end_layout
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2145)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2146) \end_inset
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2147)
fd829165 (Jonatan Pålsson 2011-04-26 21:17:01 +0200 2148)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2149) \begin_inset Note Note
bc046ba1 (Jeena Paradies 2011-05-11 20:11:11 +0200 2150) status open
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2151)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2152) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2153) Create a game with several thousand players, see how our server scales,
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2154) how can we improve the performance? Sharding isnt very nice..
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2155) alternatives? Improve the speed of sharding?
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2156) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2157)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2158) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2159) See how the server scales
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2160) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2161)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2162) \begin_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2163) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2164) When adding many clients
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2165) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2166)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2167) \begin_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2168) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2169) Measure in
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2170) \begin_inset Formula $ms$
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2171) \end_inset
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2172)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2173) (ping to clients)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2174) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2175)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2176) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2177) measure in system load
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2178) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2179)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2180) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2181) Measure in loss of messages
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2182) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2183)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2184) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2185) Measure in # of timeouts? (if any??)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2186) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2187)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2188) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2189) Measure in time-to-crash
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2190) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2191)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2192) \end_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2193) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2194) When adding new machines to the pool
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2195) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2196)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2197) \begin_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2198) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2199) % increase of performance per machine
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2200) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2201)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2202) \end_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2203) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2204) Single-core CPU vs multi-core CPU
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2205) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2206)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2207) \begin_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2208) \begin_layout Itemize
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2209) It's very important to scale well on multi-core systems, since this is where
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2210) the industry is going.
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2211) Multicore is the future.
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2212) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2213)
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2214) \end_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2215) \end_deeper
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2216) \begin_layout Plain Layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2217) Find reference on how to benchmark distributed, multiprocess systems
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2218) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 2219)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2220) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2221)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2222)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2223) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2224)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 2225) \begin_layout Section
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2226) Choosing a network protocol
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2227) \begin_inset CommandInset label
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2228) LatexCommand label
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2229) name "sec:Choice-of-network"
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2230)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2231) \end_inset
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2232)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 2233)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2234) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2235)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2236) \begin_layout Standard
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2237) There are two main types of protocols with help of which computer communication
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2238) over the Internet usually takes place; TCP and UDP which are known as the
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2239) network layer protocols and HTTP which is the most prominent application
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2240) layer protocol.
618243ff (niklas 2011-05-11 17:42:39 +0200 2241) The transport layer protocols are commonly used to transport application
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2242) layer protocols such as HTTP, FTP and IRC.
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2243) TCP and UDP cannot be used on their own without an application layer protocol
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2244) on top of them.
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2245) Application layer protocols such as HTTP on the other hand need a transport
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2246) layer protocol in order to work.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2247) \end_layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2248)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2249) \begin_layout Standard
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2250) In order for the GGS to communicate with clients over a network, both an
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2251) application layer protocol and a network layer protocol must be chosen.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2252) This section outlines some candidates for application and network layer
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2253) protocols for the GGS, along with a motivation as to why the described
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2254) protocol was or was not chosen.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2255) \end_layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2256)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2257) \begin_layout Standard
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2258) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2259) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2260)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2261) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2262)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2263)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2264) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2265) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2266) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2267) textbf{HTTP}}{Hyper Text Transport Protocol, a network protocol commonly
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2268) used to deliver web pages}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2269) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2270)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2271) \begin_layout Plain Layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2272)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2273)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2274) \backslash
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2275) nomenclature{
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2276) \backslash
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2277) textbf{FTP}}{File Transfer Protocol}
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2278) \end_layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2279)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2280) \begin_layout Plain Layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2281)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2282)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2283) \backslash
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2284) nomenclature{
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2285) \backslash
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2286) textbf{IRC}}{Internet Relay Chat}
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2287) \end_layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2288)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2289) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2290)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2291)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2292) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2293)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 2294) \begin_layout Subsection
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2295) UDP
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2296) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2297)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2298) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2299) Many online games use UDP as the carrier for their application layer protocol.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2300) UDP moves data across a network very quickly, however it does not ensure
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2301) that the data transferred arrives in consistent manner.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2302) Data sent via UDP may be repeated, lost or out of order.
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2303) To ensure that the data is transferred is in good shape, some sort of error
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2304) checking mechanisms must be implemented.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2305) UDP is a good choice for applications where it is more important that data
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2306) arrives in a timely manner than that all data arrives undamaged, it is
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2307) thus very suitable for media streaming for example.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2308) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2309)
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2310) \begin_layout Standard
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2311) The need to implement custom error checking, and possibly correction makes
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2312) UDP a bad candidate for the GGS.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2313) If error checking and correction were to be implemented in the GGS project,
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2314) UDP would be a good candidate, however the time neccessary to implement
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2315) these features makes this option unfeasable.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2316) \end_layout
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2317)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 2318) \begin_layout Subsection
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2319) TCP
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2320) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2321)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2322) \begin_layout Standard
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2323) For reliable transfers TCP is often used on the Internet.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2324) Built in to the protocol are the error checking and correction mechanisms
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2325) missing in UDP.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2326) This ensures the consistency of data, but also makes the transfer slower
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2327) than if UDP had been used.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2328) TCP was chosen for the GGS as the network layer protocol even though TCP
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2329) can be considerably slower than UDP.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2330) The error checking mechanisms in TCP are reason enough to use TCP instead
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2331) of UDP in the GGS prototype.
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2332) The implementation of UDP is still possible, it will however not appear
812ead6c (Jonatan Pålsson 2011-05-12 19:14:46 +0200 2333) in the prototype.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2334) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2335)
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2336) \begin_layout Subsection
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2337) HTTP
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2338) \end_layout
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2339)
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2340) \begin_layout Standard
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2341) Since HTTP is so widely used in web servers on the Internet today, it is
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2342) available on most Internet connected devices.
618243ff (niklas 2011-05-11 17:42:39 +0200 2343) This means that if HTTP is used in the GGS, firewalls will not be a problem,
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2344) which is a great benefit.
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2345) However, due to the intended usage of HTTP in web servers, the protocol
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2346) was designed to be stateless and client-initiated.
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2347) In order to maintain a state during a game session using HTTP, some sort
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2348) of token would have to be passed between client and server at all times,
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2349) much like how a web server works.
618243ff (niklas 2011-05-11 17:42:39 +0200 2350) These facts combined make HTTP inappropriate for use in the GGS, since
618243ff (niklas 2011-05-11 17:42:39 +0200 2351) the GGS requires a state to be maintained throughout a session and also
618243ff (niklas 2011-05-11 17:42:39 +0200 2352) needs to push data from the server to clients without the clients requesting
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2353) data.
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2354) It should also be mentioned that HTTP uses the TCP protocol for transport.
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2355) \end_layout
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2356)
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2357) \begin_layout Subsection
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2358) The GGS Protocol
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2359) \end_layout
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2360)
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2361) \begin_layout Standard
618243ff (niklas 2011-05-11 17:42:39 +0200 2362) HTTP was designed to be a stateless protocol, which by adding some overhead
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2363) is able to remove the need of a permanent connection and a state for each
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2364) client.
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2365) The GGS however already has a permanent connection to each client because
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2366) it needs to push information to the clients.
618243ff (niklas 2011-05-11 17:42:39 +0200 2367) Therefore it is able to use the state to minimize the overhead in the communica
618243ff (niklas 2011-05-11 17:42:39 +0200 2368) tion between server and client.
618243ff (niklas 2011-05-11 17:42:39 +0200 2369) Therefore it was decided to invent a new protocol which was human readable
618243ff (niklas 2011-05-11 17:42:39 +0200 2370) like HTTP but customized for this special use.
88d8369f (Jeena Paradies 2011-05-10 15:12:00 +0200 2371) The GGS protocol is described in more detail in section
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2372) \begin_inset CommandInset ref
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2373) LatexCommand ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 2374) reference "sub:The-protocol-parser"
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2375)
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2376) \end_inset
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2377)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 2378) .
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2379) \end_layout
9c69081f (Jonatan Pålsson 2011-05-10 11:46:20 +0200 2380)
b239505a (niklas 2011-03-24 16:44:48 +0100 2381) \begin_layout Section
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2382) Generic structure of the GGS
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2383) \begin_inset CommandInset label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2384) LatexCommand label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2385) name "sec:Generic"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2386)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2387) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2388)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2389)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2390) \end_layout
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2391)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2392) \begin_layout Standard
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2393) The GGS is a game server.
69a3cf8d (Jonatan Pålsson 2011-05-12 19:23:34 +0200 2394) It was made with a desire to be suitable for many kinds of games.
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2395) A game should not only be able to vary in terms of genre, graphics, gameplay
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2396) etc, but also in the way the game is implemented for example in different
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2397) programming languages.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2398) The GGS should be OS independent and run on Windows, OS X and Linux.
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2399) The GGS can be run as a listen server on the players computer and host
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2400) games locally.
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2401) It could also be a dedicated server running on dedicated independent hardware.
618243ff (niklas 2011-05-11 17:42:39 +0200 2402) It is meant to run any game in any environment in any way desired, therefore
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2403) being as generic as possible.
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2404) \end_layout
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2405)
bb51ee17 (Kallfaktorn 2011-05-02 13:59:48 +0200 2406) \begin_layout Standard
69a3cf8d (Jonatan Pålsson 2011-05-12 19:23:34 +0200 2407) Clients upload the source code of the game it would like to play on the
69a3cf8d (Jonatan Pålsson 2011-05-12 19:23:34 +0200 2408) GGS, this way any client can connect to the server and install the game
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2409) through a API without the need of installation through the server provider
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2410) or maintainer.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2411) \end_layout
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2412)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2413) \begin_layout Standard
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2414) \begin_inset ERT
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2415) status open
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2416)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2417) \begin_layout Plain Layout
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2418)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2419)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2420) \backslash
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2421) nomenclature{
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2422) \backslash
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2423) textbf{API}}{Application programming interface}
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2424) \end_layout
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2425)
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2426) \end_inset
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2427)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2428)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2429) \end_layout
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2430)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2431) \begin_layout Section
400aa760 (Jeena Paradies 2011-05-11 20:25:48 +0200 2432) Fault tolerance
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2433) \begin_inset CommandInset label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2434) LatexCommand label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2435) name "sec:Fault-Tolerance"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2436)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2437) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2438)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2439)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2440) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2441)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2442) \begin_layout Standard
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2443) Merriam-Websters dictionary
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2444) \begin_inset CommandInset citation
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2445) LatexCommand citeyearpar
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2446) key "Dictionary.com2011"
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2447)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2448) \end_inset
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2449)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2450) defines fault tolerance as:
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2451) \end_layout
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2452)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2453) \begin_layout Quotation
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2454) 1.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2455) The ability of a system or component to continue normal operation despite
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2456) the presence of hardware or software faults.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2457) This often involves some degree of redundancy.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2458) \end_layout
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2459)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2460) \begin_layout Quotation
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2461) 2.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2462) The number of faults a system or component can withstand before normal
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2463) operation is impaired.
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2464)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2465) \end_layout
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2466)
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2467) \begin_layout Standard
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2468) Fault tolerance is an important factor in servers, a server that is fault
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2469) tolerant should be able to follow a given specification when parts of the
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2470) system fail.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2471) This means that fault tolerance is different in each system depending on
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2472) what specification it has.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2473) It should be noted that it is not possible to achieve complete fault tolerance,
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2474) a system will always have a certain risk of failure.
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2475) With this in mind the goal is to make the GGS prototype as fault tolerant
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2476) as possible.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2477) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2478)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2479) \begin_layout Standard
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2480) In order to make the GGS prototype fault tolerant the programming language
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2481) Erlang has been used.
a7f5051a (Jeena Paradies 2011-05-12 13:05:27 +0200 2482) Erlang will not guarantee a fault tolerant system, however it has features
a9d0d873 (Jeena Paradies 2011-05-12 13:03:24 +0200 2483) that support and encourage the development of fault tolerant systems.
a7f5051a (Jeena Paradies 2011-05-12 13:05:27 +0200 2484) In the GGS it is important that the complete system is fault tolerant,
a7f5051a (Jeena Paradies 2011-05-12 13:05:27 +0200 2485) not only small parts.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2486) Crashes of the whole system should be avoided as this would make the system
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2487) unusable for a time.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2488) By using supervisor structures it is possible to crash and restart small
a7f5051a (Jeena Paradies 2011-05-12 13:05:27 +0200 2489) parts of the system, this is convenient as faults can be handled within
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2490) small modules thus never forcing a crash of the system.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2491) \end_layout
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2492)
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2493) \begin_layout Standard
030e0eca (niklas 2011-04-13 16:25:16 +0200 2494) The need for fault tolerance in game servers is not as obvious as it may
676989b8 (unknown 2011-05-06 17:41:21 +0200 2495) be for other type of servers.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2496) In general all servers strive to be fault tolerant as fault tolerance means
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2497) more uptime and a safer system.
f10a2179 (Jonatan Pålsson 2011-05-12 10:04:42 +0200 2498) This applies to game servers as well, good fault tolerance is a way of
f10a2179 (Jonatan Pålsson 2011-05-12 10:04:42 +0200 2499) satisfying customers.
030e0eca (niklas 2011-04-13 16:25:16 +0200 2500) In general, game servers differ from many other fault tolerant systems
030e0eca (niklas 2011-04-13 16:25:16 +0200 2501) in that high-availability is more important than the safety of the system.
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2502) For example a simple calculation error will not be critical for a game
d6c30f58 (niklas 2011-04-06 11:58:30 +0200 2503) server but it may be in a life-critical system and then it is better that
030e0eca (niklas 2011-04-13 16:25:16 +0200 2504) the system crashes than works with the faulty data.
030e0eca (niklas 2011-04-13 16:25:16 +0200 2505) There are cases where safety may be critical in game servers, one example
030e0eca (niklas 2011-04-13 16:25:16 +0200 2506) is in games where in-game money exist.
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2507) \begin_inset CommandInset citation
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2508) LatexCommand citet
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2509) key "Gartner:1999:FFD:311531.311532"
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2510)
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2511) \end_inset
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2512)
d313fe75 (niklas 2011-05-12 13:15:01 +0200 2513)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2514) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2515)
b239505a (niklas 2011-03-24 16:44:48 +0100 2516) \begin_layout Section
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2517) Availability
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2518) \begin_inset CommandInset label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2519) LatexCommand label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2520) name "sec:Availability"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2521)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2522) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2523)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2524)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2525) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2526)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2527) \begin_layout Standard
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2528) One important factor of any server is the availability.
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2529) A server which is unreachable is an useless server.
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2530)
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2531) \end_layout
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2532)
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2533) \begin_layout Standard
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2534) Within the telecom sector high availability has been achieved
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2535) \begin_inset CommandInset citation
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2536) LatexCommand citet
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2537) key "armstrong2011"
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2538)
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2539) \end_inset
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2540)
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2541) .
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2542) In the game development sector however the lack of high availability problem
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2543) has not yet been solved.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2544) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2545)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2546) \begin_layout Standard
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2547) There are several good papers (e.g.
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2548)
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2549) \begin_inset CommandInset citation
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2550) LatexCommand citet
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2551) key "VM:Jin2010,VM:Polze"
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2552)
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2553) \end_inset
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2554)
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2555) ) on how to migrate whole virtual machines among nodes to replicate them
54d0e081 (Jeena Paradies 2011-05-12 19:48:21 +0200 2556) but for the GGS a different approach has been chosen.
920e4f53 (Jonatan Pålsson 2011-05-12 10:14:18 +0200 2557) Instead of duplicating a virtual machine, an attempt to lift the state
920e4f53 (Jonatan Pålsson 2011-05-12 10:14:18 +0200 2558) of the VM to a storage external to the VM is made.
920e4f53 (Jonatan Pålsson 2011-05-12 10:14:18 +0200 2559) The state is stored in a fast, fault tolerant data store instead of inside
920e4f53 (Jonatan Pålsson 2011-05-12 10:14:18 +0200 2560) the VM.
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2561) In addition to migrating the state of the game VM, the GGS uses tools from
c4a1af1d (Jonatan Pålsson 2011-05-12 12:04:02 +0200 2562) the OTP, some of them are
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2563) \emph on
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2564) hot code replacement
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2565) \emph default
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2566) , where code can be updated while the application is running and without
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2567) the need to restart it, the
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2568) \emph on
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2569) supervisor structure
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2570) \emph default
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2571) provided by
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2572) \emph on
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2573) OTP
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2574) \emph default
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2575) and the inter node and process communication via
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2576) \emph on
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2577) messages
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2578) \emph default
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2579) instead of shared memory.
2edf5412 (Jeena Paradies 2011-04-04 16:44:27 +0200 2580) We will discuss each of them later on.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2581) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2582) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2583)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2584) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2585)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2586)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2587) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2588) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2589) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2590) textbf{Supervisor}}{A process monitoring and hadning crashes in other processes}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2591) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2592)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2593) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2594)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2595)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2596) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2597)
b239505a (niklas 2011-03-24 16:44:48 +0100 2598) \begin_layout Section
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2599) Scalability
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2600) \begin_inset CommandInset label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2601) LatexCommand label
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2602) name "sec:Scalability"
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2603)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2604) \end_inset
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2605)
b4edb8eb (Jonatan Pålsson 2011-04-26 19:12:21 +0200 2606)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2607) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2608)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2609) \begin_layout Standard
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 2610) Each instance of the GGS contains several so called tables.
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2611) Each table is an isolated instance of a game, for instance a chess game
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2612) or a poker game.
afe0cbfb (Jonatan Pålsson 2011-05-12 19:29:58 +0200 2613) A possible way for the GGS to scale up is to distribute these tables on
afe0cbfb (Jonatan Pålsson 2011-05-12 19:29:58 +0200 2614) different servers.
79848ce5 (niklas 2011-05-04 15:37:19 +0200 2615) In many games it is not necessary for a player to move among tables during
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2616) games.
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2617) This is for example not a common occurrence in chess, where it would be
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2618) represented as a player standing up from her current table and sitting
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2619) down at a new table, all within the same game session.
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2620) Therefore the main focus of the GGS is not to move players among tables,
0d4d0237 (Jeena Paradies 2011-05-12 20:43:02 +0200 2621) but to keep a player seated by a table and to start new tables if needed
0d4d0237 (Jeena Paradies 2011-05-12 20:43:02 +0200 2622) instead.
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2623) When a server reaches a certain number of players the performance will
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2624) start to decrease, or worse, the server may even crash.
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2625) To avoid this the GGS will start new tables on another server, using this
79848ce5 (niklas 2011-05-04 15:37:19 +0200 2626) technique the players will be close to evenly distributed among the servers.
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2627) It is important to investigate the amount of players which is optimal for
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2628) each server.
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2629) This approach makes it possible to use all resources with a moderate load,
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2630) instead of having some resources with heavy load and others with almost
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2631) no load.
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2632) \end_layout
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2633)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2634) \begin_layout Standard
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2635) As mentioned in section
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2636) \begin_inset CommandInset ref
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2637) LatexCommand ref
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2638) reference "sec:Background"
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2639)
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2640) \end_inset
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2641)
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2642) there are two different types of scalability, structural scalability and
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2643) load scalability.
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2644) To make the GGS scalable both types of scalability have to be considered.
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2645) Structural scalability means - in this case - that it should be possible
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2646) to add more servers to an existing cluster of servers.
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2647) By adding more servers the limits of with how many users a system can be
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2648) burdened with is increased.
5397fc71 (Jeena Paradies 2011-05-12 17:25:29 +0200 2649) Load scalability, in contrast to structural scalability, is not about how
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2650) to increase the actual limits of the system, rather it means how good the
f69b8e6b (Jonatan Pålsson 2011-05-12 12:26:07 +0200 2651) system handles increased load.
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2652) The GGS should be able to scale well in both categories.
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2653) \end_layout
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2654)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2655) \begin_layout Subsection
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2656) Load balancing
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2657) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2658)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2659) \begin_layout Standard
79848ce5 (niklas 2011-05-04 15:37:19 +0200 2660) The need for load balancing varies among different kind of systems.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2661) Small systems that only use one or a couple of servers can cope with a
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2662) simple implementation of a load balancer, while in large systems it is
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2663) useful to have extensive and well working load balancing implementations.
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2664) The need also depends on what kind of server structure the system is working
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2665) on; a static structure where the number of servers is predefined or a dynamic
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2666) structure where this number varies.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2667) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2668) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2669)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2670) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2671)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2672)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2673) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2674) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2675) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 2676) textbf{Amazon EC2}}{A cloud computation service}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2677) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2678)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2679) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2680)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2681)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2682) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2683)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2684) \begin_layout Standard
1d05e50a (Jonatan Pålsson 2011-05-12 12:41:55 +0200 2685) Load balancing and scaling are difficult in different scenarios.
6d4074a9 (Jonatan Pålsson 2011-05-12 19:36:13 +0200 2686) When running in a server park, there is a set number of servers available,
6d4074a9 (Jonatan Pålsson 2011-05-12 19:36:13 +0200 2687) this means that an even distribution on all servers is preferable.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2688) When running the GGS in a cloud, such as Amazon EC2, it is possible to
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2689) add an almost infinite number of servers as execution goes on and the load
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2690) increases.
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2691) In this cloud setting it may be more important to evenly distribute load
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2692) on newly added servers.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2693) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2694)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2695) \begin_layout Standard
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2696) Two methods of balancing load (increasing structure):
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2697) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2698)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2699) \begin_layout Itemize
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2700) Fill up the capacity of one server completely, and then move over to the
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2701) next server
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2702) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2703)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2704) \begin_layout Itemize
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2705) Evenly distribute all clients to all servers from the beginning.
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2706) When the load becomes too high on all of them a new problem arises: How
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2707) do we distribute the load on these new servers?
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2708) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2709)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2710) \begin_layout Standard
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2711) Load balancing is a key component to achieve scalability in network systems.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2712) The GGS is a good example of a system that needs to be scalable, to attain
1d05e50a (Jonatan Pålsson 2011-05-12 12:41:55 +0200 2713) this, load balancing is necessary.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2714) Optimization of the load balancing for a system is an important task to
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2715) provide a stable and fast load balancer.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2716) There are certain persistence problems that can occur with load balancing,
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2717) if a player moves from a server to another data loss may occur.
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2718) This is an important aspect to consider when a load balancer is designed
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2719) and implemented.
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2720) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 2721)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2722) \begin_layout Standard
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 2723) Load balancing can often be implemented using dedicated software, this means
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2724) that in many applications load balancing may not be implemented internally
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2725) because better external solutions exist already.
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2726) This depends on what specific needs the system has.
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2727) A minor goal of this thesis is to analyze whether the GGS can use existing
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 2728) load balancing tools or if it is necessary, how to implement load balancing
43fb94a3 (Jeena Paradies 2011-05-12 17:41:56 +0200 2729) in the project.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 2730) \end_layout
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 2731)
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 2732) \begin_layout Standard
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2733) \begin_inset Note Note
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2734) status open
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2735)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2736) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2737) Because P2P game architectures are a constant goal for cheaters and because
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2738) “Cheating is a major concern in network games as it degrades the experience
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2739) of the majority of players who are honest” and preventing cheating in P2P
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2740) game architectures is very difficult game developers try to use Client
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2741) - Server architectures which have a natural problem to scale.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2742) In this paper we want to show some strategies to achieve scalability.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2743) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 2744)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2745) \end_inset
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2746)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2747)
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2748) \end_layout
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2749)
8aaa14e5 (Jonatan Pålsson 2011-04-04 14:47:22 +0200 2750) \begin_layout Subsection
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2751) UUID
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2752) \begin_inset CommandInset label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2753) LatexCommand label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2754) name "sub:UUID"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2755)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2756) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2757)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 2758)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2759) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2760)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2761) \begin_layout Standard
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2762) \begin_inset Float algorithm
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2763) wide false
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2764) sideways false
9a119acd (Jonatan Pålsson 2011-04-27 14:54:19 +0200 2765) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2766)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2767) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2768) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2769) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2770)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2771) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2772)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2773)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2774) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2775) begin{algorithmic}[1]
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2776) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2777)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2778) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2779)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2780)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2781) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2782)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2783) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2784) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2785) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2786)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2787) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2788)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2789)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2790) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2791) newcommand{
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2792) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2793) INDSTATE}[1][1]{
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2794) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2795) STATE
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2796) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2797) hspace{#1
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2798) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2799) algorithmicindent}}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2800) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2801)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2802) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2803)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2804)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2805) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2806)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2807) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2808) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2809) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2810)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2811) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2812)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2813)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2814) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2815) STATE
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2816) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2817)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2818) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2819)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2820) global variable
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2821) \begin_inset Formula $state:=0$
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2822) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2823)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2824)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2825) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2826)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2827) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2828) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2829) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2830)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2831) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2832)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2833)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2834) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2835) STATE
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2836) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2837)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2838) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2839)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2840)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2841) \series bold
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2842) function
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2843) \series default
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2844) unique
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2845) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2846)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2847) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2848) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2849) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2850)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2851) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2852)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2853)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2854) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2855) INDSTATE
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2856) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2857)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2858) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2859)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2860)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2861) \begin_inset Formula $state:=state+1$
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2862) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2863)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2864)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2865) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2866)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2867) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2868) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2869) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2870)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2871) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2872)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2873)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2874) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2875) INDSTATE
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2876) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2877)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2878) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2879)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2880)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2881) \series bold
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2882) return
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2883) \begin_inset Formula $state$
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2884) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2885)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2886)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2887) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2888)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2889) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2890) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2891) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2892)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2893) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2894)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2895)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2896) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2897) end{algorithmic}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2898) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2899)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2900) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2901)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2902)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2903) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2904)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2905) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2906) \begin_inset Caption
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2907)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2908) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2909) \begin_inset CommandInset label
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2910) LatexCommand label
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2911) name "alg:A-simple-generator"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2912)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2913) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2914)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2915) A simple (insufficient) generator for identifiers
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2916) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2917)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2918) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2919)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2920)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2921) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2922)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2923) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2924)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2925)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2926) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2927)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2928) \begin_layout Standard
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2929) \begin_inset ERT
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2930) status open
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2931)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2932) \begin_layout Plain Layout
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2933)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2934)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2935) \backslash
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2936) nomenclature{
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2937) \backslash
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2938) textbf{UUID}}{Universally Unique Identifier}
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2939) \end_layout
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2940)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2941) \end_inset
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2942)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2943)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2944) \end_layout
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2945)
eaae8a48 (Jonatan Pålsson 2011-05-10 11:42:54 +0200 2946) \begin_layout Standard
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2947) Inside the GGS everything needs a unique identifier.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2948) There are identifiers for players, tables and other resources.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2949) When players communicate amongst each other or with tables, they need to
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2950) be able to uniquely identify all of these resources.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2951) Within one machine, this is mostly not a problem.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2952) A simple system with a counter can be imagined, where each request for
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2953) a new ID increments the previous identifier and returns the new identifier
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2954) based on the old one; see algorithm
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2955) \begin_inset CommandInset ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2956) LatexCommand ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2957) reference "alg:A-simple-generator"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2958)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2959) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2960)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2961) .
5ac94cf9 (Jonatan Pålsson 2011-04-05 10:14:34 +0200 2962) This solution poses problems when dealing with concurrent and distributed
5ac94cf9 (Jonatan Pålsson 2011-04-05 10:14:34 +0200 2963) systems.
5ac94cf9 (Jonatan Pålsson 2011-04-05 10:14:34 +0200 2964) In concurrent systems, the simple solution in algorithm
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2965) \begin_inset CommandInset ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2966) LatexCommand ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2967) reference "alg:A-simple-generator"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2968)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2969) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2970)
71c4da0a (niklas 2011-04-12 12:05:47 +0200 2971) may yield non-unique identifiers due to the lack of mutual exclusion.
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2972) \end_layout
0caf43b1 (niklas 2011-03-30 10:41:13 +0200 2973)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2974) \begin_layout Standard
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2975) The obvious solution to this problem is to ensure mutual exclusion by using
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2976) some sort of a lock, which may work well in many concurrent systems.
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 2977) In a distributed system such as the GGS however, this lock, along with
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 2978) the state, would have to be distributed.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2979) If the lock is not distributed, no guaranties can be made that two nodes
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2980) in the distributed system do not generate the same identifier.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2981) \end_layout
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2982)
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2983) \begin_layout Standard
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2984) A different approach is to give each node the ability to generate Universally
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2985) Unique Identifiers (UUID), where the state of one machine does not interfere
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 2986) with the state of another.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2987) According to
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2988) \begin_inset CommandInset citation
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2989) LatexCommand citet
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2990) key "Leach98uuidsand"
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2991)
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2992) \end_inset
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2993)
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 2994) :
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2995) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2996) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2997)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2998) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 2999)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3000)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3001) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3002) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3003) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3004) textbf{MAC Address}}{Media Access Control address, used to identify network
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3005) cards}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3006) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3007)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3008) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3009)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3010)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3011) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3012) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3013) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3014) textbf{SHA-1}}{Cryptigraphic hash function, designed by the National Security
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3015) Agency (NSA)}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3016) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3017)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3018) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3019)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3020)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3021) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3022)
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 3023) \begin_layout Quote
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3024) A UUID is 128 bits long, and if generated according to the one of the mechanisms
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3025) in this document, is either guaranteed to be different from all other UUIDs/GUI
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3026) Ds generated until 3400 A.D.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 3027) or extremely likely to be different.
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 3028) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3029)
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 3030) \begin_layout Standard
a4c3b2c4 (Jeena Paradies 2011-05-12 18:14:20 +0200 3031) The generation of a UUID is accomplished by gathering several different
277677ea (Jeena Paradies 2011-05-12 20:57:34 +0200 3032) sources of information, such as: time, MAC addresses of network cards;
277677ea (Jeena Paradies 2011-05-12 20:57:34 +0200 3033) and operating system data such as; percentage of memory in use, mouse cursor
dfd234d6 (niklas 2011-05-12 13:07:09 +0200 3034) position and process IDs.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3035) The gathered data is then
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3036) \emph on
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3037) hashed
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3038) \emph default
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3039)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3040) \begin_inset space ~
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3041) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3042)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3043) using an algorithm such as SHA-1.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3044) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3045)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3046) \begin_layout Standard
277677ea (Jeena Paradies 2011-05-12 20:57:34 +0200 3047) When using system wide unique identifiers it is extremly unlikely to have
277677ea (Jeena Paradies 2011-05-12 20:57:34 +0200 3048) identifier collisions when recovering from network splits between GGS clusters.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3049) Consider figure
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3050) \begin_inset CommandInset ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3051) LatexCommand ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3052) reference "fig:network-split"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3053)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3054) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3055)
dfd234d6 (niklas 2011-05-12 13:07:09 +0200 3056) , where an example of a network split is presented.
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3057) When
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3058) \emph on
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3059)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3060) \emph default
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3061) the decoupled node
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3062) \emph on
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3063)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3064) \emph default
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3065) and
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3066) \emph on
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3067)
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3068) \emph default
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3069) the rest of the network later re-establish communication, they may have
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3070) generated the same IDs if using algorithm
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3071) \begin_inset CommandInset ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3072) LatexCommand ref
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3073) reference "alg:A-simple-generator"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3074)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3075) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3076)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3077) , even when mutual system-wide exclusion is implemented.
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3078) This is exactly the problem UUIDs solve.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3079) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3080) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3081)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3082) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3083)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3084)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3085) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3086) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3087) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3088) textbf{Network split}}{Separation of two networks, occurs when two networks
5a9339b3 (niklas 2011-05-11 14:17:41 +0200 3089) cannot communicate, commonly because of a hardware or software failiure}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3090) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3091)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3092) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3093)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3094)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3095) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3096)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3097) \begin_layout Standard
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3098) \begin_inset Float figure
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3099) wide false
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3100) sideways false
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3101) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3102)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3103) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3104) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3105) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3106)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3107) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3108)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3109)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3110) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3111) begin{centering}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3112) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3113)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3114) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3115)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3116)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3117) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3118)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3119) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3120) \begin_inset Graphics
ef335f1a (Jeena Paradies 2011-05-02 13:03:30 +0200 3121) filename graphics/netsplit2.eps
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3122) scale 40
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3123)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3124) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3125)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3126)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3127) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3128)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3129) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3130) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3131) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3132)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3133) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3134)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3135)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3136) \backslash
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3137) end{centering}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3138) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3139)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3140) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3141)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3142)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3143) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3144)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3145) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3146) \begin_inset Caption
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3147)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3148) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3149) \begin_inset CommandInset label
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3150) LatexCommand label
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3151) name "fig:network-split"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3152)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3153) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3154)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3155) An example of a network split
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3156) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3157)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3158) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3159)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3160)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3161) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3162)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3163) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3164)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3165)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3166) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3167)
b239505a (niklas 2011-03-24 16:44:48 +0100 3168) \begin_layout Section
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3169) Security
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3170) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3171)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3172) \begin_layout Standard
d1e3fb73 (Jonatan Pålsson 2011-05-12 13:06:54 +0200 3173) The GGS only supports languages running in a sandboxed environment.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3174) Each game session is started in its own sandbox.
5a9339b3 (niklas 2011-05-11 14:17:41 +0200 3175) The sandboxing isolates the games in such a way that they cannot interfere
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3176) with each other.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3177) If sandboxing was not in place, one game could potentially modify the contents
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3178) of a different game.
d1e3fb73 (Jonatan Pålsson 2011-05-12 13:06:54 +0200 3179) A similar approach is taken with the persistent storage provided by the
d1e3fb73 (Jonatan Pålsson 2011-05-12 13:06:54 +0200 3180) GGS.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3181) In the storage each game has its own namespace, much like a table in a
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3182) relational database.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3183) A game is not allowed to venture outside this namespace, and can because
79848ce5 (niklas 2011-05-04 15:37:19 +0200 3184) this not modify the persistent data of other games.
d1e3fb73 (Jonatan Pålsson 2011-05-12 13:06:54 +0200 3185)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3186) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3187) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3188)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3189) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3190)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3191)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3192) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3193) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3194) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3195) textbf{Sandbox}}{A protected environment in which computer software can
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3196) be run safely}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3197) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3198)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3199) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3200)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3201)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3202) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3203)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 3204) \begin_layout Section
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 3205) Game Development Language in a Virtual Machine
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3206) \begin_inset CommandInset label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3207) LatexCommand label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3208) name "sec:Game-Development-Language"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3209)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3210) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3211)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3212)
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3213) \end_layout
73414fa1 (niklas 2011-04-12 12:38:33 +0200 3214)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 3215) \begin_layout Standard
8bde3441 (Jonatan Pålsson 2011-05-12 13:13:30 +0200 3216) Erlang is not a very popular language for game development, therefore the
8bde3441 (Jonatan Pålsson 2011-05-12 13:13:30 +0200 3217) GGS needs to be able to run games written in different languages.
8bde3441 (Jonatan Pålsson 2011-05-12 13:13:30 +0200 3218) The main idea is to offer a replaceable module which would introduce an
9271bc7b (Jeena Paradies 2011-05-11 14:58:56 +0200 3219) interface to different virtual machines which would run the game code.
28340e67 (niklas 2011-05-11 14:06:13 +0200 3220) This way a game developer can write the game in his favorite language while
6d4074a9 (Jonatan Pålsson 2011-05-12 19:36:13 +0200 3221) the server part still is written in Erlang and can benefit from all the
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3222) advantages the Erlang language provides.
28340e67 (niklas 2011-05-11 14:06:13 +0200 3223) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3224)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3225) \begin_layout Subsection
28340e67 (niklas 2011-05-11 14:06:13 +0200 3226) JavaScript
28340e67 (niklas 2011-05-11 14:06:13 +0200 3227) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3228)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3229) \begin_layout Standard
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3230) JavaScript is a prime GDL candidate for the GGS.
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3231) The language is very flexible, and a large base of developers within the
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3232) web community is using this language on the client side within the browser
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3233) and therefore are used to it.
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3234) \end_layout
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3235)
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3236) \begin_layout Standard
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3237) JavaScript, as a interpreted script language, has gained a lot of popularity
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3238) in other fields of computer science lately.
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3239) It is used as a server side language in large projects such as
28340e67 (niklas 2011-05-11 14:06:13 +0200 3240) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3241) Riak
28340e67 (niklas 2011-05-11 14:06:13 +0200 3242) \emph default
28340e67 (niklas 2011-05-11 14:06:13 +0200 3243)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3244) \begin_inset Foot
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3245) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3246)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3247) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3248) \begin_inset Flex URL
28340e67 (niklas 2011-05-11 14:06:13 +0200 3249) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3250)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3251) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3252)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3253) http://wiki.basho.com/An-Introduction-to-Riak.html
28340e67 (niklas 2011-05-11 14:06:13 +0200 3254) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3255)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3256) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3257)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3258)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3259) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3260)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3261) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3262)
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3263) or
28340e67 (niklas 2011-05-11 14:06:13 +0200 3264) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3265) CouchDB
28340e67 (niklas 2011-05-11 14:06:13 +0200 3266) \emph default
28340e67 (niklas 2011-05-11 14:06:13 +0200 3267)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3268) \begin_inset Foot
28340e67 (niklas 2011-05-11 14:06:13 +0200 3269) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3270)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3271) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3272) \begin_inset Flex URL
28340e67 (niklas 2011-05-11 14:06:13 +0200 3273) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3274)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3275) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3276)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3277) http://couchdb.apache.org
28340e67 (niklas 2011-05-11 14:06:13 +0200 3278) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3279)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3280) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3281)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3282)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3283) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3284)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3285) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3286)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3287) .
28340e67 (niklas 2011-05-11 14:06:13 +0200 3288) On the popular social coding site
28340e67 (niklas 2011-05-11 14:06:13 +0200 3289) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3290) GitHub.com
28340e67 (niklas 2011-05-11 14:06:13 +0200 3291) \emph default
28340e67 (niklas 2011-05-11 14:06:13 +0200 3292) , 18%
28340e67 (niklas 2011-05-11 14:06:13 +0200 3293) \begin_inset Foot
28340e67 (niklas 2011-05-11 14:06:13 +0200 3294) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3295)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3296) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3297) during the writing of the thesis the percentage went up to 19%
28340e67 (niklas 2011-05-11 14:06:13 +0200 3298) \begin_inset Flex URL
28340e67 (niklas 2011-05-11 14:06:13 +0200 3299) status collapsed
28340e67 (niklas 2011-05-11 14:06:13 +0200 3300)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3301) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3302)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3303) https://github.com/languages/
28340e67 (niklas 2011-05-11 14:06:13 +0200 3304) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3305)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3306) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3307)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3308)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3309) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3310)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3311) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3312)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3313) of all code is written in JavaScript.
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3314)
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3315) \end_layout
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3316)
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3317) \begin_layout Standard
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3318) Apart from that there are virtual machines with bindings to Erlang readily
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3319) available for JavaScript which are provided by organisations like Mozilla
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3320) and companies like Google.
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3321) In the end this choice was more or less arbitrary since the GGS is intended
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3322) to be able to run several different GDL VMs, and one had to be the first.
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3323)
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3324) \end_layout
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3325)
42f77380 (Jonatan Pålsson 2011-05-12 19:44:58 +0200 3326) \begin_layout Standard
28340e67 (niklas 2011-05-11 14:06:13 +0200 3327) \begin_inset ERT
77870a60 (Jeena Paradies 2011-05-12 22:10:23 +0200 3328) status open
28340e67 (niklas 2011-05-11 14:06:13 +0200 3329)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3330) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3331)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3332)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3333) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3334) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3335) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3336) textbf{CouchDB}}{Database server}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3337) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3338)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3339) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3340)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3341)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3342) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3343) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3344) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3345) textbf{Riak}}{Database server}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3346) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3347)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3348) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3349)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3350)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3351) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3352) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3353) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3354) textbf{GitHub.com}}{Social coding website}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3355) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3356)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3357) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3358)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3359)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3360) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3361) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3362) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3363) textbf{ActionScript}}{Programming language}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3364) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3365)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3366) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3367)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3368)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3369) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3370) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3371) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3372) textbf{Lua}}{Programming language}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3373) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3374)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3375) \begin_layout Plain Layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3376)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3377)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3378) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3379) nomenclature{
28340e67 (niklas 2011-05-11 14:06:13 +0200 3380) \backslash
28340e67 (niklas 2011-05-11 14:06:13 +0200 3381) textbf{.NET}}{Software platform}
28340e67 (niklas 2011-05-11 14:06:13 +0200 3382) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3383)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3384) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3385)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3386)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3387) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3388)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3389) \begin_layout Subsection
28340e67 (niklas 2011-05-11 14:06:13 +0200 3390) Other languages
28340e67 (niklas 2011-05-11 14:06:13 +0200 3391) \end_layout
28340e67 (niklas 2011-05-11 14:06:13 +0200 3392)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3393) \begin_layout Standard
28340e67 (niklas 2011-05-11 14:06:13 +0200 3394) Other languages like
28340e67 (niklas 2011-05-11 14:06:13 +0200 3395) \emph on
f9ae55d2 (Niklas Landin 2011-05-12 18:59:38 +0200 3396) Lua
28340e67 (niklas 2011-05-11 14:06:13 +0200 3397) \emph default
f9ae55d2 (Niklas Landin 2011-05-12 18:59:38 +0200 3398) or
28340e67 (niklas 2011-05-11 14:06:13 +0200 3399) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3400) ActionScript
28340e67 (niklas 2011-05-11 14:06:13 +0200 3401) \emph default
a0abbf6e (Jonatan Pålsson 2011-05-12 19:48:42 +0200 3402) are suitable as well since there is a virtual machine for each of them
28340e67 (niklas 2011-05-11 14:06:13 +0200 3403) which can be
28340e67 (niklas 2011-05-11 14:06:13 +0200 3404) \begin_inset Quotes eld
28340e67 (niklas 2011-05-11 14:06:13 +0200 3405) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3406)
28340e67 (niklas 2011-05-11 14:06:13 +0200 3407) plugged in
28340e67 (niklas 2011-05-11 14:06:13 +0200 3408) \begin_inset Quotes erd
28340e67 (niklas 2011-05-11 14:06:13 +0200 3409) \end_inset
28340e67 (niklas 2011-05-11 14:06:13 +0200 3410)
f9ae55d2 (Niklas Landin 2011-05-12 18:59:38 +0200 3411) into the GDL VM interface.
28340e67 (niklas 2011-05-11 14:06:13 +0200 3412) With help of the
28340e67 (niklas 2011-05-11 14:06:13 +0200 3413) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3414) Java Virtual Machine
28340e67 (niklas 2011-05-11 14:06:13 +0200 3415) \emph default
28340e67 (niklas 2011-05-11 14:06:13 +0200 3416) or the
28340e67 (niklas 2011-05-11 14:06:13 +0200 3417) \emph on
28340e67 (niklas 2011-05-11 14:06:13 +0200 3418) .NET
28340e67 (niklas 2011-05-11 14:06:13 +0200 3419) \emph default
28340e67 (niklas 2011-05-11 14:06:13 +0200 3420) environment it is even possible to run nearly every available programming
f9ae55d2 (Niklas Landin 2011-05-12 18:59:38 +0200 3421) language in a sandbox as a GDL, however only a VM for JavaScript will be
f9ae55d2 (Niklas Landin 2011-05-12 18:59:38 +0200 3422) implemented in the GGS prototype.
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 3423) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 3424)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3425) \begin_layout Section
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3426) Testing
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3427) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3428)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3429) \begin_layout Standard
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3430) There are several ways in which the GGS can be tested.
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3431) The most important aspect is deemed to be the experience players have when
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3432) using the GGS.
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3433) To test the user experience of the GGS, a realistic usage scenario has
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3434) to be set up.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3435) \end_layout
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3436)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3437) \begin_layout Standard
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3438) The GGS is intended to be used for powering games which have many concurrent
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3439) players.
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3440) The players do not need to participate in the same instance of the game,
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3441) games such as chess are possible candidates for the testing sessions.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3442) \end_layout
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3443)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3444) \begin_layout Standard
4606e327 (Jonatan Pålsson 2011-05-12 18:51:08 +0200 3445) When developing the GGS, two main categories of games exhibiting different
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3446) performance requirements were identified; real-time games and turn-based
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3447) games.
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3448) The real-time games are deemed more demanding than the turn based games.
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3449) Tests are carried out using a real time game, since this is the more demanding
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3450) type of games.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3451) \end_layout
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3452)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3453) \begin_layout Standard
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3454) The real time game chosen for testing of the GGS is
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3455) \emph on
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3456) Pong
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3457) \emph default
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3458) , a game in which two players play a game involving a ball and two paddles.
676989b8 (unknown 2011-05-06 17:41:21 +0200 3459) The goal for each player is to shoot beside the other players paddle while
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3460) not allowing the ball to pass by her own paddle.
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3461) The game requires real time updates and is demanding when played in several
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3462) instances concurrently.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3463) \end_layout
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3464)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3465) \begin_layout Standard
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3466) There has been some work on the area of testing game servers, see
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3467) \begin_inset CommandInset citation
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3468) LatexCommand citet
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3469) key "Lidholt02designand"
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3470)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3471) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3472)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3473) , who describes a test bench using
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3474) \emph on
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3475) bots
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3476) \emph default
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3477) for testing his generic hazard-gaming server.
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3478) Lidholt describes how his server, capable of running several different
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3479) casino games is tested using artificial players, so called bots.
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3480) Performance is measured in
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3481) \begin_inset Quotes eld
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3482) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3483)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3484) number of clients
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3485) \begin_inset Quotes erd
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3486) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3487)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 3488) able to connect to the server, and the system load.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3489) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3490)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3491) \begin_layout Standard
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3492) Similar tests have been performed on the GGS, and the results of these tests
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3493) are visible in chapter
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3494) \begin_inset CommandInset ref
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3495) LatexCommand ref
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3496) reference "chap:Results-and-discussion"
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3497)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3498) \end_inset
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3499)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3500) .
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3501) The tests were initially performed by starting an operating system process
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3502) for each player.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3503) Due to lack of hardware, not enough player processes could be started in
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3504) this way.
0546e62b (Niklas Landin 2011-05-12 19:13:46 +0200 3505) The bots were rewritten in Erlang, and due to Erlang's light weigh threads,
f16e3f57 (Jeena Paradies 2011-05-12 22:21:48 +0200 3506) enough processes could have been created to test the server successfully.
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3507) \end_layout
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 3508)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 3509) \begin_layout Chapter
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 3510) Implementation of a prototype
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 3511) \begin_inset CommandInset label
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 3512) LatexCommand label
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 3513) name "cha:Implementation-of-a"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3514)
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 3515) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3516)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3517)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3518) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3519)
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3520) \begin_layout Standard
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3521) As mentioned earlier in the thesis, a prototype of the GGS has been developed
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3522) in order to test hypotheses and provide concrete examples.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3523) \end_layout
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3524)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3525) \begin_layout Standard
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3526) This chapter contains the realization of many of the principles and techniques
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3527) described in chapter
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3528) \begin_inset CommandInset ref
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3529) LatexCommand vref
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3530) reference "cha:Theory"
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3531)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3532) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3533)
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3534) .
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3535) Here the problems and their solutions are discussed in greater detail,
cac015a6 (Niklas Landin 2011-05-12 19:36:44 +0200 3536) and at times the text becomes more specific to the GGS.
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3537) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3538)
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3539) \begin_layout Standard
cac015a6 (Niklas Landin 2011-05-12 19:36:44 +0200 3540) Much of what is discussed in this chapter has been implemented in the GGS
cac015a6 (Niklas Landin 2011-05-12 19:36:44 +0200 3541) prototype.
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3542) The different means of communications within the GGS and outside the GGS
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 3543) with third parties are also discussed here.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3544) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3545)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 3546) \begin_layout Standard
c4cdcb09 (Jonatan Pålsson 2011-05-10 11:27:14 +0200 3547) The chapter ends with case studies and code examples of particular features
c4cdcb09 (Jonatan Pålsson 2011-05-10 11:27:14 +0200 3548) of the GGS.
c4cdcb09 (Jonatan Pålsson 2011-05-10 11:27:14 +0200 3549) The case studies and the code serve as concrete examples of the implementations
c4cdcb09 (Jonatan Pålsson 2011-05-10 11:27:14 +0200 3550) outlined in the rest of this chapter.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 3551) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 3552)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 3553) \begin_layout Section
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3554) Overview of the prototype
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3555) \end_layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3556)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3557) \begin_layout Standard
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3558) The prototype of the GGS was developed using the Erlang language.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3559) In Erlang, most things are processes.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3560) The software running the Erlang code is known as the Erlang machine, or
035c79ab (niklas 2011-05-11 18:03:41 +0200 3561) a Erlang node.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3562) Each Erlang node is capable of running several
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3563) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3564) threads
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3565) \emph default
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3566) (also known as
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3567) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3568) Light Weight Processes; LWP
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3569) \emph default
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3570) )
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3571) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3572) ,
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3573) \emph default
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3574) much like the threads in an operating system.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3575) There are however differences between operating system threads and the
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3576) LWPs in Erlang.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3577) Threads in a Linux system, for example, are treated much like operating
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3578) system processes in different systems.
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3579) Due to the size of the data structures related to each process swapping
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3580) one process for another (known as
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3581) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3582) context switching
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3583) \emph default
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3584) ) is an expensive task in many systems
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3585) \begin_inset CommandInset citation
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3586) LatexCommand citep
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3587) after "pg 80"
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3588) key "McKusick:2004:DIF:1014910"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3589)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3590) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3591)
40e067ea (Jonatan Pålsson 2011-05-02 20:31:45 +0200 3592) .
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3593) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3594) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3595)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3596) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3597)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3598)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3599) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3600) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3601) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3602) textbf{LWP}}{Light Weight Process}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3603) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3604)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3605) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3606)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3607)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3608) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3609) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3610) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3611) textbf{Context switch}}{The act of switching from one context, commonly
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3612) a process, to another.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3613) Used by operating systems to achieve multi tasking}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3614) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3615)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3616) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3617)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3618)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3619) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3620)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3621) \begin_layout Standard
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3622) The cost of swapping operating system processes becomes a problem when many
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3623) processes are involved.
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3624) If the GGS prototype had been developed using regular operating system
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3625) processes, it would have had to be designed in a way to minimize the number
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3626) of processes.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3627) Using Erlang, which is capable of running very many processes, several
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 3628) times more than an operating system, the relation between the real world
274fc836 (Jeena Paradies 2011-05-12 20:39:36 +0200 3629) and the GGS (described in
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3630) \begin_inset CommandInset ref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3631) LatexCommand vref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3632) reference "sec:Design-of-the"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3633)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3634) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3635)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3636) ) becomes clearer.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3637) \end_layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3638)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3639) \begin_layout Standard
cac015a6 (Niklas Landin 2011-05-12 19:36:44 +0200 3640) Erlang allows the GGS to create several processes for each player connecting,
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3641) these processes can handle a multitude of different tasks, parsing data
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3642) for example.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3643) Since each task is handled by a different process, the tasks are clearly
676989b8 (unknown 2011-05-06 17:41:21 +0200 3644) separated and the failure of one is easily recovered without affecting
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3645) the others.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3646) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3647)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3648) \begin_layout Standard
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3649) In addition to creating (or
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3650) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3651) spawning
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3652) \emph default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3653) ) processes specifically to handle new players connecting, the GGS has permanent
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3654) processes running at all times.
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3655) The constantly running processes in the GGS prototype are called
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3656) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3657) modules
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3658) \emph default
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3659) .
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3660) An example of a module in the GGS is the
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3661) \emph on
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3662) dispatcher module
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3663) \emph default
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3664) , which handles the initial connection made by a client, passing the connection
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3665) along further in to the system.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3666) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3667)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3668) \begin_layout Standard
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3669) \begin_inset Float figure
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3670) wide false
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3671) sideways false
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3672) status collapsed
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3673)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3674) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3675) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3676) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3677)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3678) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3679)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3680)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3681) \backslash
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3682) begin{centering}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3683) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3684)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3685) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3686)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3687)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3688) \end_layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3689)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3690) \begin_layout Plain Layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3691) \begin_inset Graphics
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3692) filename graphics/Chess_no_text.eps
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3693) width 100text%
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3694)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3695) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3696)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3697)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3698) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3699)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3700) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3701) \begin_inset ERT
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3702) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3703)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3704) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3705)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3706)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3707) \backslash
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3708) end{centering}
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3709) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3710)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3711) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3712)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3713)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3714) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3715)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3716) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3717) \begin_inset Caption
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3718)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3719) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3720) \begin_inset CommandInset label
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3721) LatexCommand label
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3722) name "fig:The-layout-of"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3723)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3724) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3725)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3726) The layout of the GGS.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3727) The circles marked with 'C' topmost in the picture represent clients.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3728) The cloud marked 'network' pictured directly below the clients can be any
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3729) network, for example the Internet.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3730) The barell figure marked 'backup' is a process being fed backup data from
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3731) the coordinator.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3732) The barrel marked 'State' contains the state of a table, and this is fed
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3733) into the box marked 'Mnesia' which is database.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3734) Finally the figure shaped as a shield marked 'GameVM' contains the actual
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3735) game process.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3736) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3737)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3738) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3739)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3740)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3741) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3742)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3743) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3744)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3745)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3746) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3747)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3748) \begin_layout Standard
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3749) In figure
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3750) \begin_inset CommandInset ref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3751) LatexCommand vref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3752) reference "fig:The-layout-of"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3753)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3754) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3755)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3756) the entire GGS system is represented graphically.
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3757) The circles marked with 'C' topmost in the picture represent game clients.
676989b8 (unknown 2011-05-06 17:41:21 +0200 3758) These circles represent processes running on gamers computers, and not
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3759) on the GGS machine.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3760) If a game of chess is to be played on the server, the clients on the machines
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3761) of the gamers will be chess game clients.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3762) Clients connect through a network, pictured as a cloud, to the dispatcher
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3763) process in the GGS.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3764) The dispatcher process and all other modules are discussed in
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3765) \begin_inset CommandInset ref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3766) LatexCommand vref
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3767) reference "sec:The-modular-structure"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3768)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3769) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3770)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3771) .
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3772) For each connection, a new player process is spawned, which immediately
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3773) after spawning is integrated in to the GGS by the coordinator process.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3774) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3775)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 3776) \begin_layout Section
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 3777) The usage of Erlang in the GGS
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3778) \begin_inset CommandInset label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3779) LatexCommand label
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3780) name "sec:The-usage-of-erlang"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3781)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3782) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3783)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3784)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3785) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3786)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3787) \begin_layout Standard
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3788) As mentioned earlier, the GGS prototype is implemented in Erlang.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3789) The current section and the subsequent section function as a short introduction
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3790) to Erlang, focusing on the parts of the language neccessary to understand
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3791) the material regarding Erlang presented in this thesis.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3792) \end_layout
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3793)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3794) \begin_layout Standard
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3795) Erlang was designed by Ericsson, beginning in 1986, for the purpose of creating
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3796) concurrent applications and improving telecom software.
676989b8 (unknown 2011-05-06 17:41:21 +0200 3797) Features essential for the telecom industry to achieve high availability
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3798) in telecom switches were added to the language.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3799) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3800) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3801)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3802) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3803)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3804)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3805) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3806) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3807) \backslash
27f2bdc4 (Niklas Landin 2011-05-12 20:06:49 +0200 3808) textbf{Mutex}}{A construct for achieving mutual exclusion, used to avoid
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3809) simultaneous access to shared resources in computer systems}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3810) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3811)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3812) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3813)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3814)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3815) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3816)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3817) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 3818) Erlang uses message passing in favor of shared memory, mutexes and locks,
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3819) something which at the time was controversial among fellow developers
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3820) \begin_inset CommandInset citation
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3821) LatexCommand citet
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3822) key "Armstrong:2010:ERL:1810891.1810910"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3823)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3824) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3825)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3826) .
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3827) The reason for using message passing, according to Armstrong, was that
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3828) applications should operate correctly before optimizations are done, where
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3829) efficient internal communication within the Erlang machine was considered
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3830) a later optimization.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3831) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3832)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3833) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 3834) In using message passing in favor of the methods commonly used at the time,
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3835) the issues commonly associated with shared memory and locking were avoided.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3836) \end_layout
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3837)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3838) \begin_layout Standard
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3839) In Erlang, everything is a process, and everything operates in its own memory
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3840) space.
5a9339b3 (niklas 2011-05-11 14:17:41 +0200 3841) Memory cannot be shared among processes, which prohibits a process from
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3842) corrupting the memory of a different process.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3843) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3844)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3845) \begin_layout Standard
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3846) Messages are sent between the processes in an asynchronous manner, and each
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3847) process has a mailbox from which these messages can be retrieved.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3848) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3849)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3850) \begin_layout Standard
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3851) Processes in Erlang are also called
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3852) \emph on
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3853) Light Weight Processes
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3854) \emph default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3855) because they are inexpensive to create.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3856) Processes exist within an Erlang machine, or Erlang node.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3857) The Erlang machine has its own scheduler and does not rely on the scheduler
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3858) of the operating system, this is a main reason of Erlang's capability of
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3859) running many concurrent processes
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3860) \begin_inset CommandInset citation
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3861) LatexCommand citet
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3862) key "Armstrong03"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3863)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3864) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3865)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3866) .
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3867) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3868)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3869) \begin_layout Standard
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3870) The strong isolation of Erlang processes makes them ideal for multi-core
676989b8 (unknown 2011-05-06 17:41:21 +0200 3871) and distributed systems.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3872) Distribution of software is included as a fundamental part in the Erlang
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3873) language.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3874) The 'physical' location of a process, e.g.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3875) which computer the process runs on, is not important when communicating
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3876) with the process.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3877) Processes can communicate regardless of whether they run on the same system
27f2bdc4 (Niklas Landin 2011-05-12 20:06:49 +0200 3878) or not, transparently.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3879) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3880)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3881) \begin_layout Standard
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3882) The distributed nature of Erlang is something the GGS can make use of when
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3883) scaling across several computers in order to achieve higher performance.
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3884) The distribution is also important in creating redundancy.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3885) The GGS prototype does not make use of the distributed nature of Erlang,
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3886) however the GGS prototype is constructed in such a way that making use
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3887) of the distributed nature should not pose a big problem.
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3888) \end_layout
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3889)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3890) \begin_layout Standard
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3891) Erlang promotes a non-defensive programming style in which processes are
676989b8 (unknown 2011-05-06 17:41:21 +0200 3892) allowed to crash and be restarted in favor of having the processes recover
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3893) from errors.
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3894) The distributed nature of Erlang means supervisor processes (discussed
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3895) in section
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3896) \begin_inset CommandInset ref
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3897) LatexCommand ref
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3898) reference "sub:Supervisor-structure"
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3899)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3900) \end_inset
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3901)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3902) ) can reside on remote systems, thereby increasing the reliability of the
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 3903) system as a whole.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3904) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3905)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3906) \begin_layout Standard
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3907) A very important feature of Erlang, used in the GGS, is the ability to interface
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3908) with external hardware and software.
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3909) Erlang allows communication with external resources through
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3910) \emph on
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3911) ports
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3912) \emph default
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3913) and
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3914) \emph on
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3915) NIF
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3916) \emph default
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3917) s (Native implemented functions)
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3918) \emph on
e9f4d943 (Jeena Paradies 2011-05-06 13:34:01 +0200 3919) .
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3920)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3921) \emph default
27f2bdc4 (Niklas Landin 2011-05-12 20:06:49 +0200 3922) Through ports communication can take place in a similar way communication
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3923) is performed over sockets.
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3924) NIFs are called like any other functions without any difference to the
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3925) caller but are implemented in C, this implementation makes NIFs a very
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3926) efficient way to interface with the outside world
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3927) \begin_inset CommandInset citation
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3928) LatexCommand citet
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3929) key "NIF:website"
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3930)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3931) \end_inset
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3932)
4277e6d2 (Jonatan Pålsson 2011-05-12 20:13:14 +0200 3933) .
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3934) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3935)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3936) \begin_layout Standard
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3937) The GGS uses Erlang ports for generating UUIDs
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3938) \begin_inset Foot
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3939) status collapsed
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3940)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3941) \begin_layout Plain Layout
a86e0fca (Niklas Landin 2011-05-09 12:26:55 +0200 3942) UUIDs are discussed in section
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3943) \begin_inset CommandInset ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3944) LatexCommand ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3945) reference "sub:UUID"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3946)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3947) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3948)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3949)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3950) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3951)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3952) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3953)
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 3954) and NIFs for interfacing with the GDL VMs
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3955) \begin_inset Foot
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3956) status collapsed
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3957)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3958) \begin_layout Plain Layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3959) Virtual machines of games are discussed in section
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3960) \begin_inset CommandInset ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3961) LatexCommand ref
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3962) reference "sec:Game-Development-Language"
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3963)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3964) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3965)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3966)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3967) \end_layout
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3968)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3969) \end_inset
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3970)
36b7f15f (Jonatan Pålsson 2011-05-01 15:25:17 +0200 3971) .
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3972) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3973) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3974)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3975) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3976)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3977)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3978) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3979) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3980) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3981) textbf{OTP}}{Open Telecom Platform, a software suite for Erlang}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3982) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3983)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3984) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3985)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3986)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3987) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3988) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3989) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 3990) textbf{Behaviour}}{A design pattern in OTP}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3991) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3992)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3993) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3994)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 3995)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3996) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3997)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 3998) \begin_layout Standard
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 3999) Development of the GGS would have been hard if not impossible had it not
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4000) been for the
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4001) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4002) OTP
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4003) \emph default
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4004) supplied with the standard Erlang distribution.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4005) The OTP (Open Telecom Platform) is a set of standard libraries and design
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4006) patterns, called
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4007) \emph on
676989b8 (unknown 2011-05-06 17:41:21 +0200 4008) behaviors
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4009) \emph default
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4010) , which are used when developing Erlang systems.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4011) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4012)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4013) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 4014) The GGS makes heavy use of the behaviors supplied in the OTP.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4015) The behaviors impose a programming style suitable for distributed and concurren
27f2bdc4 (Niklas Landin 2011-05-12 20:06:49 +0200 4016) t applications.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4017) In particular, the GGS uses the following behaviors:
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4018) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4019)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4020) \begin_layout Itemize
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4021) The
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4022) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4023) supervisor
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4024) \emph default
676989b8 (unknown 2011-05-06 17:41:21 +0200 4025) behavior, which is used when creating a supervisor.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4026) Supervisors are used when monitoring processes in the Erlang system.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4027) When a process exits wrongfully, the supervisor monitoring the process
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4028) in question decides which action to take.
27f2bdc4 (Niklas Landin 2011-05-12 20:06:49 +0200 4029) In the GGS, the most common action is to restart the faulting process.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4030) A more thorough discussion on supervisors can be found in section
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4031) \begin_inset CommandInset ref
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4032) LatexCommand ref
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4033) reference "sub:Supervisor-structure"
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4034)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4035) \end_inset
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4036)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4037) .
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4038) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4039)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4040) \begin_layout Itemize
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4041) The
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4042) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4043) gen_tcp
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4044) \emph default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 4045) behavior, which is used to interact with TCP sockets for network communication.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4046) Using the gen_tcp behavior, network messages are converted to internal
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4047) Erlang messages and passed to a protocol parser, where the messages are
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4048) processed further.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4049) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4050)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4051) \begin_layout Itemize
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4052) The
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4053) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4054) gen_server
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4055) \emph default
676989b8 (unknown 2011-05-06 17:41:21 +0200 4056) behavior, which is used when constructing OTP servers in Erlang.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4057) Using this behavior, a state can easily be kept in a server process, greatly
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4058) increasing the usefulness of the server process.
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 4059) This behaviour is the most widely used one in the GGS prototype.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4060) In addition to introducing a state to the server, the gen_server behavior
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4061) also imposes patterns for synchronous and asynchronous communication between
676989b8 (unknown 2011-05-06 17:41:21 +0200 4062) other gen_servers and other OTP behaviors.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4063) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4064)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4065) \begin_layout Itemize
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4066) The
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4067) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4068) gen_fsm
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4069) \emph default
676989b8 (unknown 2011-05-06 17:41:21 +0200 4070) behavior is used in the protocol parser module in the GGS.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4071) Using the gen_fsm behavior, finite state machines are easily developed.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4072) Protocol parsers are an ideal example of where to use finite state machines,
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4073) which are widely used for parsing strings of text.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4074) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4075)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4076) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 4077) In addition to supplying behaviors, the OTP also has a style for packaging
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4078) and running Erlang applications.
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4079) By packaging the GGS as an
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4080) \emph on
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4081) application
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4082) \emph default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 4083) the GGS can be started in a way uniform to most Erlang software, providing
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4084) familiarity for other Erlang users, and eases the incorporation of the
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4085) GGS in other applications.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4086) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4087) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4088)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4089) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4090)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4091)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4092) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 4093) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 4094) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 4095) textbf{Application}}{A way of packaging Erlang software in a uniform way}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4096) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4097)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4098) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4099)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4100)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4101) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4102)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4103) \begin_layout Subsection
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4104) Short introduction to the Erlang syntax
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4105) \end_layout
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4106)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 4107) \begin_layout Standard
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4108) In order to understand examples in this thesis, a small subset of Erlang
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4109) must be understood.
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4110) In this section, the very syntactic basics of Erlang are given.
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4111) \end_layout
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4112)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4113) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4114)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4115) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4116) Variables
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4117) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4118) start with an uppercase letter, examples include
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4119) \begin_inset ERT
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4120) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4121)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4122) \begin_layout Plain Layout
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4123)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4124) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4125) \backslash
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4126) tt X, Var}, and {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4127) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4128) tt Global}
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4129) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4130)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4131) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4132)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4133) .
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4134) A variable can only be assigned once.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4135) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4136)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4137) \begin_layout Itemize
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4138)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4139) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4140) Atoms
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4141) \emph on
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4142)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4143) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4144) \emph default
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4145) start with lower case letters, for example:
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4146) \begin_inset ERT
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4147) status open
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4148)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4149) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4150)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4151) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4152) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4153) tt atom, a}
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4154) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4155)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4156) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4157)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4158) .
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4159) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4160)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4161) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4162)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4163) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4164) Functions
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4165) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4166) are defined starting with an atom for the name, parenthesis containing
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4167) parameters, an arrow, a function body and finally a dot marking the end
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4168) of a function.
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4169)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4170) \begin_inset ERT
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4171) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4172)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4173) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4174)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4175) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4176) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4177) tt square(X) -> X*X.}
fd08e753 (Kallfaktorn 2011-05-02 15:23:44 +0200 4178) \end_layout
fd08e753 (Kallfaktorn 2011-05-02 15:23:44 +0200 4179)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4180) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4181)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4182) is an example of a function producing the square of X.
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4183) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4184)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4185) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4186) Functions are
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4187) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4188) called
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4189) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4190) by suffixing an atom with the function name with parenthesis, for example
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4191)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4192) \begin_inset ERT
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4193) status open
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4194)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4195) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4196)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4197) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4198) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4199) tt square(10)}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4200) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4201)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4202) \end_inset
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4203)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4204) .
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4205) Qualified names can be specified using ':', for example:
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4206) \begin_inset ERT
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4207) status open
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4208)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4209) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4210)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4211) {
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4212) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4213) tt math:square(10)}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4214) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4215)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4216) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4217)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4218) .
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4219) \end_layout
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4220)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4221) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4222)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4223) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4224) Tuples
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4225) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4226) are containers of fixed type for Erlang data types.
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4227) They are constructed using curly brackets, for example:
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4228) \begin_inset ERT
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4229) status open
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4230)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4231) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4232)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4233) {
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4234) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4235) tt
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4236) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4237) {atom1, atom2, atom3
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4238) \backslash
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4239) }}.
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4240) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4241)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4242) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4243)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4244)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4245) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4246)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4247) \begin_layout Itemize
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4248)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4249) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4250) Lists
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4251) \series default
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4252) are constructed using [ and ], for example:
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4253) \begin_inset ERT
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4254) status open
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4255)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4256) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4257)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4258) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4259) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4260) tt [1,2,3]}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4261) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4262)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4263) \end_inset
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4264)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4265) .
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4266) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4267)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4268) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4269)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4270) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4271) Strings
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4272) \series default
97f48f6a (Jeena Paradies 2011-05-12 22:56:38 +0200 4273) are double-quoted lists of characters, for example
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4274) \begin_inset ERT
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4275) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4276)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4277) \begin_layout Plain Layout
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4278)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4279) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4280) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4281) tt "Hello world"}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4282) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4283)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4284) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4285)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4286) .
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4287) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4288)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4289) \begin_layout Itemize
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4290)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4291) \series bold
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4292) Records
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4293) \series default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 4294) are Erlang tuples coupled with a tag for each tuple element.
676989b8 (unknown 2011-05-06 17:41:21 +0200 4295) This allows referring to elements by name instead of by position.
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4296) An example of a record looks like this:
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4297) \begin_inset ERT
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4298) status open
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4299)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4300) \begin_layout Plain Layout
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4301)
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4302) {
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4303) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4304) tt
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4305) \backslash
215adf63 (Jonatan Pålsson 2011-05-04 13:20:17 +0200 4306) #myRecord{}}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4307) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4308)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4309) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4310)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4311) .
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4312) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4313)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4314) \begin_layout Section
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4315) The modular structure of the GGS prototype
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4316) \begin_inset CommandInset label
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4317) LatexCommand label
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4318) name "sec:The-modular-structure"
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4319)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4320) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4321)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4322)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4323) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4324)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4325) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4326) The separation of concerns and the principle of single responsibility
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4327) \begin_inset Foot
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4328) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4329)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4330) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4331) More information on the SRP is available at:
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4332) \begin_inset CommandInset href
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4333) LatexCommand href
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4334) target "http://www.objectmentor.com/resources/articles/srp.pdf"
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4335)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4336) \end_inset
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4337)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4338)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4339) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4340)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4341) \end_inset
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4342)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4343) are widely respected as good practices in the world of software engineering
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4344) and development.
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4345) By dividing the GGS into modules each part of the GGS can be modified without
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4346) damaging or requiring changes in the rest of the system.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4347) Due to the hot code update feature in Erlang, it is theoretically possible
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4348) to update parts of the GGS while the system is running, this has however
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4349) not been implemented in the prototype.
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4350) The modular composition of the GGS prototype should make a transition to
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4351) a fully hot code swappable system relatively easy.
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4352) Hot code replacements are discussed in more detail in section
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4353) \begin_inset CommandInset ref
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4354) LatexCommand ref
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4355) reference "sub:Hot-code-replacement"
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4356)
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4357) \end_inset
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4358)
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4359) .
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4360) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4361)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4362) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4363) The responsibility and concern of each module comes from the responsibility
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4364) and concern of the real-world entity the model represents.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4365) The modeling of the GGS after a real world system was discussed in chapter
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4366)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4367) \begin_inset CommandInset ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4368) LatexCommand vref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4369) reference "cha:Theory"
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4370)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4371) \end_inset
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4372)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4373) .
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4374) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4375)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4376) \begin_layout Standard
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 4377) In the text below the different modules of the GGS are presented.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4378) In the text the word 'module' refers to the actual code of the discussed
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4379) feature, while the word 'process' is used when referring to a running instance
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4380) of the code.
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4381) \begin_inset ERT
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4382) status open
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4383)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4384) \begin_layout Plain Layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4385)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4386)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4387) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4388) nomenclature{
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4389) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4390) textbf{SRP}}{Single Responsibility Principle}
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4391) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4392)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4393) \begin_layout Plain Layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4394)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4395)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4396) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4397) nomenclature{
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4398) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4399) textbf{Object Oriented Programming}}{A programming paradigm focusing on
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4400) objects}
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4401) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4402)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4403) \end_inset
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4404)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4405)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4406) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4407)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4408) \begin_layout Subsection
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4409) The dispatcher module
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4410) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4411)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4412) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4413) The dispatcher module is the first module to have contact with a player.
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 4414) When a player connects to the GGS, the player is first greeted by the dispatche
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 4415) r module, which sets up an accepting socket for each player.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4416) The dispatcher is the module which handles the interfacing to the operating
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4417) system when obtaining new sockets.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4418) Operating system limits concerning the number of open files, or number
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4419) of open sockets are handled here.
9a1961e1 (Niklas Landin 2011-05-12 20:48:22 +0200 4420) The operating system limits can impose problems in the GGS, this is discussed
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4421) more in detail in chapter
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4422) \begin_inset CommandInset ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4423) LatexCommand vref
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 4424) reference "sec:Operating-system-limitations"
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4425)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4426) \end_inset
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4427)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4428) .
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4429) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4430)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4431) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4432) Should the dispatcher module fail to function, no new connections to the
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4433) GGS can be made.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4434) In the event of a crash in the dispatcher module, a supervisor process
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4435) immediately restarts the dispatcher.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4436) There exists a window of time between the crashing of the dispatcher and
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4437) the restarting of the dispatcher, this window is very short, and only during
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4438) this window is the GGS unable to process new connection requests.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4439) Due to the modular structure of the GGS, the rest of the system is not
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4440) harmed by the dispatcher process not functioning.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4441) The dispatcher process does not contain any kind of a state, therefore
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4442) a simple restart of the process is sufficient in restoring the GGS to a
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4443) pristine state after a dispatcher crash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4444) \begin_inset Note Note
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4445) status open
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4446)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4447) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4448) Well..
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4449) In theory..
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4450) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4451)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4452) \end_inset
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4453)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4454) .
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4455) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4456)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4457) \begin_layout Standard
9a1961e1 (Niklas Landin 2011-05-12 20:48:22 +0200 4458) Returning to the scenario of the chess club, the dispatcher module is the
9a1961e1 (Niklas Landin 2011-05-12 20:48:22 +0200 4459) doorman of the club.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4460) When a player enters the chess club, the player is greeted by the doorman,
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4461) letting the player in to the club.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4462) The actual letting in to the club is in the GGS represented by the creation
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 4463) of a player process discussed in section
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4464) \begin_inset CommandInset ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4465) LatexCommand vref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4466) reference "sub:The-player-module"
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4467)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4468) \end_inset
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4469)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4470) .
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4471) The newly created player process is handed the control over its own socket
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4472) connection.
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4473) \end_layout
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4474)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4475) \begin_layout Subsection
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4476) The player module
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4477) \begin_inset CommandInset label
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4478) LatexCommand label
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4479) name "sub:The-player-module"
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4480)
ea3fee1a (Jonatan Pålsson 2011-05-05 11:28:37 +0200 4481) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4482)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 4483)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 4484) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 4485)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4486) \begin_layout Standard
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4487) The player module is responsible for representing a player in the system.
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4488) Each connected player has its own player process.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4489) The player process has access to the connection of the client it represents,
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4490) and can communicate with this client.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4491) In order to communicate with a client, the data to and from the player
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4492) object must pass through a protocol parser module, discussed in
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4493) \begin_inset CommandInset ref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4494) LatexCommand vref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4495) reference "sub:The-protocol-parser"
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4496)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4497) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4498)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4499) .
676989b8 (unknown 2011-05-06 17:41:21 +0200 4500) Raw communication, without passing the data through a protocol parser is
8d63aac4 (Jonatan Pålsson 2011-05-12 21:16:25 +0200 4501) in theory possible, however it is not useful.
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4502) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4503)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4504) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4505) During the creation of a player process, the coordinator process, discussed
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4506) in
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4507) \begin_inset CommandInset ref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4508) LatexCommand vref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4509) reference "sub:The-coordinator-module"
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4510)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4511) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4512)
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4513) , is notified by the newly created process in order to get access to the
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4514) lobby.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4515) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4516)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4517) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4518) In the event of a crash in a player process, several things happen.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4519)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4520) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4521)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4522) \begin_layout Enumerate
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4523) The player process, which is the only process with a reference to the socket
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4524) leading to the remote client software, passes this reference of the socket
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4525) to the coordinator process temporarily.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4526) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4527)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4528) \begin_layout Enumerate
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4529) The player process exits.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4530) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4531)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4532) \begin_layout Enumerate
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4533) The coordinator spawns a new player process with the same socket reference
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4534) as the old player process had.
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4535) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4536)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4537) \begin_layout Enumerate
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4538) The player process resumes operation, immediately starting a new protocol
676989b8 (unknown 2011-05-06 17:41:21 +0200 4539) parser process, and begins to receive and send network messages again.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4540) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4541)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4542) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4543) The window of time between the crash of the player process and the starting
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4544) of a new player process is, as with the dispatcher, very short.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4545) Since the connection changes owners for a short period of time, but is
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4546) never dropped, the implications of a crash are only noticed, at worst,
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4547) as choppy gameplay for the client.
6b51f285 (Jonatan Pålsson 2011-05-12 21:09:06 +0200 4548) Note however that this crash recovery scheme is only partly implemented
6b51f285 (Jonatan Pålsson 2011-05-12 21:09:06 +0200 4549) in the GGS prototype.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4550) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4551)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4552) \begin_layout Standard
9a1961e1 (Niklas Landin 2011-05-12 20:48:22 +0200 4553) Moving back to the real world example, the player process represents an
9a1961e1 (Niklas Landin 2011-05-12 20:48:22 +0200 4554) actual person in the chess club.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4555) When a person sits down at a table in the chess club, the person does so
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4556) by requesting a seat from some coordinating person, and is then seated
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4557) by the same coordinator.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4558) Once seated, the player may make moves on the table he or she is seated
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4559) by, this corresponds clearly to how the GGS is structured, as can be seen
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4560) in the following sections.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4561) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4562)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4563) \begin_layout Subsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4564) The protocol parser module
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4565) \begin_inset CommandInset label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4566) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4567) name "sub:The-protocol-parser"
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4568)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4569) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4570)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4571)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4572) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4573)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4574) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 4575) The protocol parser is an easily interchangeable module in the GGS, handling
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4576) the client-to-server, and server-to-client protocol parsing.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4577) In the GGS prototype, there is only one protocol supported, namely the
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4578)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4579) \emph on
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4580) GGS Protocol
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4581) \emph default
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4582) .
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4583) The role of the protocol parser is to translate the meaning of packets
676989b8 (unknown 2011-05-06 17:41:21 +0200 4584) sent using the protocol in use to internal messages of the GGS system.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4585) The GGS protocol, discussed below is used as a sample protocol in order
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4586) to explain how protocol parsers can be built for the GGS.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4587) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4588)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4589) \begin_layout Subsubsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4590) The structure of the GGS Protocol
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4591) \begin_inset CommandInset label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4592) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4593) name "sub:The-structure-of"
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4594)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4595) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4596)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4597)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4598) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4599)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4600) \begin_layout Standard
676989b8 (unknown 2011-05-06 17:41:21 +0200 4601) The GGS protocol is modeled after the HTTP protocol.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4602) The main reason for this is the familiarity many developers already have
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4603) with HTTP due to its presence in internet software.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4604) Each GGS protocol packet contains a headers section.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4605) The headers section is followed by a data section.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4606) In the headers section, parameters concerning the packet is placed.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4607) In the data section, the actual data payload of the packet is placed.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4608) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4609)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4610) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4611) There is no requirement of any specific order of the parameters in the headers
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4612) section, however the data section must always follow directly after the
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4613) headers section separated by a empty new line.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4614) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4615)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4616) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4617) In the example below, line 1 contains a Game-Command parameter.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4618) This parameter is used to determine which game-specific command the client
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4619) is trying to perform.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4620) The handling of this parameter is specific to each game, and can be anything.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4621) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4622)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4623) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4624) Line 2 specifies the content type of the payload of this particular packet.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4625) This parameter allows the GGS to invoke special parsers, should the data
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4626) be encoded or encrypted.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4627) When encryption is employed, only the payload is encrypted, not the header
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4628) section.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4629) This is a scheme which does not allow for strong encryption, but is deemed
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4630) feasible for gaming purposes.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4631) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4632)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4633) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4634) Line 3 specifies the content length of the payload following immediately
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4635) after the headers section.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4636) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4637)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4638) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4639) The parser of the GGS protocol implemented in the GGS prototype is designed
676989b8 (unknown 2011-05-06 17:41:21 +0200 4640) as a finite state machine using the gen_fsm behavior.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4641) When a full message has been parsed by the parser, the message is converted
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4642) into the internal structure of the GGS messages, and sent in to the system
676989b8 (unknown 2011-05-06 17:41:21 +0200 4643) from the protocol parser using message passing.
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4644) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4645)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4646) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4647) Line 4 is a empty line which is, like in the HTTP protocol, the separator
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4648) between the head and body or payload section.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4649) \end_layout
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4650)
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4651) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4652) Line 5 is the actuall payload which is transported to the game as a parameter
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4653) of the playerCommand() function call.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4654) \end_layout
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4655)
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4656) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4657) \begin_inset Note Note
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4658) status open
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4659)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4660) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4661) Packet below is not an algorithm, but I don't know how to change that label..
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4662) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4663)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4664) \end_inset
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4665)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4666)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4667) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4668)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4669) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4670) \begin_inset Float algorithm
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4671) wide false
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4672) sideways false
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4673) status open
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4674)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4675) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4676) \begin_inset ERT
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4677) status open
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4678)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4679) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4680)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4681)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4682) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4683) lstset{
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4684) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4685)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4686) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4687)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4688) backgroundcolor=
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4689) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4690) color{white},
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4691) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4692)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4693) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4694)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4695) extendedchars=true,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4696) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4697)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4698) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4699)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4700) basicstyle=
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4701) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4702) footnotesize
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4703) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4704) ttfamily,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4705) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4706)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4707) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4708)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4709) showstringspaces=false,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4710) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4711)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4712) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4713)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4714) showspaces=false,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4715) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4716)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4717) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4718)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4719) numbers=left,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4720) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4721)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4722) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4723)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4724) numberstyle=
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4725) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4726) footnotesize,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4727) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4728)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4729) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4730)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4731) numbersep=9pt,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4732) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4733)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4734) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4735)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4736) tabsize=2,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4737) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4738)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4739) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4740)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4741) breaklines=true,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4742) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4743)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4744) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4745)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4746) showtabs=false,
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4747) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4748)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4749) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4750)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4751) captionpos=b
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4752) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4753)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4754) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4755)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4756) }
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4757) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4758)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4759) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4760)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4761)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4762) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4763) begin{lstlisting}
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4764) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4765)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4766) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4767)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4768) Game-Command: chat
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4769) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4770)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4771) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4772)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4773) Content-Type: text
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4774) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4775)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4776) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4777)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4778) Content-Length: 18
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4779) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4780)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4781) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4782)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4783) \end_layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4784)
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4785) \begin_layout Plain Layout
cff54908 (Jeena Paradies 2011-05-04 12:14:20 +0200 4786)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4787) Hello world, guys!
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4788) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4789)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4790) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4791)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4792)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4793) \backslash
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4794) end{lstlisting}
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4795) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4796)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4797) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4798)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4799)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4800) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4801)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4802) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4803) \begin_inset Caption
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4804)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4805) \begin_layout Plain Layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4806) \begin_inset CommandInset label
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4807) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4808) name "alg:A-sample-packet"
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4809)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4810) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4811)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4812) A sample packet sent from a client to the GGS during a chat session
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4813) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4814)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4815) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4816)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4817)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4818) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4819)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4820) \end_inset
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4821)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4822)
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4823) \end_layout
6b293bc9 (Jonatan Pålsson 2011-05-04 10:42:46 +0200 4824)
fd08e753 (Kallfaktorn 2011-05-02 15:23:44 +0200 4825) \begin_layout Standard
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4826) \begin_inset Note Note
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4827) status open
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4828)
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4829) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4830) Mention that the protocol is heavily influenced bye HTTP, is parsed using
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4831) a FSM, perhaps give a sample packet.
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4832) \end_layout
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4833)
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4834) \end_inset
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4835)
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4836)
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4837) \end_layout
c2b3afce (Jonatan Pålsson 2011-05-02 20:48:14 +0200 4838)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4839) \begin_layout Subsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4840) The coordinator module
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4841) \begin_inset CommandInset label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4842) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4843) name "sub:The-coordinator-module"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4844)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4845) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4846)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4847)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4848) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4849)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4850) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4851) The coordinator module is responsible for keeping track of all players,
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4852) their seats and tables.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4853) Players register with the coordinator process when first connecting to
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4854) the server.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4855) The coordinator places each player by their respective table.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4856) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4857)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4858) \begin_layout Standard
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4859) The coordinator keeps relations between each player and table, therefore
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4860) it is used to perform lookups on tables and players to find out which ones
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4861) that are connected.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4862) The connectivity of players and tables is important when sending messages
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4863) to all participants in a game.
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4864) A lookup in the coordinator process is performed before notifying all players
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4865) in a game to ensure the message reaches all players.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4866) The lookup can be performed either using internal identification codes
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4867) or using the UUID associated with each client and table.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4868) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4869)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4870) \begin_layout Standard
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4871) The coordinator process contains an important state, therefore a backup
711466ea (Niklas Landin 2011-05-12 21:36:29 +0200 4872) process is kept at all times.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4873) All good data processed by the coordinator is stored for safekeeping in
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4874) the backup process as well.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4875) Data which is potentially harmful is not stored in the backup process.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4876) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 4877)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4878) \begin_layout Standard
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4879) In the event of a crash, the coordinator process recovers the prior good
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4880) state from the backup process and continues where it left off.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4881) A supervisor process monitors the coordinator process and restarts the
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4882) process when it malfunctions.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4883) There is a window of time between the crash of the coordinator and the
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4884) restart of a new coordinator process.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4885) During this time, players cannot be seated by new tables and cannot disconnect
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4886) from the server.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4887) This window of time is very small, and the unavailability of the coordinator
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4888) process should not be noticed by more than a short time lag for the clients.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4889) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4890)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4891) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4892) Moving back to the example of the chess club, the coordinator process can
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4893) be seen as a host in the chess club, seating players by their tables and
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4894) offering services to the players.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4895) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4896)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4897) \begin_layout Subsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4898) The table module
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4899) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4900)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4901) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4902) The table module is mostly a hub used for communication.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4903) New table processes are created by the coordinator on demand.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4904) The table module does not contain any business logic, however each process
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4905) contains information concerning which players are seated by that particular
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4906) table.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4907) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4908)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4909) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4910) The information about which players are seated by each table is used when
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4911) notifying all players by a table of an action.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4912) Consider a game of chess, each player notifies the table of its actions,
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4913) the table then notifies the rest of the participants of these actions after
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 4914) having had the actions processed by the game VM, where an action could
e0a90a76 (Jonatan Pålsson 2011-05-12 23:23:25 +0200 4915) be moving a playing piece in the game.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4916) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4917)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4918) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4919) Each table is associated with a game VM.
285bf755 (Jeena Paradies 2011-05-13 00:01:22 +0200 4920) The actions sent to a table are processed by the game VM, this is where
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4921) the game logic is implemented.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4922) \end_layout
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4923)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4924) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4925) After a crash in a table process, the entire table must be rebuilt and the
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4926) players must be re-associated with the table.
ed0c12ae (Niklas Landin 2011-05-12 21:45:05 +0200 4927) Data concerning players is kept in the coordinator process and is restored
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4928) from there.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4929) Data kept in the actual game is not automatically corrupted by the crash
ed0c12ae (Niklas Landin 2011-05-12 21:45:05 +0200 4930) in a table, however the table must be re-associated with the game VM it
ed0c12ae (Niklas Landin 2011-05-12 21:45:05 +0200 4931) was associated with before the crash of the table.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4932) The table process maps well into the setting of the real-world chess club
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4933) scenario previously discussed.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4934) A table works in the same way in a real world setting as in the GGS setting.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4935) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4936)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4937) \begin_layout Subsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4938) The game virtual machine module
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4939) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4940)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4941) \begin_layout Standard
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4942) This module is responsible for the VM associated with each game.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4943)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4944) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4945)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4946) \begin_layout Standard
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4947) The game VM contains a connection to the GDL VM and a table token associated
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4948) with a running game.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4949) The game VM is started by the table module during its initialisation.
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 4950) The table module hands over a token used for identification to the game
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4951) VM during the initialization.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4952) During the initialization a new GDL VM instance and various objects associated
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4953) to the GDL VM instance are created.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4954) Callbacks to Erlang are registered into the GDL VM and the source code
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4955) of a game is loaded into the GDL VM, finally the game is ready for startup.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4956) The only means for a game to communicate with the GGS is through usage
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4957) of a provided interface.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4958)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4959) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4960)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4961) \begin_layout Standard
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4962) The GDL VM itself makes it possible for the game developer to program in
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4963) the programming language covered by the GDL VM.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4964) In future releases, more GDL VMs will be added to support more programming
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4965) languages.
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 4966) Since the game VM keeps track of the correct table, the game developer
676989b8 (unknown 2011-05-06 17:41:21 +0200 4967) does not need to take this into consideration when programming a game.
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 4968) If a method within the game sends data to a player, the data is delivered
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 4969) to the player in the correct game.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4970) The same game token is used to store the game state in the database.
29036514 (Jonatan Pålsson 2011-05-12 21:32:57 +0200 4971) Therefore, no game states can be mixed up.
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4972) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4973)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4974) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4975) This module does not affect game runtime but evaluates a new game state
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4976) and handles communication between the game and the players.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4977) A closer look at the structure of this model is given in
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4978) \begin_inset CommandInset ref
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4979) LatexCommand vref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4980) reference "sec:Communication-with-the-GDL-VM"
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4981)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4982) \end_inset
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4983)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 4984) .
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4985) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 4986)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 4987) \begin_layout Standard
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4988) The code which is run in the GDL VM is uploaded to the GGS prior to each
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 4989) game.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 4990) Allowing the clients to upload code allows clients to run any game.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 4991) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 4992)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4993) \begin_layout Subsection
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4994) The database module
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4995) \begin_inset CommandInset label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4996) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 4997) name "sub:The-database-module"
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4998)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 4999) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5000)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5001)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5002) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5003)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5004) \begin_layout Standard
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5005) Game data from all games on the GGS is stored in the database backend of
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5006) the database module.
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5007) \end_layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5008)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5009) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5010) In the GGS prototype the database module is using a database management
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5011) system called Mnesia .
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5012) Mnesia ships with the standard Erlang distribution and is a key-value store
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5013) type of database.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5014) Mnesia is designed to handle the stress of telecoms systems
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5015) \begin_inset CommandInset citation
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5016) LatexCommand citet
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5017) key "667766"
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5018)
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5019) \end_inset
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5020)
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5021) , therefore it has some features specifically tailored for telecoms which
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5022) are not commonly found in other databases.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5023) Key features of the Mnesia database are:
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 5024) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 5025)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5026) \begin_layout Itemize
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5027) Fast key/value lookups
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 5028) \end_layout
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 5029)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5030) \begin_layout Itemize
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5031) Distribution of the database system
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5032) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5033)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5034) \begin_layout Itemize
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5035) Fault tolerance
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5036) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5037)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5038) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5039) The features of Mnesia originally intended for telecoms prove very useful
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5040) for the GGS as well.
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5041) The fault tolerance and speed of Mnesia are valuable tools, the fast key/value
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5042) lookups permit many lookups per second from the database.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5043) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5044)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5045) \begin_layout Standard
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5046) Game data will not be lost when a game is stopped or has gone down for any
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5047) reason.
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5048) This makes it possible to continue a game from the point just before the
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5049) failure without having to restart the complete game.
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5050)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5051) \begin_inset ERT
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5052) status open
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5053)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5054) \begin_layout Plain Layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5055)
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5056)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5057) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5058) nomenclature{
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5059) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5060) textbf{Mnesia}}{Database server used in the GGS}
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5061) \end_layout
7a03e379 (Jonatan Pålsson 2011-04-04 14:39:38 +0200 5062)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5063) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5064)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5065)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5066) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5067)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5068) \begin_layout Standard
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5069) The GGS stores the game state in the distributed database Mnesia, from which
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5070) the state can be restored in the event of a crash.
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5071) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5072)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5073) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5074) Each game is uniquely identified by a table token and the data of each game
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5075) is stored within two different namespaces.
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5076) The namespaces are named
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5077) \noun on
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5078) world
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5079) \noun default
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5080) and
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5081) \noun on
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5082) localStorage
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5083) \noun default
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5084) .
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5085) The
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5086) \noun on
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5087) World
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5088) \noun default
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5089) is used contain all game data related to the game state.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5090) This sort of game data may change during the runtime of the game.
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5091) The
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5092) \noun on
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5093) localStorage
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5094) \noun default
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5095) contains data independent of the game state.
676989b8 (unknown 2011-05-06 17:41:21 +0200 5096) Game resources, constants and global variables are all examples of data
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5097) that reside within the
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5098) \noun on
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5099) localStorage
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5100) \noun default
b434af48 (Jonatan Pålsson 2011-05-12 21:38:34 +0200 5101) .
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5102) To store a value within the database, not only is the table token and the
e0a90a76 (Jonatan Pålsson 2011-05-12 23:23:25 +0200 5103) name of the namespace required, but a unique key so that the value can
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5104) be successfully retrieved or modified later.
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5105) The key is decidable by the game developer.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5106)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5107) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5108)
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5109) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5110) The interface of the database module is an implementation of the upcoming
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5111) W3C Web Storage specification.
676989b8 (unknown 2011-05-06 17:41:21 +0200 5112) Web Storage is intended for use in web browsers, providing a persistent
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5113) storage on the local machine for web applications.
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5114) The storage can be used to communicate among browser windows (which is
fdcc7e2f (Niklas Landin 2011-05-12 22:07:47 +0200 5115) difficult when using cookies), and to store larger chunks of data
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5116) \begin_inset CommandInset citation
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5117) LatexCommand citet
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5118) key "webstorage:website"
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5119)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5120) \end_inset
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5121)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5122) .
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5123) Usage of the web storage standard in the GGS provides a well documented
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5124) interface to the database backend.
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5125) \end_layout
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 5126)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5127) \begin_layout Section
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5128) Communication with the GDL VM
2b5be510 (Jonatan Pålsson 2011-04-28 13:20:49 +0200 5129) \begin_inset CommandInset label
2b5be510 (Jonatan Pålsson 2011-04-28 13:20:49 +0200 5130) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5131) name "sec:Communication-with-the-GDL-VM"
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5132)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5133) \end_inset
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5134)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5135)
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5136) \end_layout
0b8d46cc (Jonatan Pålsson 2011-04-07 14:57:47 +0200 5137)
2b5be510 (Jonatan Pålsson 2011-04-28 13:20:49 +0200 5138) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5139) A game launched on the GGS is run within a virtual machine.
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5140) For each programming language supported, there is a virtual machine which
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5141) interprets the game.
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5142) Furthermore an interface for communication among the GGS, the game and
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5143) the players playing the game is present.
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5144) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5145)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5146) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5147) Callbacks written in Erlang are registered to the VM for the interface to
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5148) work.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5149) It is only with the help of the interface that the game developer can access
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5150) the game state and send messages to the clients.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5151) The interface provides access to three objects called
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5152) \emph on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5153) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5154) world
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5155) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5156) ,
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5157) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5158) players
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5159) \emph default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5160) \noun default
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5161) and
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5162) \emph on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5163) \noun on
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5164) localStorage
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5165) \emph default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5166) \noun default
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5167) .
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5168) The game state is safely stored in a database and retrieved for manipulation
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5169) by a call for the world object.
e0a90a76 (Jonatan Pålsson 2011-05-12 23:23:25 +0200 5170) Interaction with the players is done by using the
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5171) \emph on
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5172)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5173) \begin_inset ERT
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5174) status open
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5175)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5176) \begin_layout Plain Layout
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5177)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5178) {
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5179) \backslash
b4273bb5 (Jonatan Pålsson 2011-05-12 21:44:24 +0200 5180) tt GGS.sendCommand(player
b4273bb5 (Jonatan Pålsson 2011-05-12 21:44:24 +0200 5181) \backslash
b4273bb5 (Jonatan Pålsson 2011-05-12 21:44:24 +0200 5182) _id, command, args)}
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5183) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5184)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5185) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5186)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5187)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5188) \emph default
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5189) and
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5190) \emph on
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5191)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5192) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5193) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5194)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5195) \begin_layout Plain Layout
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5196)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5197) {
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5198) \backslash
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5199) tt GGS.sendCommandToAll(command, args)}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5200) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5201)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5202) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5203)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5204)
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5205) \emph default
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5206) .
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5207) The
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5208) \noun on
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5209) localStorage
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5210) \noun default
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5211) is a convenient way to store global data and other variables separated
93052126 (Jeena Paradies 2011-05-13 00:27:18 +0200 5212) from the game state.
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5213) Unique ids called game tokens are generated for hosted games so that they
cb886616 (Jonatan Pålsson 2011-05-12 21:43:01 +0200 5214) are not mixed up.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5215) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5216) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5217)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5218) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5219)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5220)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5221) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5222) nomenclature{
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5223) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5224) textbf{WebStorage}}{A new standard for letting websites store data on visitors'
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5225) computers}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5226) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5227)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5228) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5229)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5230)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5231) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5232)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5233) \begin_layout Subsection
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5234) Exposing Erlang functionality to the GDL VM
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5235) \begin_inset CommandInset label
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5236) LatexCommand label
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5237) name "sub:Exposing-Erlang-functionality"
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5238)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5239) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5240)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5241)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5242) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5243)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5244) \begin_layout Standard
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5245) This section contains a concrete example of how the
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5246) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5247) localStorage
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5248) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5249) and
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5250) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5251) world
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5252) \noun default
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5253) objects are exposed to a GDL VM.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5254) The example comes from the GGS prototype, which uses JavaScript powered
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5255) by Google V8 as its GDL VM.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5256) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5257)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5258) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5259) The code given in
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5260) \begin_inset CommandInset ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5261) LatexCommand ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5262) reference "alg:exposing-erlang"
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5263)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5264) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5265)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5266) is specific to V8 and JavaScript, however implementations for different
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5267) GDLs, or different VMs should be similar.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5268) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5269)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5270) \begin_layout Standard
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5271) In JavaScript it is common to use a top level object, called a global object,
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5272) to establish a global scope.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5273) This allows the declaration of global variables and functions.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5274) To gain access to the global object in the GGS, the
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5275) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5276) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5277)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5278) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5279)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5280) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5281) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5282) tt erlv8
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5283) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5284) _vm:global(..)}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5285) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5286)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5287) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5288)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5289) function on line 2 of the example is used.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5290) Using the global object, declarations of the world and GGS object can be
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5291) placed in the global scope.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5292) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5293)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5294) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5295) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5296) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5297)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5298) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5299)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5300) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5301) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5302) tt Global:set
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5303) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5304) _value(..)}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5305) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5306)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5307) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5308)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5309) is a call to the global object, declaring new objects in the global scope.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5310) On line 4 the GGS object is declared.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5311) By accessing
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5312) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5313) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5314)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5315) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5316)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5317) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5318) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5319) tt GGS.localStorage }
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5320) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5321)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5322) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5323)
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5324) from within the GDL, access to the
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5325) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5326) localStorage
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5327) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5328) is provided, thus the
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5329) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5330) localStorage
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5331) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5332) must be connected to the GGS object, this can be seen in line 5.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5333) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5334)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5335) \begin_layout Standard
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5336) Both the
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5337) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5338) GGS
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5339) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5340) and
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5341) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5342) localStorage
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5343) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5344) objects are dummy objects, which provide no functionality, these two objects
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5345) are simply placed in the GDL for the purpose clearing up the code.
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5346) To perform an action using the GGS and
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5347) \noun on
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5348) localStorage
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5349) \noun default
89ec3881 (Jonatan Pålsson 2011-05-12 21:47:31 +0200 5350) objects, the
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5351) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5352) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5353)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5354) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5355)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5356) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5357) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5358) tt getItem} and {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5359) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5360) tt setItem}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5361) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5362)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5363) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5364)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5365) functions must be used.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5366) These items are directly connected to the database module of the GGS, which
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5367) is discussed in more detail in
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5368) \begin_inset CommandInset ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5369) LatexCommand ref
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5370) reference "sub:The-database-module"
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5371)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5372) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5373)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5374) .
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5375) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5376)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5377) \begin_layout Standard
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5378) Similarly the functions
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5379) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5380) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5381)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5382) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5383)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5384) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5385) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5386) tt sendCommand, sendCommandToAll} and {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5387) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5388) tt setTimeout}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5389) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5390)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5391) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5392)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5393) are directly connected to a piece of code in the GGS which performs the
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5394) desired action.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5395) The
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5396) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5397) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5398)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5399) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5400)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5401) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5402) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5403) tt sendCommand}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5404) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5405)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5406) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5407)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5408) functions are used to send commands or text to participants of the table.
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5409) The
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5410) \begin_inset ERT
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5411) status open
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5412)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5413) \begin_layout Plain Layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5414)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5415) {
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5416) \backslash
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5417) tt setTimeout}
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5418) \end_layout
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5419)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5420) \end_inset
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5421)
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5422) function introduces timeouts to the V8 engine, which are not available
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5423) per default.
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5424) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5425)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5426) \begin_layout Standard
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5427) \begin_inset Float algorithm
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5428) wide false
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5429) sideways false
467f4d72 (Jeena Paradies 2011-05-10 18:18:48 +0200 5430) status open
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5431)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5432) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5433) \begin_inset ERT
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5434) status open
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5435)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5436) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5437)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5438)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5439) \backslash
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5440) lstset{
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5441) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5442)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5443) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5444)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5445) language=Erlang,
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5446) \end_layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5447)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5448) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5449)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5450) backgroundcolor=
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5451) \backslash
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5452) color{white},
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5453) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5454)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5455) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5456)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5457) extendedchars=true,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5458) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5459)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5460) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5461)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5462) basicstyle=
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5463) \backslash
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5464) footnotesize
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5465) \backslash
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5466) ttfamily,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5467) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5468)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5469) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5470)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5471) showstringspaces=false,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5472) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5473)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5474) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5475)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5476) showspaces=false,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5477) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5478)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5479) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5480)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5481) numbers=left,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5482) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5483)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5484) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5485)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5486) numberstyle=
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5487) \backslash
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5488) footnotesize,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5489) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5490)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5491) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5492)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5493) numbersep=9pt,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5494) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5495)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5496) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5497)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5498) tabsize=2,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5499) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5500)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5501) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5502)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5503) breaklines=true,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5504) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5505)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5506) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5507)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5508) showtabs=false,
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5509) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5510)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5511) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5512)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5513) captionpos=b
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5514) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5515)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5516) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5517)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5518) }
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5519) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5520)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5521) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5522)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5523)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5524) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5525) begin{lstlisting}[language=Erlang]
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5526) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5527)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5528) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5529)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5530) % @doc Exposes some GGS functions to JavaScript
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5531) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5532)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5533) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5534)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5535) expose(GameVM, Table) ->
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5536) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5537)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5538) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5539)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5540) Global = erlv8_vm:global(GameVM),
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5541) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5542)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5543) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5544)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5545) Global:set_value("GGS", erlv8_object:new([
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5546) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5547)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5548) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5549)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5550) {"localStorage", erlv8_object:new([
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5551) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5552)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5553) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5554)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5555) {"setItem", fun(#erlv8_fun_invocation{}, [Key, Val])->
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5556) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5557)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5558) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5559)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5560) ggs_db:setItem(Table, local_storage, Key, Val)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5561) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5562)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5563) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5564)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5565) end},
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5566) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5567)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5568) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5569)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5570) {"getItem", fun(#erlv8_fun_invocation{}, [Key])->
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5571) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5572)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5573) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5574)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5575) ggs_db:getItem(Table, local_storage, Key)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5576) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5577)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5578) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5579)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5580) end}
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5581) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5582)
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5583) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5584)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5585) % more functions ...
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5586) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5587)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5588) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5589)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5590) ])},
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5591) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5592)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5593) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5594)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5595) {"world", erlv8_object:new([
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5596) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5597)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5598) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5599)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5600) {"setItem", fun(#erlv8_fun_invocation{}, [Key, Val])->
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5601) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5602)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5603) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5604)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5605) ggs_db:setItem(Table, world, Key, Val),
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5606) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5607)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5608) \begin_layout Plain Layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5609)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5610) ggs_table:send_command_to_all(
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5611) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5612)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5613) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5614)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5615) Table, {"world_set", Key ++ "=" ++ Val}
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5616) \end_layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5617)
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5618) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5619)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5620) )
2b5be510 (Jonatan Pålsson 2011-04-28 13:20:49 +0200 5621) \end_layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5622)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5623) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5624)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5625) end},
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5626) \end_layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5627)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5628) \begin_layout Plain Layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5629)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5630) {"getItem", fun(#erlv8_fun_invocation{}, [Key])->
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5631) \end_layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5632)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5633) \begin_layout Plain Layout
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 5634)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5635) ggs_db:getItem(Table, world, Key),
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5636) \end_layout
356aea84 (Jonatan Pålsson 2011-03-30 13:30:52 +0200 5637)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5638) \begin_layout Plain Layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5639)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5640) end}
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5641) \end_layout
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 5642)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5643) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5644)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5645) % more functions ...
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5646) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5647)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5648) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5649)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5650) ])},
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5651) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5652)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5653) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5654)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5655) {"sendCommand", fun(#erlv8_fun_invocation{}, [Player, Command, Args])->
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5656) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5657)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5658) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5659)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5660) ggs_table:send_command(Table, Player, {Command, Args})
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5661) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5662)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5663) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5664)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5665) end},
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5666) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5667)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5668) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5669)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5670) {"sendCommandToAll", fun(#erlv8_fun_invocation{}, [Command, Args])->
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5671) \end_layout
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 5672)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5673) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5674)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5675) ggs_table:send_command_to_all(Table, {Command, Args})
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5676) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5677)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5678) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5679)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5680) end}
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5681) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5682)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5683) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5684)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5685) {"setTimeout", fun(#erlv8_fun_invocation{}, [Time, Function])->
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5686) \end_layout
106cb118 (Jonatan Pålsson 2011-05-02 12:29:03 +0200 5687)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5688) \begin_layout Plain Layout
464d1256 (Kallfaktorn 2011-05-03 09:50:25 +0200 5689)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5690) timer:apply_after(Time, ?MODULE, call_js, [GameVM, Function])
464d1256 (Kallfaktorn 2011-05-03 09:50:25 +0200 5691) \end_layout
464d1256 (Kallfaktorn 2011-05-03 09:50:25 +0200 5692)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5693) \begin_layout Plain Layout
464d1256 (Kallfaktorn 2011-05-03 09:50:25 +0200 5694)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5695) end}
c05978ef (Kallfaktorn 2011-05-02 16:08:57 +0200 5696) \end_layout
c05978ef (Kallfaktorn 2011-05-02 16:08:57 +0200 5697)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5698) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 5699)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5700) % more functions ...
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 5701) \end_layout
a420bc92 (Jonatan Pålsson 2011-04-05 11:32:44 +0200 5702)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5703) \begin_layout Plain Layout
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5704)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5705) ])).
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5706) \end_layout
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5707)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5708) \begin_layout Plain Layout
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5709)
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5710)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5711) \backslash
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5712) end{lstlisting}
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5713) \end_layout
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5714)
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5715) \end_inset
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5716)
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5717)
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5718) \end_layout
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5719)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5720) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5721) \begin_inset Caption
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5722)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5723) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5724) \begin_inset CommandInset label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5725) LatexCommand label
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5726) name "alg:exposing-erlang"
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5727)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5728) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5729)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 5730) An example of how Erlang functionality is exposed to a JavaScript GDL VM.
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5731) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5732)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5733) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5734)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5735)
3ba7ab15 (Kallfaktorn 2011-05-03 11:23:03 +0200 5736) \end_layout
3ba7ab15 (Kallfaktorn 2011-05-03 11:23:03 +0200 5737)
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5738) \end_inset
5f187abb (Jonatan Pålsson 2011-05-03 22:19:33 +0200 5739)
c5d429b0 (Kallfaktorn 2011-05-03 12:11:24 +0200 5740)
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5741) \end_layout
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5742)
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5743) \begin_layout Standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5744) \begin_inset Note Note
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5745) status open
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5746)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5747) \begin_layout Plain Layout
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5748) TODO: Go in to more detail about how the world, player and localstorage
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5749) objects are implemented.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5750) Also discuss localstorage and how it derives from the webstorage standard
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5751) in detail.
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5752) This is a great point on how we try to follow standards.
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5753) \end_layout
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5754)
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 5755) \end_inset
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5756)
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5757)
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5758) \end_layout
4230b38c (Jeena Paradies 2011-05-06 14:12:35 +0200 5759)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 5760) \begin_layout Section
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5761) Techniques for ensuring reliability
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5762) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5763)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5764) \begin_layout Standard
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5765) One main goal of the project is to achieve high reliability.
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5766) The term 'reliable system' is defined by the IEEE as
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5767) \end_layout
e296bb8c (Jonatan Pålsson 2011-05-02 12:48:35 +0200 5768)
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5769) \begin_layout Quotation
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5770) A system with the ability of a system or component to perform its required
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5771) functions under stated conditions for a specified period of time
e296bb8c (Jonatan Pålsson 2011-05-02 12:48:35 +0200 5772) \begin_inset CommandInset citation
e296bb8c (Jonatan Pålsson 2011-05-02 12:48:35 +0200 5773) LatexCommand citet
e296bb8c (Jonatan Pålsson 2011-05-02 12:48:35 +0200 5774) key "ieee_90"
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5775)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5776) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5777)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5778) .
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5779) \end_layout
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5780)
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5781) \begin_layout Standard
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5782) There are some tools for creating reliable applications built in to Erlang:
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5783)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5784) \begin_inset ERT
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5785) status collapsed
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5786)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5787) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5788)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5789)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5790) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5791) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5792) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5793) textbf{Reliability}}{The ability of a system or component to perform its
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5794) required functions under stated conditions for a specified period of time}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5795) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5796)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5797) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5798)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5799)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5800) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5801) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5802) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5803) textbf{IEEE}}{Institute of Electrical and Electronics Engineers, read "I-triple-
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 5804) E"}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5805) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5806)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5807) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5808)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 5809)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5810) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5811)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5812) \begin_layout Itemize
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5813)
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5814) \series bold
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5815) Links between processes
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5816) \series default
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5817) .
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5818) When a process spawns a new child process, and the child process later
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5819) exits, the parent process is notified of the exit.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5820)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5821) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5822)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5823) \begin_layout Itemize
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5824)
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5825) \series bold
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5826) Transparent distribution over a network of processors
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5827) \series default
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5828) .
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5829) When several nodes participate in a network, it does not matter on which
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5830) of these machines a process is run.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5831) Communication between processes does not depend on the node in which each
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5832) process is run.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5833)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5834) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5835)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5836) \begin_layout Itemize
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5837)
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5838) \series bold
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5839) Hot code replacements
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5840) \series default
e099c269 (Jonatan Pålsson 2011-05-12 21:56:38 +0200 5841) .
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5842) Two versions of the same module can reside in the memory of Erlang at any
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5843) time.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5844) This means that a simple swap between these versions can take place very
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5845) quickly, and without stopping the machine.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5846) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5847)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5848) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5849) These three features are some of the basic building blocks for more sophisticate
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5850) d reliability systems in Erlang.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5851) Many times it is not necessary to use these features directly, but rather
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5852) through the design patterns described below.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5853) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5854)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 5855) \begin_layout Subsection
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5856) Supervisor structure
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5857) \begin_inset CommandInset label
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5858) LatexCommand label
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5859) name "sub:Supervisor-structure"
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5860)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5861) \end_inset
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5862)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 5863)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5864) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5865)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5866) \begin_layout Standard
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5867) \begin_inset Float figure
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5868) wide false
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5869) sideways false
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5870) status open
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5871)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5872) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5873) \begin_inset ERT
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5874) status open
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5875)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5876) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5877)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5878)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5879) \backslash
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5880) begin{centering}
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5881) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5882)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5883) \end_inset
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5884)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5885)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5886) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5887)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5888) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5889) \begin_inset Graphics
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5890) filename graphics/Supervisor_tree_GGS.eps
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5891) scale 40
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5892)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5893) \end_inset
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5894)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5895)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5896) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5897)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5898) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5899) \begin_inset ERT
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5900) status open
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5901)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5902) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5903)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5904)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5905) \backslash
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5906) end{centering}
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5907) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5908)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5909) \end_inset
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5910)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5911)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5912) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5913)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5914) \begin_layout Plain Layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5915) \begin_inset Caption
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5916)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5917) \begin_layout Plain Layout
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5918) \begin_inset CommandInset label
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5919) LatexCommand label
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5920) name "fig:The-supervisor-structure"
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5921)
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5922) \end_inset
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5923)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 5924) The supervisor structure of the GGS
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5925) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5926)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5927) \end_inset
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5928)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 5929)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5930) \end_layout
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5931)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5932) \end_inset
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5933)
28b81c9a (Jonatan Pålsson 2011-04-27 21:56:45 +0200 5934)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5935) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5936)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5937) \begin_layout Standard
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5938) By linking processes together and notifying parents when children exit,
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5939) supervisors are created.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5940) A supervisor is a common approach in ensuring that an application functions
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5941) in the way it was intended
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5942) \begin_inset CommandInset citation
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5943) LatexCommand citet
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5944) key "Savor:1997:HSA:851010.856089"
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5945)
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5946) \end_inset
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5947)
3c8f270c (Jonatan Pålsson 2011-05-02 12:55:45 +0200 5948) .
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5949) When a process misbehaves, the supervisor takes some action to restore
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5950) the process to a functional state.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5951) In the case of the GGS, a process misbehaving most commonly triggers a
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5952) restart of the faulting process.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5953)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5954) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5955)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5956) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 5957) There are several approaches to a supervisor design in general (when not
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 5958) just considering how they work in Erlang).
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5959) One common approach is to have the supervisor look in to the state of the
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5960) process(es) it supervises, and let the supervisor makes decisions based
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5961) on this state.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5962) The supervisor has a specification of how the process it supervises should
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5963) function, this is how it makes decisions.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5964)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5965) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5966)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5967) \begin_layout Standard
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5968) In Erlang, there is a simple version of supervisors.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5969) No state of the processes being supervised is inspected.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5970) There is, however a specification of how the supervised processes should
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5971) behave, but on a higher level.
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 5972) The specification describes things such as how many times in a given interval
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 5973) a child process may crash, which processes need restarting when crashes
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 5974) occur, etc.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5975)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5976) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5977)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5978) \begin_layout Standard
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5979) When the linking of processes to monitor exit behavior is coupled with the
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5980) transparent distribution of Erlang, a very powerful supervision system
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5981) is created.
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5982) For instance, it is possible to restart a failing process on a different,
2519e562 (Niklas Landin 2011-05-12 22:35:12 +0200 5983) new node, with minimal impact on the system as a whole.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5984)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5985) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5986)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 5987) \begin_layout Standard
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5988) In the GGS, the system has been separated into two large supervised parts.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5989) An attempt to restart a crashing child separately is made, if this fails
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 5990) too many
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5991) \begin_inset Foot
1d0ad8df (Jonatan Pålsson 2011-04-05 12:54:18 +0200 5992) status collapsed
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5993)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5994) \begin_layout Plain Layout
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5995) Exactly how many
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5996) \begin_inset Quotes eld
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5997) \end_inset
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5998)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 5999) too many
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6000) \begin_inset Quotes erd
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6001) \end_inset
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6002)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6003) is depends on a setting in the supervisor, ten crashes per second is a
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6004) reasonable upper limit.
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6005) \end_layout
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6006)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6007) \end_inset
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6008)
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6009) times, the nearest supervisor of this child is restarted.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6010) This ensures separation of the subsystems so that a crash is as isolated
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6011) as possible.
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 6012) \end_layout
7fe990cd (Jonatan Pålsson 2011-03-23 00:17:26 +0100 6013)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6014) \begin_layout Standard
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6015) Figure
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6016) \begin_inset CommandInset ref
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6017) LatexCommand vref
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6018) reference "fig:The-supervisor-structure"
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6019)
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6020) \end_inset
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6021)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6022) shows the two subsystems, the coordinator subsystem and the dispatcher
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6023) subsystem.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6024) Since these two systems perform very different tasks they have been separated.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6025) Each subsystem has one worker process, the coordinator or the dispatcher.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6026) The worker process keeps a state which should not be lost in the event
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6027) of a crash.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6028) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6029)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6030) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6031) The choice has been made to let faulty processes crash very easily when
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6032) they receive bad data, or something unexpected happens.
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 6033) The alternative to crashing would have been to try to fix this faulty data,
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 6034) or to foresee the unexpected events.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6035) This was not chosen since it is so simple to monitor and restart processes,
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6036) and difficult to try to mend broken states.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6037) This approach is something widely deployed in the Erlang world, and developers
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6038) are often encouraged to “Let it crash”
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6039) \begin_inset CommandInset citation
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6040) LatexCommand citet
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6041) key "Armstrong03"
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6042)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6043) \end_inset
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6044)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6045) .
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6046) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6047)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6048) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6049) To prevent any data loss, the good state of the worker processes is stored
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6050) in their respective backup processes.
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6051) When a worker process (re)starts, the backup process is queried for any
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6052) previous state, if there is any, that state is loaded in to the worker
a5ca92a1 (Jonatan Pålsson 2011-05-12 22:11:00 +0200 6053) and it proceeds where it left off.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6054) If on the other hand no state is available, a special message is delivered
e0a90a76 (Jonatan Pålsson 2011-05-12 23:23:25 +0200 6055) instead, making the worker create a new state, this is what happens when
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6056) the workers are first created.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6057) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6058)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 6059) \begin_layout Subsection
676989b8 (unknown 2011-05-06 17:41:21 +0200 6060) Redundancy
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6061) \end_layout
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6062)
e3bf0ed5 (Jonatan Pålsson 2011-05-05 11:53:00 +0200 6063) \begin_layout Standard
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 6064) The modules in the GGS are built to be capable of redundant operations.
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6065) By adding a backup process to sensitive processes, the state can be kept
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6066) in the event of a crash.
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6067) The coordinator of the GGS prototype has this backup feature built in.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6068) The coordinator passes the state along to the backup process which keeps
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6069) the data safe.
d6c912b8 (Niklas Landin 2011-05-12 22:47:42 +0200 6070) If a crash occurs, the coordinator recovers the state from the backup process.
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6071) Figure
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6072) \begin_inset CommandInset ref
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6073) LatexCommand ref
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6074) reference "fig:redundancy"
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6075)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6076) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6077)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6078) depicts the redundancy built in to the coordinator process.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6079) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6080)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6081) \begin_layout Standard
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6082) This type of redundancy is only implemented in the coordinator process,
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6083) similar configurations should however be possible for all modules of the
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6084) GGS.
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6085) \end_layout
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6086)
cc4dabc3 (Jonatan Pålsson 2011-05-12 22:12:43 +0200 6087) \begin_layout Standard
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6088) \begin_inset Float figure
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6089) wide false
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6090) sideways false
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 6091) status collapsed
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6092)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6093) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6094) \begin_inset ERT
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6095) status open
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6096)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6097) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6098)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6099)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6100) \backslash
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6101) begin{centering}
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6102) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6103)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6104) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6105)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6106)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6107) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6108)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6109) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6110) \begin_inset Graphics
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6111) filename graphics/redundancy.eps
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6112) scale 40
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6113)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6114) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6115)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6116)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6117) \end_layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6118)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6119) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6120) \begin_inset ERT
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6121) status open
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6122)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6123) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6124)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6125)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6126) \backslash
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6127) end{centering}
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6128) \end_layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6129)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6130) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6131)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6132)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6133) \end_layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6134)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6135) \begin_layout Plain Layout
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6136) \begin_inset Caption
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6137)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6138) \begin_layout Plain Layout
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6139) \begin_inset CommandInset label
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6140) LatexCommand label
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6141) name "fig:redundancy"
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6142)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6143) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6144)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6145) To the left normal execution is pictured; the server state is backed up.
676989b8 (unknown 2011-05-06 17:41:21 +0200 6146) To the right; the exceptional execution, where the state is retrieved from
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6147) the backup to repopulate the server.
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6148) \end_layout
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6149)
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6150) \end_inset
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6151)
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 6152)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 6153) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 6154)
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6155) \end_inset
9d0747bc (Jonatan Pålsson 2011-05-05 13:29:20 +0200 6156)
e3bf0ed5 (Jonatan Pålsson 2011-05-05 11:53:00 +0200 6157)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6158) \end_layout
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6159)
3b54ab8f (Jonatan Pålsson 2011-04-04 13:03:52 +0200 6160) \begin_layout Subsection
92773530 (Jonatan Pålsson 2011-04-05 10:49:21 +0200 6161) Hot code replacement
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6162) \begin_inset CommandInset label
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6163) LatexCommand label
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6164) name "sub:Hot-code-replacement"
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6165)
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6166) \end_inset
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6167)
3fb628b1 (Jonatan Pålsson 2011-05-12 20:31:23 +0200 6168)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6169) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 6170)
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6171) \begin_layout Standard
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6172) Hot code replacement is a technique used to update systems while they are
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6173) running.
25a26ab1 (Jonatan Pålsson 2011-05-12 22:13:48 +0200 6174) The main use of hot code replacement is in critical systems that require
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6175) low downtime, such as telecom systems.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6176) By using hot code replacement, systems are able to achieve much longer
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6177) uptimes and thus improving the reliability of the system.
25a26ab1 (Jonatan Pålsson 2011-05-12 22:13:48 +0200 6178) Code replacement is a feature that exists in Erlang which means that with
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6179) some work it could be implemented into the GGS.
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6180) \end_layout
a72e14ff (niklas 2011-05-04 14:18:42 +0200 6181)
b239505a (niklas 2011-03-24 16:44:48 +0100 6182) \begin_layout Section
0de97245 (Jonatan Pålsson 2011-05-12 22:18:56 +0200 6183) Testing
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6184) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6185)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6186) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6187) To make sure the GGS prototype adheres to the specification set, three different
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6188) approaches to software testing are used.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6189) For simpler testing the GGS prototype uses unit tests.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6190) Modules are tested on a high level, making sure each function in the module
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6191) tested functions has been tested according to specification.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6192) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6193)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6194) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6195) Unit testing is not employed to test the system from the client side.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6196) In order to more accurately simulate real users some randomization is needed
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6197) \begin_inset Note Note
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6198) status open
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6199)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6200) \begin_layout Plain Layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6201) citation needed
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6202) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6203)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6204) \end_inset
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6205)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6206) , as users do not always act rationally.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6207) In order to introduce random data, the client side of the GGS is simulated
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6208) by QuickCheck tests.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6209) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6210)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6211) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6212) Finally to test the robustness of the prototype virtuall users, so called
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6213) bots are being used to simulate large amounts of players playing different
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6214) games simultanously.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6215) \end_layout
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6216)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6217) \begin_layout Subsection
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6218) Unit testing
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6219) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6220)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6221) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6222) Unit testing is a way to check if the functionality adheres to the specification
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6223) of the system by manually creating test cases for sections of code.
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6224) Usually whole functions.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6225) Unit testing is good, not only for revealing software bugs, but also to
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6226) state that a feature is working according to the specification.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6227)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6228) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6229)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6230) \begin_layout Standard
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6231) Unit testing is an useful way to create regression tests.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6232) Regression tests are used to make sure changes made to the GGS do not introduce
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6233) new bugs or break the specification.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6234) The regression tests are optimally run very often, such as after each change
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6235) to the code.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6236) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6237)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6238) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6239) Erlang provides a module for unit testing called eunit.
0de97245 (Jonatan Pålsson 2011-05-12 22:18:56 +0200 6240) Eunit, being a part of OTP, is rich in functionality and well documented,
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6241) it does not however allow any means of testing asynchronous behaviors as
0de97245 (Jonatan Pålsson 2011-05-12 22:18:56 +0200 6242) opposed to other means of software testing.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6243) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6244)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6245) \begin_layout Subsection
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6246) Automated test case generation
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6247) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6248)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6249) \begin_layout Standard
0de97245 (Jonatan Pålsson 2011-05-12 22:18:56 +0200 6250) The problem of writing software tests manually is that it takes a lot of
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6251) time.
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6252) There exists other ways to test software that addresses this problem by
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6253) generating test cases with certain properties.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6254) This allows for testing functions with a lot of different input parameters
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6255) without having to implement each specific test itself.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6256)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6257) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6258)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6259) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6260) By having each test automatically generated, each test can be very complex
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6261) and long.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6262) In order to generate random, complex tests the GGS uses QuickCheck.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6263) By using QuickCheck the GGS can be tested with input which would be extremely
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6264) difficult to construct using manual testing methods.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6265) Regression tests, such as the unit tests used by the GGS are more useful
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6266) for ensuring that the system does not diverge from a working scenario than
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6267) for finding new cases where the specification does not hold
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6268) \begin_inset CommandInset citation
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6269) LatexCommand citet
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6270) key "Arts:2006:TTS:1159789.1159792"
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6271)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6272) \end_inset
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6273)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6274) .
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6275) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6276)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6277) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6278) The entire GGS was not tested using QuickCheck, nor was the entire client
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6279) protocol for a game tested using QuickCheck, however the tests performed
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6280) using QuickCheck show that an automated testing system such as QuickCheck
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6281) is a very viable testing method for the GGS.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6282) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6283)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6284) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6285) QuickCheck has features to generate very large and complex tests, the results
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6286) of which can be hard to analyze.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6287) The solution to reading these complex test is to extract a
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6288) \emph on
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6289) minimal failing test case
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6290) \emph default
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6291) which contains the smallest failing test sequence.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6292) By applying a very large test and gradually simplifying the test to find
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6293) the smallest failing sequence, many bugs which would other wise have been
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6294) hard to catch can be caught
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6295) \begin_inset CommandInset citation
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6296) LatexCommand citet
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6297) key "Arts:2006:TTS:1159789.1159792"
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6298)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6299) \end_inset
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6300)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6301) .
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6302) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6303)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6304) \begin_layout Standard
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6305) QuickCheck was originally made for the programming language Haskell.
a25d586e (Niklas Landin 2011-05-12 22:59:34 +0200 6306) There is a lot of reimplementations of QuickCheck in various programming
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6307) languages.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6308) Erlang QuickCheck (EQC) and Triq are two variants of QuickCheck for Erlang.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6309) EQC was chosen for testing the GGS.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6310) Besides the standard functionality that QuickCheck provides, EQC is capable
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6311) of testing concurrency within a program.
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6312) \end_layout
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6313)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6314) \begin_layout Subsection
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6315) Bots
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6316) \end_layout
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6317)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6318) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6319) In order to test the robustness of the GGS several different artificial
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6320) users, so called bots, have been implemented.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6321) Each of this bots is programmed to play a game on the GGS as similar to
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6322) a real user as possible.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6323) In the game Pong for example, the bot is watching the ball and moves its
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6324) pad up or down according what the position of the ball suggests.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6325) For the GGS there is no difference in serving a real user or a bot.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6326) \end_layout
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6327)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6328) \begin_layout Standard
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6329) With help of this method large amounts of players can be simulated playing
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6330) games on the GGS simultanously which is a good stress and concurrency test
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6331) for the overall system.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6332) In section
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6333) \begin_inset CommandInset ref
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6334) LatexCommand ref
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6335) reference "sec:Statistics"
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6336)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6337) \end_inset
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6338)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6339) some of the statistical data retrieved with help of a whole network of
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6340) bots playing games is being presented.
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6341) \end_layout
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 6342)
615e9d16 (Jonatan Pålsson 2011-05-12 08:41:54 +0200 6343) \begin_layout Section
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6344) Case studies
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6345) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6346)
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6347) \begin_layout Standard
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6348) This section contains three case studies.
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6349) These case studies have been written to provide examples of how the flow
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6350) through the GGS can look when performing different tasks.
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6351) The first case study outlines the flow of sending a common message to the
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6352) GDL VM and receiving a response.
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6353) The second case study provides an example of the process of connecting
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6354) to the GGS to set up a game.
a384fa93 (Jonatan Pålsson 2011-05-10 14:24:01 +0200 6355) The third and final case study is a section of code from a part of a game
a384fa93 (Jonatan Pålsson 2011-05-10 14:24:01 +0200 6356) for the GGS.
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6357) The code in the third study shows how a simple chat server can be implemented
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6358) in the GGS using JavaScript as GDL.
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6359) \end_layout
f125122d (Jonatan Pålsson 2011-05-10 14:23:38 +0200 6360)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6361) \begin_layout Subsection
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6362) Typical communication
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6363) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6364)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6365) \begin_layout Standard
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6366) This case study describes the flow through the GGS when a typical command
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6367) is encountered.
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6368) Below is a case study where a chat client sends a message to change the
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6369) nick name of a user.
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6370) The actual code performing the change of a nick name in JavaScript is discussed
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6371) in section
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6372) \begin_inset CommandInset ref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6373) LatexCommand ref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6374) reference "sec:Example-of-a-GGS-app"
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6375)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6376) \end_inset
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6377)
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6378) .
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6379) All communication between modules is asynchronous, nothing is blocking,
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6380) which is very important in concurrent systems.
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6381) To follow the example more easily, looking at the graphic in section
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6382) \begin_inset CommandInset ref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6383) LatexCommand vref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6384) reference "fig:The-layout-of"
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6385)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6386) \end_inset
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6387)
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6388) is recommended.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6389) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6390)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6391) \begin_layout Enumerate
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6392) The client packages a Game-Command into a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6393) \emph on
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6394) GGS protocol packet
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6395) \emph default
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6396) which conforms to the protocol structure the GGS is using and sends it
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6397) over the network.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6398) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6399)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6400) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6401) The player process, which is coupled to the TCP-process which reacts on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6402) incoming messages, accepts the message and forwards the raw data to the
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6403) protocol parser process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6404) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6405)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6406) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6407) The protocol parser process parses the message and brings it into the format
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6408) of the internal GGS representation of such a message, which is just a specializ
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6409) ed Erlang tuple.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6410) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6411)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6412) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6413) The protocol parser sends this Erlang touple back to the player process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6414) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6415)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6416) \begin_layout Enumerate
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6417) The player process checks if the command is is a Server-Command or a Game-Comman
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6418) d.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6419) In our example it is a Game-Command and it sends the message to the table
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6420) process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6421) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6422)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6423) \begin_layout Enumerate
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6424) The table process sends it to its own game VM process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6425) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6426)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6427) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6428) The game VM process calls the function
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6429) \emph on
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6430)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6431) \begin_inset ERT
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6432) status open
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6433)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6434) \begin_layout Plain Layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6435)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6436) {
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6437) \backslash
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6438) tt playerCommand("278d5", "nick", "Peter")}
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6439) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6440)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6441) \end_inset
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6442)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6443)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6444) \emph default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6445) within the JavaScript VM (JSVM).
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6446) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6447)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6448) \begin_layout Enumerate
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6449) The JSVM - at this stage Googles V8 JavaScript Engine - evaluates the function
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6450) within the sandboxed game context which has been established earlier during
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6451) the setup of the game.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6452) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6453)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6454) \begin_layout Enumerate
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6455) In the example in section
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6456) \begin_inset CommandInset ref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6457) LatexCommand ref
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6458) reference "sec:Example-of-a-GGS-app"
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6459)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6460) \end_inset
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6461)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6462) we see that the GGS-functions
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6463) \emph on
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6464)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6465) \begin_inset ERT
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6466) status open
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6467)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6468) \begin_layout Plain Layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6469)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6470) {
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6471) \backslash
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6472) tt GGS.localStorage.setItem(key, value)}
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6473) \end_layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6474)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6475) \end_inset
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6476)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6477)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6478) \emph default
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6479) and
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6480) \emph on
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6481)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6482) \begin_inset ERT
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6483) status open
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6484)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6485) \begin_layout Plain Layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6486)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6487) {
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6488) \backslash
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6489) tt GGS.localStorage(key)}
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6490) \end_layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6491)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6492) \end_inset
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6493)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6494)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6495) \emph default
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6496) are used.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6497) Both are callbacks coupled to the database module functions.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6498) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6499)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6500) \begin_layout Enumerate
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6501) Data is read from and written to the database and handed over to the JSVM
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6502) via the database process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6503) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6504)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6505) \begin_layout Enumerate
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6506) In the example the
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6507) \emph on
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6508)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6509) \begin_inset ERT
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6510) status open
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6511)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6512) \begin_layout Plain Layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6513)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6514) {
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6515) \backslash
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6516) tt GGS.sendCommandToAll()}
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6517) \end_layout
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6518)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6519) \end_inset
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6520)
6e813b63 (Jonatan Pålsson 2011-05-12 22:26:22 +0200 6521)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6522) \emph default
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6523) is being called then which is a callback to a function of the table module
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6524) which iterates through its player list and sends the command to every player.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6525) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6526)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6527) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6528) The table process sends every player process the message to send the message
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6529) with the change of a nickname of a particular user to its own client.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6530) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6531)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6532) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6533) The player process asks the protocol process to create a message conforming
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6534) to the protocol which is being used.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6535) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6536)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6537) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6538) The protocol process creates a string according to the protocol and returns
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6539) it to the player process.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6540) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6541)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6542) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6543) The player process sends the message with help of the gen_tcp module to
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6544) the client.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6545) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6546)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6547) \begin_layout Subsection
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6548) Initialization and life cycle of a game
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6549) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6550)
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6551) \begin_layout Standard
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6552) This case study describes the initialization and definition of a game and
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6553) in roughly its life cycle untill it is removed from the GGS.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6554) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6555)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6556) \begin_layout Subsubsection
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6557) Initialization
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6558) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6559)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6560) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6561) A client connects via TCP to the GGS.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6562) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6563)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6564) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6565) The dispatcher process reacts on the incomming connecction and creates a
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6566) new player process.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6567) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6568)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6569) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6570) The dispatcher process couples the TCP connection to the newly created player
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6571) process, this way the new player process is responsible to react on incoming
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6572) messages.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6573) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6574)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6575) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6576) The client sends a message with a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6577) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6578) hello
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6579) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6580) Server-Command to initiate a handshake.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6581) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6582)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6583) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6584) The player module parses the message with help of the protocol module.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6585) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6586)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6587) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6588) If the message was just a plain
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6589) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6590) hello
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6591) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6592) , without a table token, then the player process asks the coordinator process
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6593) to create a new table process and add this player process to this newly
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6594) created table.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6595) If the client did send a table token then the player process asks the coordinat
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6596) or to att the player process to this table.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6597) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6598)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6599) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6600) During the creation of a new table the table process creates a new game
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6601) VM process which creates its own game context within the JSVM.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6602) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6603)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6604) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6605) The player process answers to the client with a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6606) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6607) hello
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6608) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6609) Client-Command and passes on the clients player token along with the informatio
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6610) n about if it should define a game - because it is the first client to connect
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6611) to this table - or not and the table token it was assigned to.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6612) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6613)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6614) \begin_layout Subsubsection
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6615) Defining a game
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6616) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6617)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6618) \begin_layout Standard
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6619) The generic nature of the GGS leaves it up to the client to define which
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6620) game should be run.
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6621) The definition is done in the GDL, in this example the GDL is JavaScript.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6622) It is possible to alter the GGS prototype so that only the server maintainer
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6623) is able to install new games on the server, however the current implementation
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6624) of the GGS is much more generic.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6625) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6626)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6627) \begin_layout Standard
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6628) The first client which connects to a table is responsible to provide the
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6629) JavaScript server source code.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6630) To do so there is a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6631) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6632) define
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6633) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6634) Server-Command.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6635) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6636)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6637) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6638) If during the handshake with the
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6639) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6640) hello
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6641) \noun default
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6642) command the client is assigned the task of providing the server source
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6643) code then the client must send a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6644) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6645) define
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6646) \noun default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6647) Server-Command message with the source code as its payload.
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6648) Only the first client will get the information about the need of defining
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6649) a game during the handshake.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6650) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6651)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6652) \begin_layout Enumerate
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6653) The player process parses the message, with help of the protocol module.
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6654) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6655)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6656) \begin_layout Enumerate
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6657) The player process sends the source code to the table process assigned to
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6658) the player as a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6659) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6660) define
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6661) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6662) message.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6663) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6664)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6665) \begin_layout Enumerate
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6666) The table process forwards the source code to the game VM process.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6667) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6668)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6669) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6670) The game VM process executes the source code within the JavaScript VM.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6671) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6672)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6673) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6674) The JavaScript VM evaluates the source code - which has to implement the
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6675)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6676) \begin_inset ERT
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6677) status open
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6678)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6679) \begin_layout Plain Layout
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6680)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6681) {
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6682) \backslash
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6683) tt playerCommand()}
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6684) \end_layout
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6685)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6686) \end_inset
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6687)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6688) function - within the context of the game.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6689) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6690)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6691) \begin_layout Enumerate
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6692) The game is at this point fully initialized and can be used by all clients
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6693) with help of the
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6694) \begin_inset ERT
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6695) status open
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6696)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6697) \begin_layout Plain Layout
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6698)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6699) {
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6700) \backslash
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6701) tt playerCommand()}
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6702) \end_layout
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6703)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6704) \end_inset
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6705)
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6706) function.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6707) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6708)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6709) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6710) The table process saves the source code in the database for backup reasons
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6711) (this is not yet implemented).
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6712) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6713)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6714) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6715) The player process sends a
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6716) \noun on
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6717) defined
bc133fa0 (Jonatan Pålsson 2011-05-10 14:15:09 +0200 6718) \noun default
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6719) Client-Command to the client.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6720) This way the client is notified that everything went well and it can start
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6721) the game.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6722) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6723)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6724) \begin_layout Subsubsection
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6725) Life cycle
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6726) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6727)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6728) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6729) Initialization
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6730) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6731)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6732) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6733) Defining a game
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6734) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6735)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6736) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6737) Other clients connect and initialize but do not define anything.
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6738) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6739)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6740) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6741) Typical communication
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6742) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6743)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6744) \begin_layout Enumerate
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6745) Clients disconnect
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6746) \end_layout
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6747)
d9a535f8 (Jeena Paradies 2011-05-10 13:34:09 +0200 6748) \begin_layout Enumerate
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6749) When the last client disconnects, the table process terminates and with
81a22bc1 (Jonatan Pålsson 2011-05-12 22:29:32 +0200 6750) it the game context and database content (not implemented in the prototype).
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6751) \end_layout
b17fe793 (Jonatan Pålsson 2011-05-10 11:25:05 +0200 6752)
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6753) \begin_layout Subsection
775ea856 (Jonatan Pålsson 2011-05-10 11:33:33 +0200 6754) A GGS server application in JavaScript
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6755) \begin_inset CommandInset label
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6756) LatexCommand label
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6757) name "sec:Example-of-a-GGS-app"
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6758)
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6759) \end_inset
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6760)
20d00ba6 (Jeena Paradies 2011-05-06 17:54:47 +0200 6761)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 6762) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 6763)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 6764) \begin_layout Standard
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6765) Below is a concrete example of part of a game, a simple in-game-chat server
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6766) application written using the GGS.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6767) The language chosen for this chat server is JavaScript.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6768) The GGS processes all incoming data through a protocol parser, which interprets
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6769) the data and parses it into an internal format for the GGS.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6770) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6771)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6772) \begin_layout Standard
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6773) When the GGS receives a
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6774) \emph on
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6775) Game-Command
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6776) \emph default
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6777) from a client, it is passed along to the game VM through a function called
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6778)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6779) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6780)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6781) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6782) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6783)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6784) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6785)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6786) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6787) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6788) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6789) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6790)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6791) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6792)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6793)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6794) \emph default
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6795) which is the entry point for each game and has to be implemented by the
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6796) developer; it can be seen as the
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6797) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6798)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6799) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6800) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6801)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6802) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6803)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6804) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6805) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6806) tt main()}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6807) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6808)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6809) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6810)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6811)
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6812) \emph default
676989b8 (unknown 2011-05-06 17:41:21 +0200 6813) function of a C or Java program
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6814) \emph on
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6815) .
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6816)
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6817) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6818) Typically the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6819) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6820)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6821) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6822) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6823)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6824) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6825)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6826) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6827) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6828) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6829) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6830)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6831) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6832)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6833)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6834) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6835) function contains conditional constructs which decide the next action to
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6836) take.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6837) In
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6838) \begin_inset CommandInset ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6839) LatexCommand ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6840) reference "alg:A-concrete-example"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6841)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6842) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6843)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6844) an example of the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6845) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6846)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6847) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6848) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6849)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6850) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6851)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6852) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6853) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6854) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6855) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6856)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6857) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6858)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6859)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6860) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6861) function can be seen.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6862) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6863)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6864) \begin_layout Standard
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6865) In
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6866) \begin_inset CommandInset ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6867) LatexCommand ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6868) reference "alg:A-concrete-example"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6869)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6870) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6871)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6872) the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6873) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6874)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6875) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6876) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6877)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6878) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6879)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6880) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6881) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6882) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6883) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6884)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6885) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6886)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6887)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6888) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6889) function accepts two different commands.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6890) The first command is a command which allows chat clients connected to the
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6891) chat server to change the nicknames, which are used when chatting.
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6892) In order to change the nickname, a client must send a Game-Command
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6893) \noun on
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 6894) nick
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6895) \noun default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6896) with the actual new nick name as its payload.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6897) When a message arrives to the GGS which has the form corresponding to the
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6898) nick name change, the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6899) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6900)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6901) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6902) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6903)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6904) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6905)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6906) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6907) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6908) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6909) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6910)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6911) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6912)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6913)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6914) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6915) function is called with the parameters
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6916) \emph on
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6917) player_id, command,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6918) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6919) and
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6920) \emph on
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6921) args
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6922) \emph default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6923) filled in appropriately.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6924) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6925)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6926) \begin_layout Standard
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6927) The
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6928) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6929)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6930) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6931) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6932)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6933) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6934)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6935) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6936) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6937) tt playerCommand}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6938) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6939)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6940) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6941)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6942)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6943) \emph default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6944) function is responsible for calling the helper functions responsible for
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6945) carrying out the actions of each message received.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6946)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6947) \emph on
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6948)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6949) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6950) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6951)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6952) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6953)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6954) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6955) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6956) tt changeNick}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6957) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6958)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6959) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6960)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6961)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6962) \emph default
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6963) is a function which is called when the
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6964) \noun on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6965) nick
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6966) \noun default
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6967) message is received.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6968) The
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6969) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6970)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6971) \begin_inset ERT
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6972) status open
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6973)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6974) \begin_layout Plain Layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6975)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6976) {
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6977) \backslash
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6978) tt changeNick}
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6979) \end_layout
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6980)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6981) \end_inset
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6982)
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 6983)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6984) \emph default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6985) function uses a feature of the GGS called
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6986) \noun on
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6987) localStorage
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6988) \noun default
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 6989) (see section
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 6990) \begin_inset CommandInset ref
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 6991) LatexCommand ref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 6992) reference "sec:Communication-with-the-GDL-VM"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6993)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6994) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6995)
282b5684 (Jonatan Pålsson 2011-05-02 21:26:31 +0200 6996) ), which is an interface to the database backend contained in the database
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6997) module (see
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6998) \begin_inset CommandInset ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 6999) LatexCommand ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7000) reference "sub:The-database-module"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7001)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7002) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7003)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7004) ).
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7005) The database can be used as any key-value store, however the syntax for
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7006) insertions and fetch operations is tightly integrated in the GDL of the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7007) GGS.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7008) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7009)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7010) \begin_layout Standard
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7011) Access to the
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7012) \noun on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7013) localStorage
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7014) \noun default
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7015) is provided through the
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7016) \emph on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7017) \noun on
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7018) GGS
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7019) \noun default
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7020)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7021) \emph default
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7022) object, which also can be used to communicate with the rest of the system
f61a832d (Jonatan Pålsson 2011-05-12 22:34:31 +0200 7023) from the GDL.
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7024) Implementation specifics of the GGS object are provided in
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7025) \begin_inset CommandInset ref
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7026) LatexCommand ref
e82339fd (Jeena Paradies 2011-05-06 14:38:35 +0200 7027) reference "sec:Communication-with-the-GDL-VM"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7028)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7029) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7030)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7031) .
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7032) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7033)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7034) \begin_layout Standard
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7035) \begin_inset Float algorithm
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7036) wide false
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7037) sideways false
d3b1ed82 (Jonatan Pålsson 2011-05-10 10:58:48 +0200 7038) status open
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7039)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7040) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7041) \begin_inset ERT
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7042) status open
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7043)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7044) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7045)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7046)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7047) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7048) lstset{
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7049) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7050)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7051) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7052)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7053) language=JavaScript,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7054) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7055)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7056) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7057)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7058) backgroundcolor=
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7059) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7060) color{white},
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7061) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7062)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7063) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7064)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7065) extendedchars=true,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7066) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7067)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7068) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7069)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7070) basicstyle=
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7071) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7072) footnotesize
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7073) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7074) ttfamily,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7075) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7076)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7077) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7078)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7079) showstringspaces=false,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7080) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7081)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7082) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7083)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7084) showspaces=false,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7085) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7086)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7087) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7088)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7089) numbers=left,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7090) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7091)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7092) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7093)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7094) numberstyle=
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7095) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7096) footnotesize,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7097) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7098)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7099) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7100)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7101) numbersep=9pt,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7102) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7103)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7104) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7105)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7106) tabsize=2,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7107) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7108)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7109) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7110)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7111) breaklines=true,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7112) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7113)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7114) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7115)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7116) showtabs=false,
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7117) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7118)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7119) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7120)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7121) captionpos=b
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7122) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7123)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7124) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7125)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7126) }
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7127) \end_layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7128)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7129) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7130)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7131)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7132) \backslash
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7133) begin{lstlisting}[language=JavaScript]
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7134) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7135)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7136) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7137)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7138) function playerCommand(player_id, command, args) {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7139) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7140)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7141) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7142)
36f48090 (Jeena Paradies 2011-05-06 12:28:41 +0200 7143) if(command == "nick") {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7144) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7145)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7146) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7147)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7148) changeNick(player_id, args);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7149) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7150)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7151) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7152)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7153) } else if(command == "message") {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7154) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7155)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7156) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7157)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7158) message(player_id, args);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7159) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7160)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7161) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7162)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7163) }
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7164) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7165)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7166) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7167)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7168) }
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7169) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7170)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7171) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7172)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7173) function changeNick(player_id, nick) {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7174) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7175)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7176) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7177)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7178) var old_nick = GGS.localStorage.getItem("nick_" + player_id);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7179) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7180)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7181) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7182)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7183) GGS.localStorage.setItem("nick_" + player_id, nick);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7184) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7185)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7186) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7187)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7188) if (!old_nick) {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7189) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7190)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7191) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7192)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7193) GGS.sendCommandToAll("notice", nick + " joined");
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7194) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7195)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7196) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7197)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7198) } else {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7199) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7200)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7201) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7202)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7203) GGS.sendCommandToAll("notice", old_nick + " is now called " + nick);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7204) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7205)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7206) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7207)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7208) }
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7209) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7210)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7211) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7212)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7213) }
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7214) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7215)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7216) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7217)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7218) function message(player_id, message) {
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7219) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7220)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7221) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7222)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7223) var nick = GGS.localStorage.getItem("nick_" + player_id);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7224) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7225)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7226) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7227)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7228) GGS.sendCommandToAll('message', nick + "> " + message);
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7229) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7230)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7231) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7232)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7233) }
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7234) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7235)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7236) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7237)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7238)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7239) \backslash
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7240) end{lstlisting}
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7241) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7242)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7243) \end_inset
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7244)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7245)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7246) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7247)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7248) \begin_layout Plain Layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7249) \begin_inset Caption
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7250)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7251) \begin_layout Plain Layout
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7252) \begin_inset CommandInset label
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7253) LatexCommand label
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7254) name "alg:A-concrete-example"
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7255)
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7256) \end_inset
9f867e05 (Jonatan Pålsson 2011-05-02 10:01:39 +0200 7257)
595363f6 (Jeena Paradies 2011-05-06 13:32:30 +0200 7258) A concrete example of a simple chat server written in JavaScript, running
1aac03c7 (Jeena Paradies 2011-05-13 01:38:49 +0200 7259) on the GGS.
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7260) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7261)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7262) \end_inset
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7263)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7264)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7265) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7266)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7267) \end_inset
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7268)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7269)
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7270) \end_layout
82d1de4a (Jonatan Pålsson 2011-05-01 15:50:37 +0200 7271)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7272) \begin_layout Chapter
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7273) Problems of implementation
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7274) \begin_inset CommandInset label
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7275) LatexCommand label
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7276) name "cha:Problems-of-implementation"
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7277)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7278) \end_inset
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7279)
96c831ca (Jonatan Pålsson 2011-04-28 13:11:34 +0200 7280)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7281) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7282)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7283) \begin_layout Standard
acb91e5e (Jonatan Pålsson 2011-05-12 22:36:15 +0200 7284) This chapter contains descriptions of specific problems encountered when
acb91e5e (Jonatan Pålsson 2011-05-12 22:36:15 +0200 7285) implementing the GGS prototype.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7286) Some of the problems described have solutions attached, however some problems
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7287) were not solved, therefore only ideas for solutions have been attached.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7288) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7289)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7290) \begin_layout Standard
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7291) The integration of JavaScript as a GDL in the GGS prototype was particularly
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7292) difficult, and is handled in this section, so is the protocol design and
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7293) limitation in the operating systems which have been used during the development
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7294) and tests.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7295) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7296)
66e9b6ae (Jonatan Pålsson 2011-03-24 16:39:47 +0100 7297) \begin_layout Section
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7298) JavaScript engine
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7299) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7300)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7301) \begin_layout Standard
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7302) The GGS prototype uses a virtual machine to sandbox each game.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7303) JavaScript was chosen for the prototype due to its commonality in web applicati
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7304) ons and the flexibility of the language.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7305) Any language with the proper bindings to Erlang could have been used in
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7306) theory.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7307) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7308)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7309) \begin_layout Standard
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7310) There are two JavaScript virtual machines, or
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7311) \emph on
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7312) engines,
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7313) \emph default
f1d54c16 (Jeena Paradies 2011-05-12 22:50:50 +0200 7314) with suitable bindings to Erlang available at the time of the writing of
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7315) this thesis.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7316) There is a group of machines developed by Mozilla called
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7317) \emph on
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7318) TraceMonkey, JaegerMonkey, SpiderMonkey
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7319) \emph default
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7320) and
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7321) \emph on
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7322) IonMonkey
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7323) \emph default
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7324) , and also there is Google's
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7325) \emph on
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7326) V8
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7327) \emph default
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7328) .
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7329) The members in the group of Mozilla machines are largely the same, and
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7330) are referred to as the same machine for simplicity.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7331) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7332)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7333) \begin_layout Standard
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7334) For the Mozilla machines, there exists a Erlang binding called erlang_js,
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7335) and for the V8 machine a binding called erlv8 exists.
b99f00dc (Jonatan Pålsson 2011-05-12 22:37:49 +0200 7336) Below follows a discussion about the different bindings and machines, and
b99f00dc (Jonatan Pålsson 2011-05-12 22:37:49 +0200 7337) a motivation as to why erlv8 was preferred over erlang_js.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7338) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7339)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7340) \begin_layout Subsection
0db0a4e4 (Jeena Paradies 2011-04-05 12:38:55 +0200 7341) erlang_js
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7342) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7343)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7344) \begin_layout Standard
d99f76b6 (Jonatan Pålsson 2011-05-12 22:38:35 +0200 7345) erlang_js provides direct communication with the JavaScript VM, which is
d99f76b6 (Jonatan Pålsson 2011-05-12 22:38:35 +0200 7346) exactly what is desired, however also required is the possibility to communicat
d99f76b6 (Jonatan Pålsson 2011-05-12 22:38:35 +0200 7347) e from JavaScript to Erlang.
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7348) The ability to communicate from JavaScript to Erlang is not yet implemented
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7349) in erlang_js, due to lack of time of the erlang_js developers.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7350) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7351)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7352) \begin_layout Standard
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7353) There were two possible solutions to the problem, either one would implement
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7354) the missing functionality, or a switch from erlang_js to some other JavaScript
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7355) engine with better bindings could be made.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7356)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7357) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7358)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7359) \begin_layout Standard
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7360) Attempts at implementing the missing functionality were initially made but
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7361) never became stable enough for usage in the GGS and the erlang_js software
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7362) was abandoned.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7363) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7364)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7365) \begin_layout Subsection
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7366) erlv8
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7367) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7368)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7369) \begin_layout Standard
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7370) erlv8 is powered by the V8 engine developed by Google.
95b12005 (Jonatan Pålsson 2011-05-12 22:39:34 +0200 7371) The ability to communicate from JavaScript to Erlang using NIF callbacks
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7372) is is present in the erlv8 bindings and can be used within the GGS.
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7373) \end_layout
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7374)
78dcf966 (Jonatan Pålsson 2011-05-04 10:27:39 +0200 7375) \begin_layout Standard
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7376) Initial releases of the erlv8 bindings had stability issues, these however
0c1a46b8 (Jeena Paradies 2011-05-10 14:17:59 +0200 7377) were resolved by the erlv8 developers during the development GGS.
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7378) While still described to be in 'alpha' stage, the erlv8 bindings have proved
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7379) to be stable nough and at this point erlv8 is the JavaScript engine powering
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7380) JavaScript as a GDL in the GGS.
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7381) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7382)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7383) \begin_layout Standard
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7384) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7385) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7386)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7387) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7388)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7389)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7390) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7391) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7392) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7393) textbf{V8}}{JavaScript engine developed by Google}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7394) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7395)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7396) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7397)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7398)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7399) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7400) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7401) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 7402) textbf{SpiderMonkey}}{JavaScript engine developed by Mozilla}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7403) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7404)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7405) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7406)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 7407)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7408) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7409)
d21d6479 (Jonatan Pålsson 2011-05-06 14:59:02 +0200 7410) \begin_layout Section
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7411) Protocol design
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7412) \end_layout
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7413)
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7414) \begin_layout Standard
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7415) Initially the GGS protocol was planed to use the UDP protocol as a transport
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7416) layer.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7417) Due to the lack of error checking in the UDP protocol, the UDP protocol
29ed8a50 (Jeena Paradies 2011-05-10 15:15:20 +0200 7418) is faster than the TCP protocol, this was a main reason in the desire to
29ed8a50 (Jeena Paradies 2011-05-10 15:15:20 +0200 7419) use UDP.
29ed8a50 (Jeena Paradies 2011-05-10 15:15:20 +0200 7420) The GGS does however need error checking for some of it parts to be as
29ed8a50 (Jeena Paradies 2011-05-10 15:15:20 +0200 7421) reliable as possible.
29ed8a50 (Jeena Paradies 2011-05-10 15:15:20 +0200 7422) Therefore an error checking layer would have to be placed on top of UDP.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7423) \end_layout
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7424)
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7425) \begin_layout Standard
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7426) The development of an error checking layer was weighed against the implementatio
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7427) n of TCP instead of UDP, thus losing some speed.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7428) Even though speed was lost, TCP was chosen due to the relative ease of
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7429) implementation compared to UDP.
354ab129 (Jeena Paradies 2011-05-10 15:15:55 +0200 7430) Due to the modularity of the GGS, a UDP extension is easily possible by
354ab129 (Jeena Paradies 2011-05-10 15:15:55 +0200 7431) replacing the network parts of the GGS.
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7432) \end_layout
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7433)
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7434) \begin_layout Standard
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7435) The Apache Thrift
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7436) \begin_inset CommandInset citation
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7437) LatexCommand citep
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7438) key "Slee2007"
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7439)
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7440) \end_inset
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7441)
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7442) was also an alternative.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7443) Using Thrift would mean the GGS would feature a standard protocol for network
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7444) communication.
452f213c (Jeena Paradies 2011-05-10 15:16:25 +0200 7445) Before finding out about Thrift during a lecture of Joe Armstrong (one
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7446) of the inventors of Erlang), the GGS protocol had already been implemented,
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7447) moving to Thrift would have meant too much efford for a prototype during
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7448) the short amount of time.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7449) \end_layout
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7450)
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7451) \begin_layout Standard
e3fa7a50 (Jonatan Pålsson 2011-05-12 22:41:40 +0200 7452) The use of Google protocol buffers - which is a different approach to a
e3fa7a50 (Jonatan Pålsson 2011-05-12 22:41:40 +0200 7453) standard protocol framework, implemented by Google - or other protocols
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7454) can be supported quite easily by developing protocol modules for each of
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7455) the protocols.
e086bfc2 (Jonatan Pålsson 2011-05-06 15:36:08 +0200 7456) No protocol modules for these protocols have however been developed during
452f213c (Jeena Paradies 2011-05-10 15:16:25 +0200 7457) the writing of this thesis.
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7458) \end_layout
8042a7d9 (Jonatan Pålsson 2011-05-04 10:35:08 +0200 7459)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7460) \begin_layout Section
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7461) Operating system limitations
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7462) \begin_inset CommandInset label
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7463) LatexCommand label
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7464) name "sec:Operating-system-limitations"
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7465)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7466) \end_inset
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7467)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7468)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7469) \end_layout
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7470)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7471) \begin_layout Standard
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7472) The operating systems on the computers which have been used to run the bots
926049ca (Jeena Paradies 2011-05-13 01:49:49 +0200 7473) while testing the GGS prototype had some limitations.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7474) The operating systems used were Linux and Mac OS X, since these systems
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7475) are quite similar on a lower level they exhibited the same limitations..
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7476) \end_layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7477)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7478) \begin_layout Standard
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7479) The most notable limitation was a limit set on the number of simultaneously
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7480) open files.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7481) Due to the implementation of sockets in UNIX-like systems such as Mac OS
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7482) X and Linux, a limit on the number of open files is a limit on the number
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7483) of open sockets.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7484) In order to simulate many connections to the GGS, many sockets needed to
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7485) be opened.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7486) Each socket had a bot connected on one end and the GGS on the other end.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7487) On each test machine several thousand sockets needed to be open while testing
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7488) the GGS, therefore the limit on open files had to be removed.
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7489) \end_layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7490)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7491) \begin_layout Standard
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7492) On the Linux machines the limit of open files is configured in
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7493) \begin_inset ERT
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7494) status open
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7495)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7496) \begin_layout Plain Layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7497)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7498) {
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7499) \backslash
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7500) tt /etc/security/security.conf}
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7501) \end_layout
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7502)
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7503) \end_inset
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7504)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7505) .
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7506) \end_layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7507)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7508) \begin_layout Standard
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7509) On the Mac OS X machine the limit of open files is configured in
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7510) \begin_inset ERT
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7511) status open
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7512)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7513) \begin_layout Plain Layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7514)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7515) {
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7516) \backslash
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7517) tt /etc/launchd.conf }
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7518) \end_layout
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7519)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7520) \end_inset
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7521)
601107ab (Jonatan Pålsson 2011-05-12 20:50:24 +0200 7522) .
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7523) \end_layout
542433ff (Jonatan Pålsson 2011-05-12 20:36:34 +0200 7524)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7525) \begin_layout Chapter
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7526) Results and discussion
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7527) \begin_inset CommandInset label
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7528) LatexCommand label
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7529) name "chap:Results-and-discussion"
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7530)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7531) \end_inset
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7532)
edb354fc (Jonatan Pålsson 2011-05-03 23:15:02 +0200 7533)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7534) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7535)
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7536) \begin_layout Standard
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7537) In this chapter the results of tests done on the GGS prototype are presented
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7538) and discussed.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7539) The test results are presented with both graphical and textual content.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7540) Finally thoughts about how future improvements to the prototype could look
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7541) like are given.
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7542) \end_layout
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7543)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7544) \begin_layout Section
3755ab5d (Jonatan Pålsson 2011-05-06 15:51:46 +0200 7545) Statistics
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7546) \begin_inset CommandInset label
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7547) LatexCommand label
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7548) name "sec:Statistics"
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7549)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7550) \end_inset
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7551)
ddc75554 (Jeena Paradies 2011-05-13 01:18:32 +0200 7552)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7553) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 7554)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7555) \begin_layout Standard
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7556) Testing of the GGS took place in two separate sessions.
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7557) The first session simulated a highly demanding application, the second
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7558) session simulated a less demanding application.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7559) The highly demanding application is a real time game which does several
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7560) asynchronous database writes each second.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7561) The less demanding application does not perform any database reads or writes.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7562) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7563)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7564) \begin_layout Standard
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7565) Each of the two simulations use JavaScript as the GDL.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7566) The JavaScript is run through Google V8.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7567) The database module uses Mnesia.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7568) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7569)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7570) \begin_layout Standard
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7571) During the sessions two measurements were recorded.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7572) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7573)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7574) \begin_layout Itemize
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7575)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7576) \series bold
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7577) Messages per second
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7578) \series default
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7579) is used to see how many incoming and outgoing messages the server can process
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7580) each second.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7581) The results of the messages per second testing are shown for a high demanding
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7582) application in figure
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7583) \begin_inset CommandInset ref
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7584) LatexCommand ref
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7585) reference "fig:msg-per-sec-MNESIA"
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7586)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7587) \end_inset
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7588)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7589) , and for a low demanding application in
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7590) \begin_inset CommandInset ref
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7591) LatexCommand ref
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7592) reference "fig:msg-per-sec-NOMNESIA"
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7593)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7594) \end_inset
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7595)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7596) .
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7597) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7598)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7599) \begin_layout Itemize
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7600)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7601) \series bold
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7602) Latency between server and client
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7603) \series default
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7604) is used to measure the round-trip time for a message travelling between
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7605) the client and server.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7606) This measurement is used to determine how many players the server can handle
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7607) while still providing a playable gaming experience.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7608) The results of the latency test can be seen in figure
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7609) \begin_inset CommandInset ref
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7610) LatexCommand ref
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7611) reference "fig:latency-graph"
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7612)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7613) \end_inset
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7614)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7615) .
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7616) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7617)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7618) \begin_layout Standard
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7619) \begin_inset Note Note
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7620) status open
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7621)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7622) \begin_layout Plain Layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7623) There was also a testing session where the number of clients were measured,
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7624) however this was not a good measurement of performance and therefore these
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7625) numbers will not be included in the report.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7626)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7627) \begin_inset Note Note
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7628) status open
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7629)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7630) \begin_layout Plain Layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7631) Since we donät include this..
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7632) should we mention it?
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7633) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7634)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7635) \end_inset
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7636)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7637)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7638) \end_layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7639)
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7640) \begin_layout Plain Layout
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7641) Richard: I think we should mention it and conclude that the data was garbage.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7642) \end_layout
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7643)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7644) \end_inset
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7645)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7646) The hardware that the GGS was running on was a Thinkpad T410, with a Intel
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7647) i5 processor and 4GB of RAM.
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7648) \end_layout
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7649)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7650) \begin_layout Standard
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7651) In the first test, in which Mnesia has been heavily used, the server had
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7652) a peak value of nearly 6,000 messages per second.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7653) When this number was reached Mnesia warned that it was overloaded and shortly
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7654) after that Mnesia failed to serve requests.
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7655) This result was not unexpected as this test put the database under heavy
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7656) load.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7657) In the next testing session, the test has been conducted with another client
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7658) that did not use Mnesia.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7659) Without mnesia the server peaked at 60,000 messages per second, however
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 7660) this was only for a very short time.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7661) The average throughput was around 25,000 messages per second, five times
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7662) more than what the server was able to process with Mnesia in place.
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7663)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7664) \end_layout
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7665)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7666) \begin_layout Standard
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7667) In the second testing session the delay between the server and clients has
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7668) also been measured.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7669) A connection can be seen between those values; as long as the server is
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7670) under moderate load the delay is low and stable.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7671) When the load on the server increases heavily the delay does too, this
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7672) is because the server cannot process all incoming messages and therefore
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7673) messages are put in a queue within the system.
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7674) \end_layout
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7675)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7676) \begin_layout Standard
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7677) It should be noted that with distribution in place, having the GGS deployed
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7678) on several machines, test results could reveal much higher numbers.
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7679) \end_layout
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7680)
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7681) \begin_layout Standard
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7682) \begin_inset Note Note
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7683) status collapsed
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7684)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7685) \begin_layout Plain Layout
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7686) Important things to note are that the number of clients is not a good way
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7687) of measuring the performance of the server because the server is possible
5a9339b3 (niklas 2011-05-11 14:17:41 +0200 7688) to have a large number of clients on the server but it cannot handle all
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7689) the information.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7690) Instead the performance of the server should be measured in the number
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7691) of messages it can handle per second.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7692) \end_layout
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7693)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7694) \begin_layout Plain Layout
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7695) We were able to reach 6000 messages per second on the server, which corresponds
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7696) to around 350 clients.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7697) However soon after this mnesia printed some warnings and the clients started
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7698) to lag.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7699) With this in mind one thing to investigate is if mnesia is the bottleneck
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7700) in the system.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7701) Current game servers do not use databases to save their state and maybe
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7702) we can see the reason here.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7703) Other possible bottlenecks may be the protocol, but this seems less likely
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7704) than mnesia.
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7705)
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7706) \end_layout
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7707)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7708) \end_inset
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7709)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7710)
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7711) \end_layout
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7712)
7e0ce7bf (niklas 2011-05-03 13:29:53 +0200 7713) \begin_layout Standard
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7714) \begin_inset Float figure
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7715) wide false
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7716) sideways false
83d5af26 (Niklas Landin 2011-05-09 15:28:51 +0200 7717) status open
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7718)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7719) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7720) \begin_inset ERT
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7721) status open
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7722)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7723) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7724)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7725)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7726) \backslash
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7727) begin{centering}
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7728) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7729)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7730) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7731)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7732)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7733) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7734)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7735) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7736) \begin_inset Graphics
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7737) filename graphics/msg_per_sec.eps
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7738)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7739) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7740)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7741)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7742) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7743)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7744) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7745) \begin_inset ERT
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7746) status open
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7747)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7748) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7749)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7750)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7751) \backslash
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7752) end{centering}
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7753) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7754)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7755) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7756)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7757)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7758) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7759)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7760) \begin_layout Plain Layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7761) \begin_inset Caption
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7762)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7763) \begin_layout Plain Layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7764) \begin_inset CommandInset label
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7765) LatexCommand label
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7766) name "fig:msg-per-sec-MNESIA"
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7767)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7768) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7769)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7770) The graph shows messages per second for intervals of clients connected.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7771) Each client performs at least 3 asynchronous writes to the Mnesia database
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7772) each second.
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7773) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7774)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7775) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7776)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7777)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7778) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7779)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7780) \end_inset
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7781)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7782)
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7783) \end_layout
76cb8703 (Jonatan Pålsson 2011-05-02 16:44:52 +0200 7784)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7785) \begin_layout Standard
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7786) \begin_inset Float figure
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7787) wide false
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7788) sideways false
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7789) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7790)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7791) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7792) \begin_inset ERT
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7793) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7794)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7795) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7796)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7797)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7798) \backslash
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7799) begin{centering}
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7800) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7801)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7802) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7803)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7804)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7805) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7806)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7807) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7808) \begin_inset Graphics
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7809) filename graphics/ping.eps
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7810)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7811) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7812)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7813)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7814) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7815)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7816) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7817) \begin_inset ERT
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7818) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7819)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7820) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7821)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7822)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7823) \backslash
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7824) end{centering}
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7825) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7826)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7827) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7828)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7829)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7830) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7831)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7832) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7833) \begin_inset Caption
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7834)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7835) \begin_layout Plain Layout
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7836) \begin_inset CommandInset label
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7837) LatexCommand label
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7838) name "fig:latency-graph"
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7839)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7840) \end_inset
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7841)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7842) This graph shows the latency in a low-demand application.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7843) The ping is measured in milliseconds for a message to make a round-trip
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7844) between client and server.
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7845) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7846)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7847) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7848)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7849)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7850) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7851)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7852) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7853)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7854)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7855) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7856)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7857) \begin_layout Standard
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7858) \begin_inset Float figure
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7859) wide false
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7860) sideways false
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7861) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7862)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7863) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7864) \begin_inset ERT
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7865) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7866)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7867) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7868)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7869)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7870) \backslash
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7871) begin{centering}
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7872) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7873)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7874) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7875)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7876)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7877) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7878)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7879) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7880) \begin_inset Graphics
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7881) filename graphics/msg_per_secoutput.eps
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7882)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7883) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7884)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7885)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7886) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7887)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7888) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7889) \begin_inset ERT
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7890) status open
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7891)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7892) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7893)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7894)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7895) \backslash
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7896) end{centering}
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7897) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7898)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7899) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7900)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7901)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7902) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7903)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7904) \begin_layout Plain Layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7905) \begin_inset Caption
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7906)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7907) \begin_layout Plain Layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7908) \begin_inset CommandInset label
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7909) LatexCommand label
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7910) name "fig:msg-per-sec-NOMNESIA"
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7911)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7912) \end_inset
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7913)
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7914) The graph shows messages per second for intervals of clients connected.
e660defb (Jonatan Pålsson 2011-05-10 09:38:25 +0200 7915) No database is connected.
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7916) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7917)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7918) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7919)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7920)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7921) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7922)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7923) \end_inset
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7924)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7925)
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7926) \end_layout
fdcd4b52 (Jonatan Pålsson 2011-05-05 15:17:09 +0200 7927)
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7928) \begin_layout Section
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7929) Future improvements
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7930) \end_layout
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7931)
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7932) \begin_layout Standard
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7933) There are several things in the GGS prototype that can be improved.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7934) In this section the most important additions to the GGS are described,
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7935) along with a motivation as to why these additions are not found in the
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7936) GGS prototype.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7937) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7938)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7939) \begin_layout Subsection
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7940) Distribution
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7941) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7942)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7943) \begin_layout Standard
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7944) The GGS was originally intended to be a distributed application, running
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7945) on several machines at once.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7946) The design of the GGS should support this, it has however not been tested.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7947) The technologies, such as supervisor trees and the servers supplied by
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7948) the OTP which are used in the GGS all support the development of distributed
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7949) applications.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7950) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7951)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7952) \begin_layout Standard
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7953) Distribution was however not implemented in the GGS.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7954) Other parts of the GGS were prioritized.
87ff58b7 (Jonatan Pålsson 2011-05-12 22:45:37 +0200 7955) A future improvement is therefore to implement distribution in the GGS.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7956) A simple way to achieve this is to keep one GGS instance as a coordinating
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7957) instance, and to keep clients on other instances of the GGS, which can
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7958) be dynamically added as new clients connect.
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7959) \end_layout
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7960)
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7961) \begin_layout Subsection
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7962) Performance
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7963) \end_layout
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7964)
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7965) \begin_layout Standard
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7966) The GGS prototype was not developed for maximum performance.
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7967) Performance optimizations were considered, many were however not implemented
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7968) in the prorotype.
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7969) There are several performance optimizations which can be included in future
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7970) versions of the GGS, below are some of the most important performance optimizat
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7971) ions identified.
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7972) \end_layout
1eb8b0fb (Jonatan Pålsson 2011-05-12 08:54:25 +0200 7973)
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 7974) \begin_layout Subsubsection
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 7975) Protocols
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7976) \begin_inset Note Note
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7977) status open
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7978)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7979) \begin_layout Plain Layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7980) Need references for assertions about UDP being nicer on the CPU.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7981) Motivate why UDP is not implemented.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7982) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7983)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7984) \end_inset
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7985)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 7986)
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 7987) \end_layout
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 7988)
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7989) \begin_layout Standard
a72e14ff (niklas 2011-05-04 14:18:42 +0200 7990) Because of TCP being a connection oriented protocol, it is not suited for
02b9c72f (root 2011-04-14 16:50:48 +0200 7991) all types of game data transfers.
676989b8 (unknown 2011-05-06 17:41:21 +0200 7992) Each transmission will consume more network bandwidth than connectionless
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7993) protocols like UDP and cause unnecessary load on the processor while performing
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7994) , in some cases unnecessary, tests to assure the correctness of the data.
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7995) Therefore support for UDP would mean that more games could be run simultaneousl
05352a57 (Kallfaktorn 2011-04-14 15:19:22 +0200 7996) y on the GGS.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 7997) Another advantage of UDP is that latency is being reduced.
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7998) Without having to setup a connection for each group packets of data being
94e6d4e9 (Kallfaktorn 2011-04-14 13:18:27 +0200 7999) sent, they will be sent instantly and therefore arrive earlier.
676989b8 (unknown 2011-05-06 17:41:21 +0200 8000) Latency is of highest importance in real-time games as it improves realism
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 8001) and fairness in gameplay and many game developers require the freedom to
a64370c2 (Niklas Landin 2011-05-09 16:02:47 +0200 8002) take care of safety issues as packet losses themselves.
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8003) This concludes that UDP would be a benefit for the GGS, game developers
a72e14ff (niklas 2011-05-04 14:18:42 +0200 8004) and players alike.
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8005) \end_layout
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8006)
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8007) \begin_layout Subsubsection
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8008) Database
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8009) \end_layout
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8010)
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8011) \begin_layout Standard
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8012) Currently Mnesia is used for game data storage.
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8013) During stress tests, Mnesia has turned out to be the bottleneck due to
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8014) data losses when too many games are played on the GGS simultaneously.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8015)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8016) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8017)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8018) \begin_layout Standard
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8019) The usage of Mnesia in the GGS is not the usage originally intended.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8020) Originally a cache was to be placed before Mnesia.
035c79ab (niklas 2011-05-11 18:03:41 +0200 8021) The cache could be either Erlang Term Storage (ETS) or a Erlang process
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8022) which keeps track of all database actions.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8023) The cache periodically flushes its contents to Mnesia, thereby reducing
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8024) the Mnesia transactions overall.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8025) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8026)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8027) \begin_layout Standard
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8028) The cache was never implemented in the prototype due to other parts of the
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8029) GGS being prioritized.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8030) The current implementation of the database backend is not optimal, however
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8031) it functions reliably, therefore it was deemed sufficient for the prototype.
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8032) \end_layout
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8033)
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8034) \begin_layout Standard
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8035) A possible future addition to the GGS could be to add this cache in the
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8036) database module.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 8037) The API would not need any changes, as this could be implemented internally
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8038) in the database module.
2f56e49c (Kallfaktorn 2011-05-03 12:57:48 +0200 8039)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8040) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8041) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8042)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8043) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8044)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8045)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8046) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 8047) nomenclature{
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 8048) \backslash
89005cb1 (Jonatan Pålsson 2011-05-03 23:42:01 +0200 8049) textbf{ETS}}{Erlang Term Storage}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8050) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8051)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8052) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8053)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8054)
b9d239a5 (Kallfaktorn 2011-04-14 13:47:04 +0200 8055) \end_layout
b9d239a5 (Kallfaktorn 2011-04-14 13:47:04 +0200 8056)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8057) \begin_layout Chapter
772a9365 (Jonatan Pålsson 2011-03-22 20:07:40 +0100 8058) Conclusion
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8059) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8060)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8061) \begin_layout Standard
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 8062) This thesis describes a method to create a reliable and generic game server
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 8063) with help of the techniques used in the telecom industry.
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 8064) \end_layout
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 8065)
e6983b40 (Jeena Paradies 2011-05-12 14:02:26 +0200 8066) \begin_layout Standard
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8067) To make the GGS as generic as possible seperation of game and server logic
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8068) is necessary.
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8069) Designing a good API is vital in order to allow game developers to interact
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8070) with the server in a easy manner and with minimal overhead.
55a1675a (Jeena Paradies 2011-05-13 02:13:07 +0200 8071) Furthermore every game should be isolated so that games can not interfare
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8072) with each other.
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8073) Isolation can be achived by introducing a context for each game which leads
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8074) to the fact that each game runs in its own sandbox.
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8075) To be able to use different game development languages virtual machines
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8076) should be used.
359e3104 (Jeena Paradies 2011-05-12 14:31:18 +0200 8077) Each virtual machine instance evaluates game source code safely.
d65b1b2a (Jeena Paradies 2011-05-12 14:15:29 +0200 8078) \end_layout
d65b1b2a (Jeena Paradies 2011-05-12 14:15:29 +0200 8079)
d65b1b2a (Jeena Paradies 2011-05-12 14:15:29 +0200 8080) \begin_layout Standard
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8081) This thesis concludes that it is reasonable to use the same tools as those
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8082) used by the telecom industry for creating reliable systems when developing
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8083) games for computers.
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8084) A typical game can be split up in to several parts, and using the GGS,
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8085) the parts not directly related to the actual gameplay can be implemented
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8086) in Erlang, while keeping the actual game software in a virtual machine.
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8087) It has been demonstrated in this thesis that games can be developed for
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8088) the GGS in JavaScript, while still benefiting from the features offered
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8089) by Erlang and the OTP.
3615801a (niklas 2011-05-12 14:32:29 +0200 8090)
3615801a (niklas 2011-05-12 14:32:29 +0200 8091) \end_layout
3615801a (niklas 2011-05-12 14:32:29 +0200 8092)
3615801a (niklas 2011-05-12 14:32:29 +0200 8093) \begin_layout Standard
21c4c735 (niklas 2011-05-12 14:43:13 +0200 8094) In the current state, the GGS prototype is not scalable.
21c4c735 (niklas 2011-05-12 14:43:13 +0200 8095) The GGS is however prepared for scaling due to its overall structure.
3615801a (niklas 2011-05-12 14:32:29 +0200 8096) The implementation of scalability could be performed in two different ways,
3615801a (niklas 2011-05-12 14:32:29 +0200 8097) either to scale one instance of the GGS or to scale by creating new instances
3615801a (niklas 2011-05-12 14:32:29 +0200 8098) and support communication among them.
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8099) \end_layout
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8100)
74199c5f (Jonatan Pålsson 2011-05-12 14:15:13 +0200 8101) \begin_layout Standard
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8102) \begin_inset ERT
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8103) status open
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8104)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8105) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8106)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8107)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8108) \backslash
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8109) addcontentsline{toc}{section}{Glossary}
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8110) \end_layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8111)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8112) \begin_layout Plain Layout
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8113)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8114)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8115) \backslash
517953c3 (Jonatan Pålsson 2011-05-10 10:37:25 +0200 8116) printnomenclature
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 8117) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 8118)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8119) \end_inset
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8120)
e63263ec (Jonatan Pålsson 2011-05-03 17:14:06 +0200 8121)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 8122) \end_layout
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 8123)
3d6242f9 (Jonatan Pålsson 2011-04-26 20:00:33 +0200 8124) \begin_layout Standard
e9eeb566 (Jonatan Pålsson 2011-03-23 00:49:19 +0100 8125) \begin_inset CommandInset bibtex
e9eeb566 (Jonatan Pålsson 2011-03-23 00:49:19 +0100 8126) LatexCommand bibtex
e9eeb566 (Jonatan Pålsson 2011-03-23 00:49:19 +0100 8127) bibfiles "bibliography"
e9eeb566 (Jonatan Pålsson 2011-03-23 00:49:19 +0100 8128) options "plainnat"
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8129)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8130) \end_inset
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8131)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8132)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8133) \end_layout
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8134)
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8135) \end_body
^5b2ee9f (Jonatan Pålsson 2011-03-22 18:37:09 +0100 8136) \end_document
num read blob: 1450
num get patch: 752
num commits: 698