8139 lines
644 KiB
Text
8139 lines
644 KiB
Text
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 Oracle’s
|
||
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 isn’t 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-Webster’s 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
|