From c88dcf782985e2a98c0e1a3e253312afdd74767c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Tue, 25 Jan 2011 13:38:32 +0100 Subject: [PATCH] Initial directory struct + OTP stuffs --- ebin/.GGS.app.swp | Bin 0 -> 12288 bytes ebin/GGS.app | 13 ++++++ erlang_js | 1 + js_runner.erl | 7 +++ js_test.beam | Bin 0 -> 704 bytes js_test.erl | 7 +++ src/.ggs_app.erl.swp | Bin 0 -> 12288 bytes src/.ggs_server.erl.swp | Bin 0 -> 12288 bytes src/.ggs_sup.erl.swp | Bin 0 -> 12288 bytes src/ggs_app.erl | 14 ++++++ src/ggs_server.beam | Bin 0 -> 1592 bytes src/ggs_server.erl | 98 ++++++++++++++++++++++++++++++++++++++++ src/ggs_sup.erl | 20 ++++++++ 13 files changed, 160 insertions(+) create mode 100644 ebin/.GGS.app.swp create mode 100644 ebin/GGS.app create mode 160000 erlang_js create mode 100644 js_runner.erl create mode 100644 js_test.beam create mode 100644 js_test.erl create mode 100644 src/.ggs_app.erl.swp create mode 100644 src/.ggs_server.erl.swp create mode 100644 src/.ggs_sup.erl.swp create mode 100644 src/ggs_app.erl create mode 100644 src/ggs_server.beam create mode 100644 src/ggs_server.erl create mode 100644 src/ggs_sup.erl diff --git a/ebin/.GGS.app.swp b/ebin/.GGS.app.swp new file mode 100644 index 0000000000000000000000000000000000000000..8f4a74ea8b317ff6bc090ae28a1a6718dbbd8f2a GIT binary patch literal 12288 zcmeI&y-vbV6bJBwt3eHJPFGxO`EZcQMU%!vCd5HP4A3K1O53!Bm^9T{AHm7lS1|F7 zOmuYfTqp@~K}O8~CWp)YIz9KdHP9_zoYvK$StV&(ME=`ReP{iNhG#^#z8ABeU(hZ& zi2Vh7^z!{AVd;dULF@;mW8dbIWi?9Nbv*sW>;%Cd(qIb&Ah4{!D8AmW<>{bWDeI$q z#a*>sXfB%t`yl`U2tWV=5P$##AOL|C7Kno!JxKj)*&Xs(pZnEkLv#>;00bZa0SG_< z0uX=z1Rwwb2&|w$$0mB&Ao`ThzyHtP|35Z~-X&foo+Tb7?j%^EDN&OsNPNq=ui5z( zygy2Y00bZa0SG_<0uX=z1Rwx`e=4A)wNsOHpA3E5P)WZZUCCe14b^I=>2yJcuG8zp zj_*Y>Kj6?~*HBSxyH2;A8q-}N_nj!_kR?k?XNg9^Y*FXeZGJr2!r_=hnykr3c50eX zPtJ-VJb_ literal 0 HcmV?d00001 diff --git a/ebin/GGS.app b/ebin/GGS.app new file mode 100644 index 0000000..cafc9df --- /dev/null +++ b/ebin/GGS.app @@ -0,0 +1,13 @@ +{application, ggs, + [{description, "The Generic Game Server"}, + {vsn, "0.1.0"}, + {modules, [ + ggs_app, + ggs_sup, + ggs_server + ]}, + {registered, [ggs_sup]}, + {applications, [kernel, stdlib]}, + {mod, {ggs_app, []}} + ]}. + diff --git a/erlang_js b/erlang_js new file mode 160000 index 0000000..5350ed2 --- /dev/null +++ b/erlang_js @@ -0,0 +1 @@ +Subproject commit 5350ed21606606dbee5ecb07e974f2abb9106270 diff --git a/js_runner.erl b/js_runner.erl new file mode 100644 index 0000000..55cafd5 --- /dev/null +++ b/js_runner.erl @@ -0,0 +1,7 @@ +-module(js_runner). +-export([run/0]). +boot() -> + erlang_js:start(), + {ok, Port} = js_driver:new(), + ok = js:define(Port, <<"function helloworld(name){return 'Hello, ' + name}">>), + js:call(Port, <<"helloworld">>, [<<"Generic Game Server">>]). diff --git a/js_test.beam b/js_test.beam new file mode 100644 index 0000000000000000000000000000000000000000..aadabb39f9d754b390f1092d23010ba8a4135574 GIT binary patch literal 704 zcmYk4J#5oJ6oAh@J82SHtVDpypA4ZQs3J}g0fhx8ts5$Z5>W=2VkfyYc4A*-U)n@s zV`3`|prS4e9lQY&5{L;F)P;=&1|}AUZVcIYXEOB3pWm6PWWDPyjCLzzl!|MND5rf;y+5ID$th74fYiRx21~ zDp<)b7BjwHMHxMdbu7hIb+L#cpk(x_n$;ydQz$4x;SLsbG5rn+bv=#O6yjGv(gY>)O@rfGIe^G)}g{Cw5kA0I62PR7akuvD7-o*1Por^in} zhOfRG;ljQ#PX0NsCeF!2*_C%zuGU|ohuW!1YUlE=J$z}toc?kcjzeSjAbF_&O@0my z5*m-t`x_UYp&D)RnbBR#jQL>ap7h}@bj3EpTY(ojo`PPSd0nVUx6dy9cw1_kUq3m{ z@|xFy%28A=@%lI&Fq?XT6FIOP0eC$mU(esnU*j=}*)HkEn(#}1T7q@LnzJB%q(P literal 0 HcmV?d00001 diff --git a/js_test.erl b/js_test.erl new file mode 100644 index 0000000..23edc49 --- /dev/null +++ b/js_test.erl @@ -0,0 +1,7 @@ +-module(js_test). +-export([run/0]). +run() -> + erlang_js:start(), + {ok, Port} = js_driver:new(), + ok = js:define(Port, <<"function helloworld(name){return 'Hello, ' + name}">>), + js:call(Port, <<"helloworld">>, [<<"Generic Game Server">>]). diff --git a/src/.ggs_app.erl.swp b/src/.ggs_app.erl.swp new file mode 100644 index 0000000000000000000000000000000000000000..1c83d6c0dc6142557b571ab1691fc101cf659e7c GIT binary patch literal 12288 zcmeI&&q~8E90%~so8Uk6q^IaE9dzwB4~oJ-6o%lKF!i9w=+^9yn@dSEQO5M{3wZGr zJgX1lYxoTQ(ses{nL7@@fnSsSl7{4SD@`?Xaa`m(PL5GoVeIWaUwmD7X16Dd-N>#M zCO@HEia^T=bIkB#w4i$=!nT%ydnkS377ArIR5iEJ2rFI?I6`&)uo9*~00L79^mIMF zyU4b4*^GHFxwXmHR?nwe0+S&C0SG_<0uX=z1Rwx`*%r`2f<4g@=Hg>4#dYFW9d}Vd z00Izz00bZa0SG_<0uX=z1RyYj0-jI*{OO}Vu}qt%|No=!|8MGlQG8N-P`ps|De4p@ ziabSxEmAz4 zXUq(UuJ1$*(=nwll#lJ&nsXIRb#pd1CvdaZDTk%2qUqhW cWKUUir@qswdAcRLX5d!(y^gTr+xC?C0aJQz$p8QV literal 0 HcmV?d00001 diff --git a/src/.ggs_server.erl.swp b/src/.ggs_server.erl.swp new file mode 100644 index 0000000000000000000000000000000000000000..5b754bd348fbce3cf172f3d66585f90bb4aa9920 GIT binary patch literal 12288 zcmeI2&5smC7{&_})CEM)yTy<(y=>3NE~3fmF5v7!7MJWg`*Coyc6xhiXPW8h8oFzM zWgI-V2!~ zdEct)4ZW0|pEyllO%D-V&k^$P&C%0WcYi=ClZ2e%zF@L^lk06(6?~I6vig#8m>FYX zS@3Em#|tcT^5je=44h1{7+N6<&aoiP0`CEw=_XnMt-wPnu!kHT8q7+ggNXz5`TcVb zX|J1W1+)TM0j+>mKr5gX&mKr5gX&_5 z1yBG9Z~*KBfA1pXFK`1~1T)|ico~@Bejg#ffp5Uq;4)xf5{!Y}U_1Er8A5&m*T6?$ z4$Oiv&Y51H1t4KSjtLa0R>t46q;U1OMzKcQ$q4;9Os@g%whSk58U_r&0yKAbHiCTNih zYE#GdJh~k43O$p}9!M7nsAzc^vxVL4Cz(w3a*tSkhu3@on|$**ryd9BV59Mx8eLa; z&o*L!D~ttMy}0F-BKvH92dUQQlI@hYxK`R8hgBSo z&Wz{h$MYtY0l|`&H$#oP*CmMseheFrTsfq$u{`izDYkw;vU$?x@*ANpcD5o5jD9)E^CcFrE*ZLeZtft;w9zHX2_~Ep zYs%u+DoZS&e3?eeHl!81z^LF*%?%^jwx$}kqd?$v@XN;0vGEhf=O$;Z>8bpzN{3ce zdwF-L++kYxIL;80Mw(-l9z8uZHa9trQ%0=@+!woD%Hl_sYci#(505RwX*!-E2LNE{L-tykN7lo=;MYx~bOpeRWd*fL%tjLzWUMIn3S z2x{ZXc%es8k#=g+mFtssoKu-0Y-aJHC?7gb)XZTS!4$h72W2eCtu8ZY#@6x`B6GOo zF%;4sQmEr`%|_PlUV4?oP?y{+GFcKm$=8`^W6xxpr&ZJ{&P-X{8d5tUF)-P)j0H(8 zv66kx<+T9EM7*WSnN)b8<}suFy}6VHq3h*sMB2q$AAZDJ97da;&QXq!+39R9+XP1ECT{J{ZGPkW-o;ZO0t7$+1V8`;KmY_l00cl_X$k0bg}tTjFO?^_ zSGS<36&C~z?hH;qC5&Hv*3zJY={lNyWZL+)@x|>c(!%V6NmD!rda_q-8-|{-W{Z4N| zPu<7uz1@yUvr%WKtVOC?AP&MrScU(@PS%=unMy@PO=+iLqSx2CcT$#9p?Ktvql{JF jD!=2F5s#kikYOYa{i9IMlvOouicDoNi-lF*wx^Z9A7sB& literal 0 HcmV?d00001 diff --git a/src/ggs_app.erl b/src/ggs_app.erl new file mode 100644 index 0000000..b3b053f --- /dev/null +++ b/src/ggs_app.erl @@ -0,0 +1,14 @@ +-module(ggs_app). +-behaviour(application). +-export([start/2, stop/1]). + +start(_StartType, _StartArgs) -> + case ggs_sup:start() of + {ok, Pid} -> + {ok, Pid}; + Other -> + {error, Other} + end. + +stop(_State) -> + ok. diff --git a/src/ggs_server.beam b/src/ggs_server.beam new file mode 100644 index 0000000000000000000000000000000000000000..8409427634be1aa67787ada23427a7dd64b938c3 GIT binary patch literal 1592 zcmY*aUuYaf7@yhM`;*Hpo!d#;wAc2wUHhPixwQ$@1Ro}sHrv`ZEk=Aa-MgD6m)z|h zyOXvG(xN`3C=$UItAcs(p)Z9JY(Ye*!BzwXvGl=zMbwH|DI$paqJCd{rFG!PeDi(3 z@9!+L69=AngpjmX-8HsDT(Sl9~^}6cl9x}AYMAMH?jYH;iGlF(%>BC3krdDR6!bWd9YAirum}U*OcHem%Vi02N zhPmKua4iBHfJM1sZ{^hC4&TKLSK2}vL((T~QWENcjZi61mROo^qX!MUO6Vb371Cyt z4yPT%t`T}d*6t`Ax@6eTbGrQKDK^H0JABH`b4Lm$eJ&(3GmbZMfsI~ZPL&Z+W!x=a z5G#Din~=g^^-bUP>4eAp6<_$&=7OHz&FCe={=%c5moKyG$PIV&hAXQsVO7@?s{0FOX=^&@(=WJgHnk|4)fYBbY1RJ#q z%!8_2sA{Onobj?%aC3cmeozWijte=&OvfsYSbgRwKvqqt!Gs#DKDPQ?$~hwE_N+XV6fx4?1(BUV8`HUU$FY{D7BOsjb=AqC{h@XmsoM!uBMA@~_$_8j3c%@l4YC|k_lkQoge<)F^K44TPr|oD z_Ov^=zXr$y7{CCST{+b~qdwD>dtlFXy(u{jWBsYeyfHabdh70P|pu4FHV24j{U+4SS(0W33hd`M75Rm=pU+ z18|`Z`^SYkjE4(#C?nt4*VH(-PbgcYJc-m-lZC|8R43`ONjJH+wJtv~`l~ zi|Sa%-8D_TF0>Od7*`xS))PNktDFZB?0zLai!0RWc8ccm +%%% @copyright 2010 Jonatan Pålsson +%%% @doc RPC over TCP server +%%% @end +%%%---------------------------------------------------- + +-module(ggs_server). +-behaviour(gen_server). + +%% API +-export([start_link/1, + start_link/0, + get_count/0, + stop/0 + ]). + +%% gen_server callbacks +-export([init/1, handle_call/3, handle_cast/2, + handle_info/2, terminate/2, code_change/3]). + + +-define(SERVER, ?MODULE). +-define(DEFAULT_PORT, 1055). + +-record(state, {port, lsock, request_count = 0}). + +%%%==================================================== +%%% API +%%%==================================================== + +%%----------------------------------------------------- +%% @doc Starts the server +%% @end +%%----------------------------------------------------- +start_link(Port) -> + gen_server:start_link({local, ?SERVER}, ?MODULE, [Port], []). + +start_link() -> + start_link(?DEFAULT_PORT). + +%%----------------------------------------------------- +%% @doc Fetches the number of requests made to this server +%% @spec get_count() -> {ok, Count} +%% where +%% Count = integer() +%% @end +%%----------------------------------------------------- +get_count() -> + gen_server:call(?SERVER, get_count). + +%%----------------------------------------------------- +%% @doc Stops the server. +%% @spec stop() -> ok +%% @end +%%----------------------------------------------------- +stop() -> + gen_server:cast(?SERVER, stop). + +%%----------------------------------------------------- +%% gen_server callbacks +%%----------------------------------------------------- + +init([Port]) -> + {ok, LSock} = gen_tcp:listen(Port, [{active, true}]), + {ok, #state{port = Port, lsock = LSock}, 0}. + +handle_call(get_count, _From, State) -> + {reply, {ok, State#state.request_count}, State}. + +handle_cast(stop, State) -> + {stop, normal, State}. + +handle_info({tcp, Socket, RawData}, State) -> + do_JSCall(Socket, RawData), + RequestCount = State#state.request_count, + {noreply, State#state{request_count = RequestCount + 1}}; +handle_info(timeout, #state{lsock = LSock} = State) -> + {ok, _Sock} = gen_tcp:accept(LSock), + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%----------------------------------------------------- +%% Internal functions +%%----------------------------------------------------- + +do_JSCall(Socket, Data) -> + gen_tcp:send(Socket, io_lib:fwrite("~p~n", ["I got a call from j00!"])). + +args_to_terms(RawArgs) -> + {ok, Toks, _Line} = erl_scan:string("[" ++ RawArgs ++ "]. ", 1), + {ok, Args} = erl_parse:parse_term(Toks), + Args. diff --git a/src/ggs_sup.erl b/src/ggs_sup.erl new file mode 100644 index 0000000..0c86250 --- /dev/null +++ b/src/ggs_sup.erl @@ -0,0 +1,20 @@ +-module(ggs_sup). +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). +-define(SERVER, ?MODULE). + +start_link() -> + supervisor:start_link({local, ?SERVER}, ?MODULE, []). + +init([]) -> + Server = {ggs_server, {ggs_server, start_link, []}, + permanent, 2000, worker, [ggs_server]}, + Children = [Server], + RestartStrategy = {one_for_one, 0, 1}, + {ok, {RestartStrategy, Children}}. +