Repository URL to install this package:
|
Version:
2.5.0 ▾
|
]q (cpygments.token
_TokenType
qX Punctuationq
q
qq}q(X subtypesqcbuiltins
set
q]q hhX Indicatorq
q
qq
}q(hh]q
qRqX parentqhuba
qRqhh)
qq}q(hh]q(hX Escapeq
q
qq}q(hh]q
qRq hhubhX Operatorq!
q"
q#q$}q%(hh]q&(hh!X DBSq'q(
q)q*}q+(hh]q,
q-Rq.hh$ubhh!X Wordq/q0
q1q2}q3(hh]q4
q5Rq6hh$ube
q7Rq8hhh/h2h'h*ubhX Nameq9
q:
q;q<}q=(hh]q>(hh9X Tagq?q@
qAqB}qC(hh]qD
qERqFhh<ubhh9X EntityqGqH
qIqJ}qK(hh]qLhh9hGh'qM
qNqO}qP(hh]qQ
qRRqShhJuba
qTRqUhh<h'hOubhh9X ExceptionqVqW
qXqY}qZ(hh]q[
q\Rq]hh<ubhh9X Decoratorq^q_
q`qa}qb(hh]qc
qdRqehh<ubhh9X Classqfqg
qhqi}qj(hh]qk(hh9hfh'ql
qmqn}qo(hh]qp
qqRqrhhiubhh9hfX Startqsqt
quqv}qw(hh]qx
qyRqzhhiube
q{Rq|hh<hshvh'hnubhh9X Variableq}q~
qq}q(hh]q(hh9h}X Anonymousqq
q
q}q(hh]q
qRqhhubhh9h}hfq
qq}q(hh]q
qRqhhubhh9h}X Magicqq
qq}q(hh]q
qRqhhubhh9h}X Globalqq
qq}q(hh]q
q Rq¡hhubhh9h}X Instanceq¢q£
q¤q¥}q¦(hh]q§
q¨Rq©hhube
qªRq«hh<hfhhhh¢h¥hhhhubhh9X Attributeq¬q
q®q¯}q°(hh]q±hh9h¬h}q²
q³q´}qµ(hh]q¶
q·Rq¸hh¯uba
q¹Rqºhh<h}h´ubhh9X Namespaceq»q¼
q½q¾}q¿(hh]qqÁRqÂhh<ubhh9X PropertyqÆqąqŁqÆ}qÇ(hh]qȅqÉRqÊhh<ubhh9X Symbolqˆq̅q́qÎ}qÏ(hh]qЅqÑRqÒhh<ubhh9X ClassesqӆqԅqՁqÖ}q×(hh]qqÙRqÚhh<ubhh9X Pseudoqۆq܅q݁qÞ}qß(hh]qà
qáRqâhh<ubhh9X Labelqãqä
qåqæ}qç(hh]qè
qéRqêhh<ubhh9h!që
qìqí}qî(hh]qï
qðRqñhh<ubhh9X Builtinqòqó
qôqõ}qö(hh]q÷(hh9hòhۇqø
qùqú}qû(hh]qü
qýRqþhhõubhh9hòX Typeqÿr
r r }r (hh]r
r Rr hhõube
r Rr hh<hÛhúhÿj ubhh9X Fieldr r
r r }r
(hh]r
r Rr hh<ubhh9X Otherr r
r r }r (hh]r hh9j X Memberr r
r r }r (hh]r
r Rr hj uba
r Rr hh<j j ubhh9X Functionr! r"
r# r$ }r% (hh]r& hh9j! hr'
r( r) }r* (hh]r+
r, Rr- hj$ uba
r. Rr/ hh<hj) ubhh9hÿr0
r1 r2 }r3 (hh]r4
r5 Rr6 hh<ubhh9X Constantr7 r8
r9 r: }r; (hh]r<
r= Rr> hh<ube
r? Rr@ hhh¬h¯hòhõhfhij7 j: h^hahGhJhVhYj! j$ hÃhÆhãhæh»h¾j j h?hBh}hj j hËhÎhÛhÞh!híhÓhÖhÿj2 ubhX LiteralrA
rB
rC rD }rE (hh]rF (hjA j rG
rH rI }rJ (hh]rK
rL RrM hjD ubhjA X CharrN rO
rP rQ }rR (hh]rS
rT RrU hjD ubhjA X DaterV rW
rX rY }rZ (hh]r[
r\ Rr] hjD ubhjA X Scalarr^ r_
r` ra }rb (hh]rc hjA j^ X Plainrd re
rf rg }rh (hh]ri
rj Rrk hja uba
rl Rrm hjD jd jg ubhjA X Stringrn ro
rp rq }rr (hh]rs (hjA jn X Interpolrt ru
rv rw }rx (hh]ry
rz Rr{ hjq ubhjA jn X Delimeterr| r}
r~ r }r (hh]r
r Rr hjq ubhjA jn jN r
r
r }r (hh]r
r Rr hjq ubhjA jn hˇr
r r }r (hh]r
r Rr hjq ubhjA jn X Singler r
r r }r (hh]r
r Rr hjq ubhjA jn j r
r r }r (hh]r
r Rr hjq ubhjA jn X Backtickr¡ r¢
r£ r¤ }r¥ (hh]r¦
r§ Rr¨ hjq ubhjA jn hr©
rª r« }r¬ (hh]r
r® Rr¯ hjq ubhjA jn X Regexr° r±
r² r³ }r´ (hh]rµ
r¶ Rr· hjq ubhjA jn X Momentr¸ r¹
rº r» }r¼ (hh]r½
r¾ Rr¿ hjq ubhjA jn X BooleanrÀ rÁ
r rà }rÄ (hh]rÅ
rÆ RrÇ hjq ubhjA jn X CharacterrÈ rÉ
rÊ rË }rÌ (hh]rÍ
rÎ RrÏ hjq ubhjA jn X DelimiterrÐ rÑ
rÒ rÓ }rÔ (hh]rÕ
rÖ Rr× hjq ubhjA jn X DocrØ rÙ
rÚ rÛ }rÜ (hh]rÝ
rÞ Rrß hjq ubhjA jn h9rà
rá râ }rã (hh]rä
rå Rræ hjq ubhjA jn X Affixrç rè
ré rê }rë (hh]rì
rí Rrî hjq ubhjA jn X Heredocrï rð
rñ rò }ró (hh]rô
rõ Rrö hjq ubhjA jn X Doubler÷ rø
rù rú }rû (hh]rü
rý Rrþ hjq ubhjA jn X Interprÿ r
r r }r (hh]r
r Rr hjq ubhjA jn X Atomr r
r r
}r (hh]r
r
Rr hjq ube
r Rr hjD jç jê j¡ j¤ jN j jÐ jÓ jØ jÛ j÷ jú hj« jï jò jt jw j j j° j³ j j hËj jÈ jË j¸ j» jÿ j jÀ jà j| j j j
h9jâ ubhjA X Numberr r
r r }r (hh]r (hjA j X Floatr r
r r }r (hh]r
r Rr hj ubhjA j X Decr r
r! r" }r# (hh]r$
r% Rr& hj ubhjA j X Radixr' r(
r) r* }r+ (hh]r,
r- Rr. hj ubhjA j X Octr/ r0
r1 r2 }r3 (hh]r4
r5 Rr6 hj ubhjA j X Binr7 r8
r9 r: }r; (hh]r<
r= Rr> hj ubhjA j h¬r?
r@ rA }rB (hh]rC
rD RrE hj ubhjA j X HexrF rG
rH rI }rJ (hh]rK
rL RrM hj ubhjA j X IntegerrN rO
rP rQ }rR (hh]rS h(jA j jN X LongrT trU
rV rW }rX (hh]rY
rZ Rr[ hjQ uba
r\ Rr] hj jT jW ubhjA j X Decimalr^ r_
r` ra }rb (hh]rc
rd Rre hj ube
rf Rrg hjD j7 j: j j jF jI jN jQ j/ j2 j' j* h¬jA j^ ja j j" ube
rh Rri hhjn jq j j jV jY j^ ja j jI jN jQ ubhX Genericrj
rk
rl rm }rn (hh]ro (hjj X Errorrp rq
rr rs }rt (hh]ru
rv Rrw hjm ubhjj X
Subheadingrx ry
rz r{ }r| (hh]r}
r~ Rr hjm ubhjj X Tracebackr r
r r }r (hh]r
r Rr hjm ubhjj X Outputr r
r r }r (hh]r
r Rr hjm ubhjj X Promptr r
r r }r (hh]r
r Rr hjm ubhjj X Deletedr r
r r }r (hh]r
r Rr hjm ubhjj X Insertedr r¡
r¢ r£ }r¤ (hh]r¥
r¦ Rr§ hjm ubhjj X Headingr¨ r©
rª r« }r¬ (hh]r
r® Rr¯ hjm ubhjj X Strongr° r±
r² r³ }r´ (hh]rµ
r¶ Rr· hjm ubhjj X Emphr¸ r¹
rº r» }r¼ (hh]r½
r¾ Rr¿ hjm ube
rÀ RrÁ hhj j j¸ j» jp js j¨ j« j j£ j j j j j° j³ jx j{ j j ubhjp
rÂ
rà rÄ }rÅ (hh]rÆ
rÇ RrÈ hhubhX KeywordrÉ
rÊ
rË rÌ }rÍ (hh]rÎ (hjÉ h/rÏ
rÐ rÑ }rÒ (hh]rÓ
rÔ RrÕ hjÌ ubhjÉ jÉ rÖ
r× rØ }rÙ (hh]rÚ
rÛ RrÜ hjÌ ubhjÉ hÿrÝ
rÞ rß }rà (hh]rá
râ Rrã hjÌ ubhjÉ X PreProcrä rå
ræ rç }rè (hh]ré
rê Rrë hjÌ ubhjÉ X Controlrì rí
rî rï }rð (hh]rñ
rò Rró hjÌ ubhjÉ j7 rô
rõ rö }r÷ (hh]rø
rù Rrú hjÌ ubhjÉ h»rû
rü rý }rþ (hh]rÿ
r Rr hjÌ ubhjÉ hۆr
r r }r (hh]r
r Rr hjÌ ubhjÉ X Declarationr r
r r }r
(hh]r
r Rr hjÌ ubhjÉ X Reservedr r
r r }r (hh]r
r Rr hjÌ ube
r Rr hhj7 jö j j h»jý hÛj j j hÿjß jì jï jÉ jØ jä jç h/jÑ ubhj
r
r r }r (hh]r
r Rr! hhubhX Textr"
r#
r$ r% }r& (hh]r' (hj" X Rootr( r)
r* r+ }r, (hh]r-
r. Rr/ hj% ubhj" hˆr0
r1 r2 }r3 (hh]r4
r5 Rr6 hj% ubhj" X Ragr7 r8
r9 r: }r; (hh]r<
r= Rr> hj% ubhj" X
Whitespacer? r@
rA rB }rC (hh]rD
rE RrF hj% ubhj" X BeerrG rH
rI rJ }rK (hh]rL
rM RrN hj% ubhj" hrO
rP rQ }rR (hh]rS
rT RrU hj% ube
rV RrW hhj? jB hËj2 hjQ j( j+ jG jJ j7 j: ubhX CommentrX
rY
rZ r[ }r\ (hh]r] (hjX X Preprocr^ r_
r` ra }rb (hh]rc
rd Rre hj[ ubhjX X Multirf rg
rh ri }rj (hh]rk
rl Rrm hj[ ubhjX X Hashbangrn ro
rp rq }rr (hh]rs
rt Rru hj[ ubhjX j rv
rw rx }ry (hh]rz
r{ Rr| hj[ ubhjX X
SingleLiner} r~
r r }r (hh]r
r Rr hj[ ubhjX jØ r
r r }r (hh]r
r Rr hj[ ubhjX X Directiver r
r r }r (hh]r
r Rr hj[ ubhjX X Multiliner r
r r }r (hh]r
r Rr hj[ ubhjX X
Singleliner r
r r }r (hh]r¡
r¢ Rr£ hj[ ubhjX X PreprocFiler¤ r¥
r¦ r§ }r¨ (hh]r©
rª Rr« hj[ ubhjX X Specialr¬ r
r® r¯ }r° (hh]r±
r² Rr³ hj[ ube
r´ Rrµ hhjn jq j j j^ ja j¤ j§ j jx j¬ j¯ j j j} j jØ j jf ji j j ubhe
r¶ Rr· j" j% hhjp jÄ j j jÉ jÌ h9h<jA jD hhh!h$jX j[ jj jm X Tokenr¸ hjn jq j j ubh
h
ubX -r¹ rº hJX moduler» r¼ hX (r½ r¾ h<X testr¿ rÀ hX )rÁ r hX .rà rÄ j% X
rÅ rÆ hj¹ rÇ hJX exportrÈ rÉ hj½ rÊ hX [rË rÌ h<X listenrÍ rÎ h$X /rÏ rÐ jQ X 1rÑ rÒ hX ,rÓ rÔ j% X
rÕ rÖ h<X
handle_clientr× rØ h$jÏ rÙ jQ jÑ rÚ hjÓ rÛ j% X
rÜ rÝ h<X maintain_clientsrÞ rß h$jÏ rà jQ jÑ rá hjÓ râ j% X
rã rä h<X startrå ræ h$jÏ rç jQ jÑ rè hjÓ ré j% X
rê rë h<X stoprì rí h$jÏ rî jQ X 0rï rð hjÓ rñ j% X
rò ró h<X
controllerrô rõ h$jÏ rö jQ jÑ r÷ hX ]rø rù hjÁ rú hjà rû j% X
rü rý hj¹ rþ hJX authorrÿ r hj½ r jq X "r r jq X jerithr r jq j r hjÁ r hjà r j% X
r r
hj¹ r hJX definer r
hj½ r j: X TCP_OPTIONSr r hjÓ r hjË r h<X listr r hjÓ r j% X r r hX {r r h<X packetr r hjÓ r j% j r jQ jï r hX }r r hjÓ r! j% j r" hj r# h<X activer$ r% hjÓ r& j% j r' h<X falser( r) hj r* hjÓ r+ j% j r, hj r- h<X reuseaddrr. r/ hjÓ r0 j% j r1 h<X truer2 r3 hj r4 hjø r5 hjÁ r6 hjà r7 j% X
r8 r9 hj¹ r: hJX recordr; r< hj½ r= hæX playerr> r? hjÓ r@ j% j rA hj rB h<X namerC rD h$X =rE rF h<X nonerG rH hjÓ rI j% j rJ h<X socketrK rL hjÓ rM j% j rN h<X moderO rP hj rQ hjÁ rR hjà rS j% X
rT rU j[ XC %% To allow incoming connections, we need to listen on a TCP port.
rV rW j[ XA %% This is also the entry point for our server as a whole, so it
rX rY j[ XE %% starts the client_manager process and gives it a name so the rest
rZ r[ j[ X% %% of the code can get to it easily.
r\ r] j% jÅ r^ j$ X listenr_ r` hj½ ra hX Portrb rc hjÁ rd j% j re h$j¹ rf h$X >rg rh j% X
ri rj hj rk h<X okrl rm hjÓ rn j% j ro hX LSocketrp rq hj rr j% j rs h$jE rt j% j ru h¾X gen_tcprv rw hX :rx ry j$ X listenrz r{ hj½ r| hX Portr} r~ hjÓ r j% j r h$X ?r r hX TCP_OPTIONSr r hjÁ r
hjÓ r j% X
r r hõX registerr r hj½ r h<X client_managerr r hjÓ r j% j r hõX spawnr r hj½ r h$j r hX MODULEr r hjÓ r j% j r h<X maintain_clientsr r hjÓ r j% j r hjË r hjË r hjø r hjø r hjÁ r hjÁ r¡ hjÓ r¢ j% X
r£ r¤ h<X do_acceptr¥ r¦ hj½ r§ hX LSocketr¨ r© hjÁ rª hjà r« j% X
r¬ r j[ X@ %% Accepting a connection gives us a connection socket with the
r® r¯ j[ XE %% newly-connected client on the other end. Since we want to accept
r° r± j[ XG %% more than one client, we spawn a new process for each and then wait
r² r³ j[ X3 %% for another connection on our listening socket.
r´ rµ j% jÅ r¶ j$ X do_acceptr· r¸ hj½ r¹ hX LSocketrº r» hjÁ r¼ j% j r½ h$j¹ r¾ h$jg r¿ j% X
rÀ rÁ jÌ X caser rà j% j rÄ h¾X gen_tcprÅ rÆ hjx rÇ j$ X acceptrÈ rÉ hj½ rÊ hX LSocketrË rÌ hjÁ rÍ j% j rÎ jÌ X ofrÏ rÐ j% X
rÑ rÒ hj rÓ h<X okrÔ rÕ hjÓ rÖ j% j r× hX SocketrØ rÙ hj rÚ j% j rÛ h$j¹ rÜ h$jg rÝ j% X
rÞ rß hõX spawnrà rá hj½ râ h$j rã hX MODULErä rå hjÓ ræ j% j rç h<X
handle_clientrè ré hjÓ rê j% j rë hjË rì hX Socketrí rî hjø rï hjÁ rð hjÓ rñ j% X
rò ró h<X client_managerrô rõ j% j rö h$X !r÷ rø j% j rù hj rú h<X connectrû rü hjÓ rý j% j rþ hX Socketrÿ r hj r hX ;r r j% X
r r hj r h<X errorr r hjÓ r j% j r
hX Reasonr r hj r
j% j r h$j¹ r h$jg r j% X
r r h¾X ior r hjx r j$ X formatr r hj½ r jq j r jq X Socket accept error: r r jw X ~sr r jw X ~nr r jq j r hjÓ r! j% j r" hjË r# hX Reasonr$ r% hjø r& hjÁ r' j% X
r( r) jÌ X endr* r+ hjÓ r, j% X
r- r. h<X do_acceptr/ r0 hj½ r1 hX LSocketr2 r3 hjÁ r4 hjà r5 j% X
r6 r7 j[ XB %% All the client-socket process needs to do is wait for data and
r8 r9 j[ XE %% forward it to the client_manager process which decides what to do
r: r; j[ XG %% with it. If the client disconnects, we let client_manager know and
r< r= j[ X %% then quietly go away.
r> r? j% jÅ r@ j$ X
handle_clientrA rB hj½ rC hX SocketrD rE hjÁ rF j% j rG h$j¹ rH h$jg rI j% X
rJ rK jÌ X caserL rM j% j rN h¾X gen_tcprO rP hjx rQ j$ X recvrR rS hj½ rT hX SocketrU rV hjÓ rW j% j rX jQ jï rY hjÁ rZ j% j r[ jÌ X ofr\ r] j% X
r^ r_ hj r` h<X okra rb hjÓ rc j% j rd hX Datare rf hj rg j% j rh h$j¹ ri h$jg rj j% X
rk rl h<X client_managerrm rn j% j ro h$j÷ rp j% j rq hj rr h<X datars rt hjÓ ru j% j rv hX Socketrw rx hjÓ ry j% j rz hX Datar{ r| hj r} hjÓ r~ j% X
r r h<X
handle_clientr r hj½ r hX Socketr r
hjÁ r hj r j% X
r r hj r h<X errorr r hjÓ r j% j r h<X closedr r hj r j% j r h$j¹ r h$jg r j% X
r r h<X client_managerr r j% j r h$j÷ r j% j r hj r h<X
disconnectr r hjÓ r j% j r hX Socketr¡ r¢ hj r£ j% X
r¤ r¥ jÌ X endr¦ r§ hjà r¨ j% X
r© rª j[ XF %% This is the main loop of the client_manager process. It maintains
r« r¬ j[ XA %% the list of "players" and calls the handler for client input.
r r® j% jÅ r¯ j$ X maintain_clientsr° r± hj½ r² hX Playersr³ r´ hjÁ rµ j% j r¶ h$j¹ r· h$jg r¸ j% X
r¹ rº h¾X ior» r¼ hjx r½ j$ X formatr¾ r¿ hj½ rÀ jq j rÁ jq X Players:r rà jw X ~nrÄ rÅ jq j rÆ hjÓ rÇ j% j rÈ hjË rÉ hjø rÊ hjÁ rË hjÓ rÌ j% X
rÍ rÎ h¾X listsrÏ rÐ hjx rÑ j$ X foreachrÒ rÓ hj½ rÔ jÌ X funrÕ rÖ hj½ r× hX PrØ rÙ hjÁ rÚ j% j rÛ h$j¹ rÜ h$jg rÝ j% j rÞ h¾X iorß rà hjx rá j$ X formatrâ rã hj½ rä jq j rå jq X >>> ræ rç jw X ~wrè ré jw X ~nrê rë jq j rì hjÓ rí j% j rî hjË rï hjØ rð hjø rñ hjÁ rò j% j ró jÌ X endrô rõ hjÓ rö j% j r÷ hX Playersrø rù hjÁ rú hjÓ rû j% X
rü rý jÌ X receiverþ rÿ j% X
r r hj r h<X connectr r hjÓ r j% j r hX Socketr r hj r j% j r
h$j¹ r h$jg r j% X
r
r hX Playerr r j% j r h$jE r j% j r hæX #playerr r hj r h<X socketr r h$jE r hX Socketr r hjÓ r j% j r h<X moder r h$jE r h<X connectr! r" hj r# hjÓ r$ j% X
r% r& h<X send_promptr' r( hj½ r) hX Playerr* r+ hjÁ r, hjÓ r- j% X
r. r/ h¾X ior0 r1 hjx r2 j$ X formatr3 r4 hj½ r5 jq j r6 jq X client connected: r7 r8 jw X ~wr9 r: jw X ~nr; r< jq j r= hjÓ r> j% j r? hjË r@ hX PlayerrA rB hjø rC hjÁ rD hjÓ rE j% X
rF rG hX
NewPlayersrH rI j% j rJ h$jE rK j% X rL rM hjË rN hX PlayerrO rP j% j rQ hX |rR rS j% j rT hX PlayersrU rV hjø rW hj rX j% X
rY rZ hj r[ h<X
disconnectr\ r] hjÓ r^ j% j r_ hX Socketr` ra hj rb j% j rc h$j¹ rd h$jg re j% X
rf rg hX Playerrh ri j% j rj h$jE rk j% j rl h<X find_playerrm rn hj½ ro hX Socketrp rq hjÓ rr j% j rs hX Playersrt ru hjÁ rv hjÓ rw j% X
rx ry h¾X iorz r{ hjx r| j$ X formatr} r~ hj½ r jq j r jq X client disconnected: r r jw X ~wr r jw X ~nr
r jq j r hjÓ r j% j r hjË r hX Playerr r hjø r hjÁ r hjÓ r j% X
r r hX
NewPlayersr r j% j r h$jE r j% j r h¾X listsr r hjx r j$ X deleter r hj½ r hX Playerr r hjÓ r j% j r hX Playersr¡ r¢ hjÁ r£ hj r¤ j% X
r¥ r¦ hj r§ h<X datar¨ r© hjÓ rª j% j r« hX Socketr¬ r hjÓ r® j% j r¯ hX Datar° r± hj r² j% j r³ h$j¹ r´ h$jg rµ j% X
r¶ r· hX Playerr¸ r¹ j% j rº h$jE r» j% j r¼ h<X find_playerr½ r¾ hj½ r¿ hX SocketrÀ rÁ hjÓ r j% j rà hX PlayersrÄ rÅ hjÁ rÆ hjÓ rÇ j% X
rÈ rÉ hX
NewPlayersrÊ rË j% j rÌ h$jE rÍ j% j rÎ h<X
parse_datarÏ rÐ hj½ rÑ hX PlayerrÒ rÓ hjÓ rÔ j% j rÕ hX PlayersrÖ r× hjÓ rØ j% j rÙ hX DatarÚ rÛ hjÁ rÜ hjÓ rÝ j% X
rÞ rß hX NewPlayerrà rá j% j râ h$jE rã j% j rä h<X find_playerrå ræ hj½ rç hX Socketrè ré hjÓ rê j% j rë hX
NewPlayersrì rí hjÁ rî hjÓ rï j% X
rð rñ h<X send_promptrò ró hj½ rô hX NewPlayerrõ rö hjÁ r÷ j% X
rø rù jÌ X endrú rû hjÓ rü j% X
rý rþ h<X maintain_clientsrÿ r hj½ r hX
NewPlayersr r hjÁ r hjà r j% X
r r j[ XG %% find_player is a utility function to get a player record associated
r r j[ X4 %% with a particular socket out of the player list.
r
r j% jÅ r j$ X find_playerr
r hj½ r hX Socketr r hjÓ r j% j r hX Playersr r hjÁ r j% j r h$j¹ r h$jg r j% X
r r hj r h<X valuer r hjÓ r j% j r hX Playerr! r" hj r# j% j r$ h$jE r% j% j r& h¾X listsr' r( hjx r) j$ X keysearchr* r+ hj½ r, hX Socketr- r. hjÓ r/ j% j r0 hæX #player.socketr1 r2 hjÓ r3 j% j r4 hX Playersr5 r6 hjÁ r7 hjÓ r8 j% X
r9 r: hX Playerr; r< hjà r= j% X
r> r? j[ XG %% delete_player returns the player list without the given player. It
r@ rA j[ XD %% deletes the player from the list based on the socket rather than
rB rC j[ XE %% the whole record because the list might hold a different version.
rD rE j% jÅ rF j$ X
delete_playerrG rH hj½ rI hX PlayerrJ rK hjÓ rL j% j rM hX PlayersrN rO hjÁ rP j% j rQ h$j¹ rR h$jg rS j% X
rT rU h¾X listsrV rW hjx rX j$ X keydeleterY rZ hj½ r[ hX Playerr\ r] hæX #player.socketr^ r_ hjÓ r` j% j ra hæX #player.socketrb rc hjÓ rd j% j re hX Playersrf rg hjÁ rh hjà ri j% X
rj rk j[ XB %% Sends an appropriate prompt to the player. Currently the only
rl rm j[ XD %% prompt we send is the initial "Name: " when the player connects.
rn ro j% jÅ rp j$ X send_promptrq rr hj½ rs hX Playerrt ru hjÁ rv j% j rw h$j¹ rx h$jg ry j% X
rz r{ jÌ X caser| r} j% j r~ hX Playerr r hæX #player.moder r j% j r jÌ X ofr r
j% X
r r h<X connectr r j% j r h$j¹ r h$jg r j% X
r r h¾X gen_tcpr r hjx r hõX sendr r hj½ r hX Playerr r hæX #player.socketr r hjÓ r j% j r jq j r jq X Name: r r jq j r hjÁ r hj r j% X
r¡ r¢ h<X activer£ r¤ j% j r¥ h$j¹ r¦ h$jg r§ j% X
r¨ r© h<X okrª r« j% X
r¬ r jÌ X endr® r¯ hjà r° j% X
r± r² j[ X7 %% Sends the given data to all players in active mode.
r³ r´ j% jÅ rµ j$ X send_to_activer¶ r· hj½ r¸ hX Prefixr¹ rº hjÓ r» j% j r¼ hX Playersr½ r¾ hjÓ r¿ j% j rÀ hX DatarÁ r hjÁ rà j% j rÄ h$j¹ rÅ h$jg rÆ j% X
rÇ rÈ hX
ActivePlayersrÉ rÊ j% j rË h$jE rÌ j% j rÍ h¾X listsrÎ rÏ hjx rÐ j$ X filterrÑ rÒ hj½ rÓ jÌ X funrÔ rÕ hj½ rÖ hjØ r× hjÁ rØ j% j rÙ h$j¹ rÚ h$jg rÛ j% j rÜ hjØ rÝ hæX #player.moderÞ rß j% j rà h$X ==rá râ j% j rã h<X activerä rå j% j ræ jÌ X endrç rè hjÓ ré j% X"
rê rë hX Playersrì rí hjÁ rî hjÓ rï j% X
rð rñ h¾X listsrò ró hjx rô j$ X foreachrõ rö hj½ r÷ jÌ X funrø rù hj½ rú hjØ rû hjÁ rü j% j rý h$j¹ rþ h$jg rÿ j% j r h¾X gen_tcpr r hjx r hõX sendr r hj½ r hjØ r hæX #player.socketr r hjÓ r
j% j r hX Prefixr r
j% j r h$X ++r r j% j r hX Datar r hjÁ r j% j r jÌ X endr r hjÓ r j% X
r r hX
ActivePlayersr r hjÁ r hjÓ r j% X
r r h<X okr! r" hjà r# j% X
r$ r% j[ XE %% We don't really do much parsing, but that will probably change as
r& r' j[ XF %% more features are added. Currently this handles naming the player
r( r) j[ XE %% when he first connects and treats everything else as a message to
r* r+ j[ X %% send.
r, r- j% jÅ r. j$ X
parse_datar/ r0 hj½ r1 hX Playerr2 r3 hjÓ r4 j% j r5 hX Playersr6 r7 hjÓ r8 j% j r9 hX Datar: r; hjÁ r< j% j r= h$j¹ r> h$jg r? j% X
r@ rA jÌ X caserB rC j% j rD hX PlayerrE rF hæX #player.moderG rH j% j rI jÌ X ofrJ rK j% X
rL rM h<X activerN rO j% j rP h$j¹ rQ h$jg rR j% X
rS rT h<X send_to_activerU rV hj½ rW hX PlayerrX rY hæX #player.namerZ r[ j% j r\ h$X ++r] r^ j% j r_ jq j r` jq X : ra rb jq j rc hjÓ rd j% X
re rf h<X
delete_playerrg rh hj½ ri hX Playerrj rk hjÓ rl j% j rm hX Playersrn ro hjÁ rp hjÓ rq j% j rr hX Datars rt hjÁ ru hjÓ rv j% X
rw rx hX Playersry rz hj r{ j% X
r| r} h<X connectr~ r j% j r h$j¹ r h$jg r j% X
r r hX UPlayerr
r j% j r h$jE r j% j r hX Playerr r hæX #playerr r hj r h<X namer r h$jE r h<X bogostripr r hj½ r hX Datar r hjÁ r hjÓ r j% j r h<X moder r h$jE r h<X activer r hj r hjÓ r j% X
r¡ r¢ hjË r£ hX UPlayerr¤ r¥ j% j r¦ hjR r§ j% j r¨ h<X
delete_playerr© rª hj½ r« hX Playerr¬ r hjÓ r® j% j r¯ hX Playersr° r± hjÁ r² hjø r³ j% X
r´ rµ jÌ X endr¶ r· hjà r¸ j% X
r¹ rº j[ XD %% Utility methods to clean up the name before we apply it. Called
r» r¼ j[ XG %% bogostrip rather than strip because it returns the first continuous
r½ r¾ j[ X>