diff --git a/python_client b/python_client index 9a1f1a9..e265120 100755 --- a/python_client +++ b/python_client @@ -11,7 +11,7 @@ s.connect((HOST, PORT)) print "Saying hello to server" s.send( -"Command: hello\n\ +"Server-Command: hello\n\ Content-Type: text\n\ Content-Length: 0\n\ \n\ @@ -27,7 +27,7 @@ print "Data: ", ' '.join(data.split(" ")[1:]) print "Defining a function called myFun" s.send( "Token: %s\n\ -Command: define\n\ +Server-Command: define\n\ Content-Type: text\n\ Content-Length: 49\n\ \n\ @@ -42,7 +42,7 @@ print "Data: ", ' '.join(data.split(" ")[1:]) print "Calling myFun" s.send( "Token: %s\n\ -Command: call\n\ +Server-Command: call\n\ Content-Type: text\n\ Content-Length: 6\n\ \n\ @@ -64,7 +64,7 @@ s.connect((HOST, PORT)) print "Calling myFun" s.send( "Token: %s\n\ -Command: call\n\ +Server-Command: call\n\ Content-Type: text\n\ Content-Length: 6\n\ \n\ diff --git a/src/ggs_coordinator.erl b/src/ggs_coordinator.erl new file mode 100644 index 0000000..e69de29 diff --git a/src/ggs_dispatcher.erl b/src/ggs_dispatcher.erl new file mode 100644 index 0000000..e69de29 diff --git a/src/ggs_gamevm.erl b/src/ggs_gamevm.erl new file mode 100644 index 0000000..e69de29 diff --git a/src/ggs_player.erl b/src/ggs_player.erl new file mode 100644 index 0000000..e69de29 diff --git a/src/ggs_protocol.erl b/src/ggs_protocol.erl deleted file mode 100644 index ede5115..0000000 --- a/src/ggs_protocol.erl +++ /dev/null @@ -1,39 +0,0 @@ --module(ggs_protocol). --export([parse/1]). - -parse(Data) -> - Message =string:tokens(Data, "\n"), - % Turn "A: B" pairs into "{A, B}" tuples, for searching. - MsgKV = lists:map((fun(Str) -> - list_to_tuple(string:tokens(Str, ": ")) end - ), Message), - % Hacky way to build a tuple, filter out not_found later on - Processed = { - case lists:keysearch("Command", 1, MsgKV) of - {value,{_, "define"}} -> - define; - {value,{_, "call"}} -> - call; - {value,{_, "hello"}} -> - hello; - false -> - not_found - end, - case lists:keysearch("Token", 1, MsgKV) of - {value,{_, Value}} -> - Value; - false -> - not_found - end, - case lists:keysearch("Content-Length", 1, MsgKV) of - {value,{_, Value}} -> - {Length, _} = string:to_integer(Value), - [_|Cont] = re:split(Data, "\n\n",[{return,list}]), - Content = string:join(Cont, "\n\n"), - Payload = string:substr(Content,1,Length), - Payload; - false -> - not_found - end - }, - gen_server:cast(ggs_server, Processed). diff --git a/src/ggs_table.erl b/src/ggs_table.erl new file mode 100644 index 0000000..e69de29 diff --git a/src/ggs_app.erl b/src/old/ggs_app.erl similarity index 100% rename from src/ggs_app.erl rename to src/old/ggs_app.erl diff --git a/src/ggs_backup.erl b/src/old/ggs_backup.erl similarity index 100% rename from src/ggs_backup.erl rename to src/old/ggs_backup.erl diff --git a/src/ggs_mnesia_controller_server.erl b/src/old/ggs_mnesia_controller_server.erl similarity index 100% rename from src/ggs_mnesia_controller_server.erl rename to src/old/ggs_mnesia_controller_server.erl diff --git a/src/old/ggs_protocol.erl b/src/old/ggs_protocol.erl new file mode 100644 index 0000000..46c1ba1 --- /dev/null +++ b/src/old/ggs_protocol.erl @@ -0,0 +1,49 @@ +-module(ggs_protocol). +-export([parse/1]). + +parse(Data) -> + Parsed = do_parse(Data, []), + prettify(Parsed). + +do_parse(Data, ParsedMessage) -> + NewLinePos = string:chr(Data, $\n), + Line = string:substr(Data, 1, NewLinePos-1), + Tokens = re:split(Line, ": ", [{return, list}]), + case handle(Tokens) of + {Command, more} -> + do_parse(string:substr(Data, NewLinePos+1), ParsedMessage ++ [Command]); + {separator, data_next} -> + {_, Value} = lists:keyfind(content_len, 1, ParsedMessage), + {ContentLength, []} = string:to_integer(Value), + {ParsedMessage, handle_data(string:substr(Data, NewLinePos+1), ContentLength)} + end. + +handle([[]]) -> + {separator, data_next}; +handle(["Server-Command", Param]) -> + {{srv_cmd, Param}, more}; +handle(["Content-Length", Param]) -> + {{content_len, Param}, more}; +handle(["Token", Param]) -> + {{token, Param}, more}; +handle(["Content-Type", Param]) -> + {{content_type, Param}, more}. + +handle_data(Data, Length) -> + {data, string:substr(Data,1,Length)}. + + +%% Helpers +prettify({Args, Data}) -> + case lists:keyfind(srv_cmd, 1, Args) of + {_, Value} -> + gen_server:cast(ggs_server, {srv_cmd, Value, Args, Data}); + _Other -> + case lists:keyfind(game_cmd, 1, Args) of + {_, Value} -> + gen_server:cast(ggs_server, {game_cmd, Value, Args, Data}); + _ -> + ok + end + end. + diff --git a/src/ggs_server.erl b/src/old/ggs_server.erl similarity index 100% rename from src/ggs_server.erl rename to src/old/ggs_server.erl diff --git a/src/ggs_server_sup.erl b/src/old/ggs_server_sup.erl similarity index 100% rename from src/ggs_server_sup.erl rename to src/old/ggs_server_sup.erl diff --git a/src/ggs_sup.erl b/src/old/ggs_sup.erl similarity index 100% rename from src/ggs_sup.erl rename to src/old/ggs_sup.erl diff --git a/src/old/js_runner.erl b/src/old/js_runner.erl new file mode 100644 index 0000000..ca866c4 --- /dev/null +++ b/src/old/js_runner.erl @@ -0,0 +1,13 @@ +-module(js_runner). +-export([define/2,call/3, boot/0]). + +boot() -> + erlang_js:start(), + {ok, Port} = js_driver:new(), + Port. + +define(Port, Data) -> + ok = js:define(Port, list_to_binary(Data)). + +call(Port, Func, Params) -> + js:call(Port, list_to_binary(Func), Params). diff --git a/src/start_ggs.erl b/src/old/start_ggs.erl similarity index 100% rename from src/start_ggs.erl rename to src/old/start_ggs.erl