Просмотр исходного кода

bert endpoint now merged with N2O

Maxim Sokhatsky 11 лет назад
Родитель
Сommit
f96e683b3e

+ 4 - 0
apps/face/src/index.erl

@@ -81,6 +81,10 @@ event(discard) ->
     {_, {C, V}} = lists:keyfind(erlang:list_to_binary(wf:q(dddiscard)), 1, TilesList),
     wf:wire(discard("1000001", erlang:integer_to_list(C), erlang:integer_to_list(V)));
 
+event({client,Message}) ->
+    GamePid = get(game_session),
+    game_session:process_request(GamePid, Message);
+
 event({server, {game_event, _, okey_game_started, Args}}) ->
     {_, Tiles} = lists:keyfind(tiles, 1, Args),
     TilesList = [{erlang:list_to_binary([erlang:integer_to_list(C), " ", erlang:integer_to_list(V)]), {C, V}} || {_, C, V} <- Tiles],

+ 0 - 111
apps/face/src/n2o_game.erl

@@ -1,111 +0,0 @@
--module(n2o_game).
--author('Maxim Sokhatsky').
--include_lib("n2o/include/wf.hrl").
--include("../../server/include/requests.hrl").
--include("../../server/include/game_okey.hrl").
--include("../../server/include/game_tavla.hrl").
-
--export([init/4]).
--export([stream/3]).
--export([info/3]).
--export([terminate/2]).
-
-% process spawn
-
-init(_Transport, Req, _Opts, _Active) ->
-    put(actions,[]),
-    Ctx = wf_context:init_context(Req),
-    NewCtx = wf_core:fold(init,Ctx#context.handlers,Ctx),
-    wf_context:context(NewCtx),
-    Res = ets:update_counter(globals,onlineusers,{2,1}),
-    wf:reg(broadcast,wf:peer(Req)),
-    wf:send(broadcast,{counter,Res}),
-    Req1 = wf:header(<<"Access-Control-Allow-Origin">>, <<"*">>, NewCtx#context.req),
-    {ok, Req1, NewCtx}.
-
-% websocket handler
-
-stream(<<"N2O",Rest/binary>> = Data, Req, State) -> info(Data,Req,State);
-stream({text,Data}, Req, State) -> info(Data,Req,State);
-stream({binary,Info}, Req, State) -> info(binary_to_term(Info,[safe]),Req,State);
-stream(Data, Req, State) when is_binary(Data) -> info(binary_to_term(Data,[safe]),Req,State);
-stream(Data, Req, State) -> info(Data,Req,State).
-
-% WebSocketPid ! Message
-
-info({client,Message}, Req, State) ->
-    wf:info("Client Message: ~p",[Message]),
-    GamePid = get(game_session),
-    game_session:process_request(GamePid, Message), 
-    Module = State#context.module,
-    try Module:event({client,Message}) catch E:R -> wf:info("Catch: ~p:~p", [E,R]) end,
-    {reply,wf:json([{eval,iolist_to_binary(render_actions(get(actions)))},
-                    {data,binary_to_list(term_to_binary(Message))}]),Req,State};
-
-info({send_message,Message}, Req, State) ->
-    wf:info("Server Message: ~p",[Message]),
-    Module = State#context.module,
-    try Module:event({server,Message}) catch E:R -> wf:info("Catch: ~p:~p", [E,R]) end,
-    {reply,wf:json([{eval,iolist_to_binary(render_actions(get(actions)))},
-                    {data,binary_to_list(term_to_binary(Message))}]),Req,State};
-
-info({wf_event,_,_,_}=Event, Req, State) ->
-    wf:info("N2O Message: ~p",[Event]),
-    {reply,html_events(Event,State),Req,State};
-
-info({flush,Actions}, Req, State) ->
-    wf:info("Flush Message: ~p",[Actions]),
-    wf:render(Actions),
-    {reply, wf:json([{eval,iolist_to_binary(render_actions(get(actions)))}]), Req, State};
-
-info(<<"PING">> = Ping, Req, State) ->
-%    wf:info("Ping Message: ~p",[Ping]),
-    {reply, wf:json([]), Req, State};
-
-info(<<"N2O,",Rest/binary>> = InitMarker, Req, State) ->
-    wf:info("N2O INIT: ~p",[InitMarker]),
-    Module = State#context.module,
-    Elements = try Module:main() catch X:Y -> wf:error_page(X,Y) end,
-    wf_core:render(Elements),
-    try Module:event(init) catch C:E -> wf:error_page(C,E) end,
-    {reply, wf:json([{eval,iolist_to_binary(render_actions(get(actions)))}]), Req, State};
-
-info(Unknown, Req, State) ->
-    wf:info("Unknown Message: ~p",[Unknown]),
-    Module = State#context.module,
-    try Module:event(Unknown) catch C:E -> wf:error_page(C,E) end,
-    {reply, wf:json([{eval,iolist_to_binary(render_actions(get(actions)))}]), Req, State}.
-
-% double render: actions could generate actions
-
-render_actions(Actions) ->
-    wf_context:clear_actions(),
-    First  = wf:render(Actions),
-    Second = wf:render(get(actions)),
-    wf_context:clear_actions(),
-    [First,Second].
-
-% N2O events
-
-html_events({wf_event,Source,Pickled,Linked}, State) ->
-    Ev = wf:depickle(Pickled),
-    wf:info("Depickled: ~p",[Ev]),
-    case Ev of
-        #ev{} -> render_ev(Ev,Source,Linked,State);
-        CustomEnvelop -> wf:error("Only #ev{} events for now: ~p",[CustomEnvelop]) end,
-    wf:json([{eval,iolist_to_binary(render_actions(get(actions)))}]).
-
-render_ev(#ev{module=M,name=F,payload=P,trigger=T},Source,Linked,State) ->
-    case F of 
-        control_event -> lists:map(fun({K,V})-> put(K,V) end,Linked), M:F(T,P);
-        api_event -> M:F(P,Linked,State);
-        event -> lists:map(fun({K,V})-> put(K,V) end,Linked), M:F(P);
-        UserCustomEvent -> M:F(P,T,State) end.
-
-% process down
-
-terminate(_Req, _State=#context{module=Module}) ->
-    Res = ets:update_counter(globals,onlineusers,{2,-1}),
-    wf:send(broadcast,{counter,Res}),
-    catch Module:event(terminate),
-    ok.

+ 1 - 1
apps/face/src/web_sup.erl

@@ -29,6 +29,6 @@ dispatch_rules() ->
                                                 {mimetypes, {fun mimetypes:path_to_mimes/2, default}}]},
             {"/rest/:resource", rest_cowboy, []},
             {"/rest/:resource/:id", rest_cowboy, []},
-            {"/ws/[...]", bullet_handler, [{handler, n2o_game}]},
+            {"/ws/[...]", bullet_handler, [{handler, n2o_bullet}]},
             {'_', n2o_cowboy, []}
     ]}]).

