Browse Source

Player STATS API

Maxim Sokhatsky 11 years ago
parent
commit
5c748f0cb1
3 changed files with 24 additions and 44 deletions
  1. 1 1
      apps/face/src/protocol.erl
  2. 2 0
      apps/server/include/basic_types.hrl
  3. 21 43
      apps/server/src/game_session.erl

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

@@ -8,7 +8,7 @@ attach(Token) -> ws:send(enc(tuple(atom('client'),tuple(atom("session_attach"),
 join(Game) -> ws:send(enc(tuple(atom('client'),tuple(atom("join_game"), Game)))).
 logout() -> ws:send(enc(tuple(atom('client'),tuple(atom("logout"))))).
 pause(GameId, Action) -> ws:send(enc(tuple(atom('client'),tuple(atom("pause_game"),atom('undefined'),GameId,atom(Action))))).
-player_info(User,GameModule) -> ws:send(enc(tuple(atom('client'),tuple(atom("get_player_stats"),bin(User),atom(GameModule))))).
+player_info(User,GameModule) -> ws:send(enc(tuple(atom('client'),tuple(atom("player_stats"),bin(User),atom(GameModule))))).
 
 take(GameId,Place) -> ws:send(enc(tuple(atom('client'),tuple(atom("game_action"),GameId,atom("okey_take"),[{pile,Place}])))).
 discard(GameId, Color, Value) -> ws:send(enc(tuple(atom('client'),tuple(atom("game_action"),GameId,atom("okey_discard"),

+ 2 - 0
apps/server/include/basic_types.hrl

@@ -18,4 +18,6 @@
           robot = false :: boolean()
          }).
 
+-record('PlayerStats', {id,game,per_flavour}).
+
 -endif.

+ 21 - 43
apps/server/src/game_session.erl

@@ -4,12 +4,8 @@
 -include_lib("server/include/requests.hrl").
 -include_lib("server/include/settings.hrl").
 
--export([start_link/1]).
+-compile(export_all).
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
--export([process_request/2, process_request/3]).
--export([bot_session_attach/2]).
-
--define(SERVER, ?MODULE).
 
 -record(state, {
           user = undefined,
@@ -31,37 +27,19 @@
           role = viewer :: atom()      %% [viewer, player, ghost]
          }).
 
-start_link(RPC) when is_pid(RPC) ->
-    gen_server:start_link(?MODULE, [RPC], []).
-
-bot_session_attach(Pid, UserInfo) ->
-    gen_server:cast(Pid, {bot_session_attach, UserInfo}).
-
-process_request(Pid, Msg) ->
-    gas:info(?MODULE,"Client Request: ~p to: ~p",[Msg,Pid]),
-    gen_server:call(Pid, {client_request, Msg}).
-
-process_request(Pid, Source, Msg) ->
-    gas:info(?MODULE,"Client Request ~p to: ~p from: ~p",[Msg,Pid,Source]),
-    gen_server:call(Pid, {client_request, Msg}).
-
-send_message_to_player(Pid, Message) ->
-    gas:info(?MODULE,"Server Response ~p to ~p",[Message,Pid]),
-    Pid ! {server,Message}, ok.
-
-init([RPC]) ->
-    MonRef = erlang:monitor(process, RPC),
-    {ok, #state{rpc = RPC, rpc_mon = MonRef}}.
-
-handle_call({client_request, Request}, From, State) ->
-    handle_client_request(Request, From, State);
+start_link(RPC) when is_pid(RPC) -> gen_server:start_link(?MODULE, [RPC], []).
+bot_session_attach(Pid, UserInfo) -> gen_server:cast(Pid, {bot_session_attach, UserInfo}).
+process_request(Pid, Msg) -> gen_server:call(Pid, {client_request, Msg}).
+process_request(Pid, Source, Msg) -> gen_server:call(Pid, {client_request, Msg}).
+send_message_to_player(Pid, Message) -> Pid ! {server,Message}, ok.
 
+init([RPC]) -> MonRef = erlang:monitor(process, RPC), {ok, #state{rpc = RPC, rpc_mon = MonRef}}.
+handle_call({client_request, Request}, From, State) -> handle_client_request(Request, From, State);
 handle_call(Request, From, State) ->
-    gas:info(?MODULE,"Unrecognized call: ~p", [Request]),
+    gas:info(?MODULE,"Unrecognized call: ~p from ~p", [Request,From]),
     {stop, {unknown_call, From, Request}, State}.
 
 handle_cast({bot_session_attach, UserInfo}, State = #state{user = undefined}) ->
-%    gas:info(?MODULE,"bot session attach", []),
     {noreply, State#state{user = UserInfo}};
 
 handle_cast(Msg, State) ->
@@ -76,11 +54,10 @@ handle_info({relay_kick, SubscrId, Reason}, State) ->
     handle_relay_kick(Reason, SubscrId, State);
 
 handle_info({'DOWN', MonitorRef, _Type, _Object, _Info} = Msg, State = #state{rpc_mon = MonitorRef}) ->
-    gas:info("connection closed, shutting down session:~p", [Msg]),
+    gas:info(?MODULE, "connection closed, shutting down session:~p", [Msg]),
     {stop, normal, State};
 
-handle_info({'DOWN', OtherRef, process, _Object, Info} = _Msg,
-            #state{games = Games, rpc = RPC} = State) ->
+handle_info({'DOWN', OtherRef, process, _Object, Info} = _Msg, #state{games = Games, rpc = RPC} = State) ->
     case lists:keyfind(OtherRef, #participation.ref, Games) of
         #participation{} ->
             gas:info(?MODULE,"The table is down: ~p", [Info]),
@@ -89,9 +66,7 @@ handle_info({'DOWN', OtherRef, process, _Object, Info} = _Msg,
                 #disconnect{reason_id = <<"tableDown">>,
                     reason = <<"The table you are playing on is unexpectedly down.">>}),
             {stop, table_down, State};
-        _ ->
-            {noreply, State}
-    end;
+        _ -> {noreply, State} end;
 
 handle_info(Info, State) ->
     gas:info(?MODULE,"Unrecognized info: ~p", [Info]),
@@ -108,8 +83,7 @@ code_change(_OldVsn, State, _Extra) ->
 
 %%===================================================================
 
-handle_client_request(#session_attach{token = Token}, _From,
-                      #state{user = undefined} = State) ->
+handle_client_request(#session_attach{token = Token}, _From, #state{user = undefined} = State) ->
     gas:info(?MODULE,"Checking session token: ~p", [Token]),
     case auth_server:get_user_info(wf:to_binary(Token)) of
         false ->
@@ -117,8 +91,7 @@ handle_client_request(#session_attach{token = Token}, _From,
             {stop, normal, {error, invalid_token}, State};
         UserInfo ->
             gas:info(?MODULE,"successfull session attach. Your user info: ~p", [UserInfo]),
-            {reply, UserInfo, State#state{user = UserInfo}}
-    end;
+            {reply, UserInfo, State#state{user = UserInfo}} end;
 
 handle_client_request(_, _From, #state{user = undefined} = State) ->
     gas:info(?MODULE,"Unknown session call", []),
@@ -129,8 +102,13 @@ handle_client_request(#logout{}, _From, State) ->
     {stop, normal, ok, State};
 
 handle_client_request(#player_stats{player_id = PlayerId, game_type = GameModule}, _From, #state{rpc = RPC} = State) ->
-    % TODO add here everything about player statistic
-    Res = <<"everything player stats :)">>, %GameModule:get_player_stats(PlayerId),
+    Res = #'PlayerStats'{
+        id=PlayerId,
+        game=GameModule,
+        per_flavour=[{{lucky,standard},crypto:rand_uniform(7,108)},
+                     {{standalone,evenodd},crypto:rand_uniform(7,108)},
+                     {{standalone,color},crypto:rand_uniform(7,108)},
+                     {{elimination,color},crypto:rand_uniform(7,108)}]},
     gas:info(?MODULE,"Get player stats: ~p", [Res]),
     send_message_to_player(RPC, Res),
     {reply, Res, State};