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