+ 3 - 3
apps/server/src/game_session.erl

@@ -421,9 +421,9 @@ handle_relay_message(Msg, _SubscrId, #state{rpc = RPC} = State) ->
         E -> error_logger:info_msg("ERROR SEND MESSAGE TO PLAYER: ~p",[E]),
             {stop, normal, State}
     catch
-        exit:{normal, {gen_server,call, [RPC, {send_message, _}]}} ->
+        exit:{normal, {gen_server,call, [RPC, {server, _}]}} ->
             {stop, normal, State};
-        exit:{noproc, {gen_server,call, [RPC, {send_message, _}]}} ->
+        exit:{noproc, {gen_server,call, [RPC, {server, _}]}} ->
             {stop, normal, State};
         E:R ->
             {stop, normal, State}
@@ -493,4 +493,4 @@ get_relay(GameId, GameList) ->
 
 send_message_to_player(Pid, Message) ->
     ?INFO("MESSAGE to ~p ~p",[Pid,Message]),
-    Pid ! {send_message,Message}, ok.
+    Pid ! {server,Message}, ok.

+ 3 - 3
apps/server/src/okey/game_okey_bot.erl

@@ -32,7 +32,7 @@
         request_id = 0
     }).
 
-send_message(Pid, Message) -> gen_server:call(Pid, {send_message, Message}).
+send_message(Pid, Message) -> gen_server:call(Pid, {server, Message}).
 call_rpc(Pid, Message) -> gen_server:call(Pid, {call_rpc, Message}).
 get_session(Pid) -> gen_server:call(Pid, get_session).
 init_state(Pid, Situation) -> gen_server:cast(Pid, {init_state, Situation}).
@@ -47,7 +47,7 @@ init([Owner, PlayerInfo, GameId]) ->
     ?INFO("BOTMODULE ~p started with game_session pid ~p", [UId,SPid]),
     {ok, #state{user = PlayerInfo, uid = UId, owner = Owner, gid = GameId, session = SPid}}.
 
-handle_call({send_message, Msg0}, _From, #state{uid = UId, bot = BPid} = State) ->
+handle_call({server, Msg0}, _From, #state{uid = UId, bot = BPid} = State) ->
     Msg = flashify(Msg0),
     ?INFO("OKEY BOT ~p: Resend message to bot process (~p): ~p",[UId, BPid, Msg0]),
     BPid ! Msg,
@@ -104,7 +104,7 @@ handle_info({'DOWN', Ref, process, _, Reason},
     ?INFO
     ("relay goes down with reason ~p so does bot", [Reason]),
     {stop, Reason, State};
-handle_info({send_message,M}, #state{uid = UId, bot = BPid} = State) ->
+handle_info({server,M}, #state{uid = UId, bot = BPid} = State) ->
     BPid ! M,
     {noreply, State};
 handle_info(Info, State) ->

+ 3 - 3
apps/server/src/tavla/game_tavla_bot.erl

@@ -40,7 +40,7 @@
 
 % gen_server
 
-send_message(Pid, Message) -> gen_server:call(Pid, {send_message, Message}).
+send_message(Pid, Message) -> gen_server:call(Pid, {server, Message}).
 call_rpc(Pid, Message) -> gen_server:call(Pid, {call_rpc, Message}).
 get_session(Pid) -> gen_server:call(Pid, get_session).
 init_state(Pid, Situation) -> gen_server:cast(Pid, {init_state, Situation}).
@@ -56,7 +56,7 @@ init([Owner, PlayerInfo, GameId]) ->
     {ok, #state{user = PlayerInfo, uid = UId, owner = Owner, gid = GameId, session = SPid}}.
 
 
-handle_call({send_message, Msg0}, _From, State) ->
+handle_call({server, Msg0}, _From, State) ->
     BPid = State#state.bot,
     Msg = flashify(Msg0),
     BPid ! Msg,
@@ -111,7 +111,7 @@ handle_cast(Msg, State) ->
 handle_info({'DOWN', Ref, process, _, Reason}, State = #state{owner_mon = OMon}) when OMon == Ref ->
     ?INFO("relay goes down with reason ~p so does bot", [Reason]),
     {stop, Reason, State};
-handle_info({send_message,M}, State) ->
+handle_info({server,M}, State) ->
     BPid = State#state.bot,
     BPid ! M,
     {noreply, State};