Merge branch 'rewrite' of github.com:jeena/GGS into kallfaktorn
Saved head Conflicts: src/old/ggs_server.erl src/old/js_runner.erl
This commit is contained in:
commit
f485efadcf
16 changed files with 66 additions and 43 deletions
|
@ -11,7 +11,7 @@ s.connect((HOST, PORT))
|
||||||
|
|
||||||
print "Saying hello to server"
|
print "Saying hello to server"
|
||||||
s.send(
|
s.send(
|
||||||
"Command: hello\n\
|
"Server-Command: hello\n\
|
||||||
Content-Type: text\n\
|
Content-Type: text\n\
|
||||||
Content-Length: 0\n\
|
Content-Length: 0\n\
|
||||||
\n\
|
\n\
|
||||||
|
@ -27,7 +27,7 @@ print "Data: ", ' '.join(data.split(" ")[1:])
|
||||||
print "Defining a function called myFun"
|
print "Defining a function called myFun"
|
||||||
s.send(
|
s.send(
|
||||||
"Token: %s\n\
|
"Token: %s\n\
|
||||||
Command: define\n\
|
Server-Command: define\n\
|
||||||
Content-Type: text\n\
|
Content-Type: text\n\
|
||||||
Content-Length: 49\n\
|
Content-Length: 49\n\
|
||||||
\n\
|
\n\
|
||||||
|
@ -42,7 +42,7 @@ print "Data: ", ' '.join(data.split(" ")[1:])
|
||||||
print "Calling myFun"
|
print "Calling myFun"
|
||||||
s.send(
|
s.send(
|
||||||
"Token: %s\n\
|
"Token: %s\n\
|
||||||
Command: call\n\
|
Server-Command: call\n\
|
||||||
Content-Type: text\n\
|
Content-Type: text\n\
|
||||||
Content-Length: 6\n\
|
Content-Length: 6\n\
|
||||||
\n\
|
\n\
|
||||||
|
@ -64,7 +64,7 @@ s.connect((HOST, PORT))
|
||||||
print "Calling myFun"
|
print "Calling myFun"
|
||||||
s.send(
|
s.send(
|
||||||
"Token: %s\n\
|
"Token: %s\n\
|
||||||
Command: call\n\
|
Server-Command: call\n\
|
||||||
Content-Type: text\n\
|
Content-Type: text\n\
|
||||||
Content-Length: 6\n\
|
Content-Length: 6\n\
|
||||||
\n\
|
\n\
|
||||||
|
|
0
src/ggs_coordinator.erl
Normal file
0
src/ggs_coordinator.erl
Normal file
0
src/ggs_dispatcher.erl
Normal file
0
src/ggs_dispatcher.erl
Normal file
0
src/ggs_gamevm.erl
Normal file
0
src/ggs_gamevm.erl
Normal file
0
src/ggs_player.erl
Normal file
0
src/ggs_player.erl
Normal file
|
@ -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).
|
|
0
src/ggs_table.erl
Normal file
0
src/ggs_table.erl
Normal file
49
src/old/ggs_protocol.erl
Normal file
49
src/old/ggs_protocol.erl
Normal file
|
@ -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.
|
||||||
|
|
13
src/old/js_runner.erl
Normal file
13
src/old/js_runner.erl
Normal file
|
@ -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).
|
Reference in a new issue