Browse Source

logging system

Maxim Sokhatsky 11 years ago
parent
commit
13decfa00e
2 changed files with 29 additions and 21 deletions
  1. 14 7
      apps/server/src/okey/game_okey_table.erl
  2. 15 14
      apps/server/src/sup/game_log.erl

+ 14 - 7
apps/server/src/okey/game_okey_table.erl

@@ -958,11 +958,16 @@ init_players([{PlayerId, UserInfo, SeatNum, _StartPoints} | PlayersInfo], Player
 
 
 %%=================================================================
 %%=================================================================
 
 
-handle_log(PlayerId,Players,Event,#okey_state{game_id=GameId}=State) ->
-    case get_player(PlayerId, Players) of
-        {ok, #player{info=#'PlayerInfo'{robot=false,id=User}=PlayerInfo}} ->
-             game_log:update_stats(User,User,Event,#game_event.event,State);
-        _ -> ok end.
+handle_log(User,#game_event{}=Event,
+    #okey_state{game_id=GameId,tournament_type=GameKind,game_mode=GameMode,speed=Speed,rounds=Rounds}=State) ->
+%    case get_player(PlayerId, Players) of
+%        {ok, #player{info=#'PlayerInfo'{robot=false,id=User}=PlayerInfo}} ->
+             ProtocolEvent = #protocol_event{
+                feed_id=User,module=GameKind,speed=Speed,rounds=Rounds,user=User,type=GameMode,
+                id=game_log:timestamp(),
+                event=Event#game_event.event,game_event=Event},
+             game_log:update_stats(User,ProtocolEvent,#protocol_event.event,State).
+%        _ -> ok end.
 
 
 send_to_subscriber_ge(Relay, SubscrId, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
 send_to_subscriber_ge(Relay, SubscrId, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
     [Name|List] = tuple_to_list(Msg),
     [Name|List] = tuple_to_list(Msg),
@@ -975,7 +980,9 @@ send_to_client_ge(Relay, PlayerId, Msg, #okey_state{players=Players,game_id = Ga
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
     gas:info(?MODULE,"SEND CLIENT ~p",[Event]),
     gas:info(?MODULE,"SEND CLIENT ~p",[Event]),
     game_log:protocol_event(table,Event,State),
     game_log:protocol_event(table,Event,State),
-    handle_log(PlayerId,Players,Event,State),
+    case get_player(PlayerId, Players) of
+        {ok, #player{user_id=User}} -> handle_log(User,Event,State);
+        _ -> skip end,
     ?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
     ?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
 
 
 relay_publish_ge(Relay, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
 relay_publish_ge(Relay, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
@@ -983,7 +990,7 @@ relay_publish_ge(Relay, Msg, #okey_state{players=Players,game_id = GameId} = Sta
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
     gas:info(?MODULE,"RELAYX PUBLISH ~p",[Event]),
     gas:info(?MODULE,"RELAYX PUBLISH ~p",[Event]),
     game_log:protocol_event(table,Event,State),
     game_log:protocol_event(table,Event,State),
-    [ handle_log(Id,Players,Event,State) || {_,#player{id=Id},_} <- midict:to_list(Players)],
+    [ handle_log(UserId,Event,State) || {_,#player{id=Id,user_id=UserId},_} <- midict:to_list(Players)],
     relay_publish(Relay, Event).
     relay_publish(Relay, Event).
 
 
 relay_publish(Relay, Msg) ->
 relay_publish(Relay, Msg) ->

+ 15 - 14
apps/server/src/sup/game_log.erl

@@ -13,9 +13,9 @@ start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
 mypid() -> gen_server:call(?SERVER, mypid).
 mypid() -> gen_server:call(?SERVER, mypid).
 clear_history() -> gen_server:cast(?SERVER, clear_history).
 clear_history() -> gen_server:cast(?SERVER, clear_history).
 get_history() -> gen_server:call(?SERVER, get_history).
 get_history() -> gen_server:call(?SERVER, get_history).
-protocol_event(PI,Event,State) -> gen_server:cast(?SERVER, {protocol_event, PI, Event, State}).
+protocol_event(User,Event,State) -> gen_server:cast(?SERVER, {protocol_event, User, Event, State}).
 reveal_event(User,Event,State) -> gen_server:cast(?SERVER, {reveal_event, User, Event, State}).
 reveal_event(User,Event,State) -> gen_server:cast(?SERVER, {reveal_event, User, Event, State}).
-update_stats(Key,User,Event,Pos,State) -> gen_server:cast(?SERVER, {update_stats, Key, User, Event, Pos, State}).
+update_stats(User,Event,Pos,State) -> gen_server:cast(?SERVER, {update_stats, User, Event, Pos, State}).
 timestamp() -> {MegaSec, Sec, MiliSec} = erlang:now(), MegaSec * 1000 * 1000 * 1000  + Sec * 1000 + MiliSec.
 timestamp() -> {MegaSec, Sec, MiliSec} = erlang:now(), MegaSec * 1000 * 1000 * 1000  + Sec * 1000 + MiliSec.
 
 
 init([]) -> {ok, #state{}}.
 init([]) -> {ok, #state{}}.
@@ -53,15 +53,15 @@ handle_cast({protocol_event, UserId,
 
 
     gas:info(?MODULE, "Event Log: ~p", [EventLogEntry]),
     gas:info(?MODULE, "Event Log: ~p", [EventLogEntry]),
     kvs:add(EventLogEntry),
     kvs:add(EventLogEntry),
-    update_container_stats(Key, UserId, Event,#protocol_event.event,State),
+    update_container_stats(UserId, EventLogEntry,#protocol_event.event,GameState),
 
 
     {noreply, State};
     {noreply, State};
-handle_cast({update_stats, Key, User, Event, Pos, GameState}, State) ->
-    update_container_stats(Key, User, Event,Pos, GameState),
+handle_cast({update_stats, User, Event, Pos, GameState}, State) ->
+    update_container_stats(User, Event, Pos, GameState),
     {noreply, State};
     {noreply, State};
 handle_cast({reveal_event, User, Event, GameState}, State) ->
 handle_cast({reveal_event, User, Event, GameState}, State) ->
     kvs:add(Event),
     kvs:add(Event),
-    update_container_stats(element(#container_event.id,Event), User, Event, #reveal_event.reason, GameState),
+    update_container_stats(User, Event, #reveal_event.reason, GameState),
     {noreply, State};
     {noreply, State};
 handle_cast(clear_history, State) -> {noreply, State#state{history = []}};
 handle_cast(clear_history, State) -> {noreply, State#state{history = []}};
 handle_cast(_Msg, State) -> gas:info(?MODULE, "Event Log: cast message ~p", [_Msg]), {noreply, State}.
 handle_cast(_Msg, State) -> gas:info(?MODULE, "Event Log: cast message ~p", [_Msg]), {noreply, State}.
@@ -69,7 +69,7 @@ handle_info(_Info, State) -> gas:info(?MODULE, "Event Log: info message ~p", [_I
 terminate(_Reason, _State) -> ok.
 terminate(_Reason, _State) -> ok.
 code_change(_OldVsn, State, _Extra) -> {ok, State}.
 code_change(_OldVsn, State, _Extra) -> {ok, State}.
 
 
-update_container_stats(Key,User,Event,Pos,GameState) ->
+update_container_stats(User,Event,Pos,GameState) ->
     {Date,Time} = calendar:local_time(),
     {Date,Time} = calendar:local_time(),
 
 
     GameKind = element(#table_state.tournament_type,GameState),
     GameKind = element(#table_state.tournament_type,GameState),
@@ -79,18 +79,19 @@ update_container_stats(Key,User,Event,Pos,GameState) ->
     Rounds = element(#table_state.rounds,GameState),
     Rounds = element(#table_state.rounds,GameState),
 
 
     ContainerName = element(#container_event.container,Event),
     ContainerName = element(#container_event.container,Event),
-    Container = case kvs:get(ContainerName,Key) of
+    FeedId = element(#container_event.feed_id,Event),
+    Container = case kvs:get(ContainerName,FeedId) of
         {ok,GL} -> GL;
         {ok,GL} -> GL;
         _ ->
         _ ->
             NC = list_to_tuple([ContainerName|proplists:get_value(ContainerName, kvs:containers())]),
             NC = list_to_tuple([ContainerName|proplists:get_value(ContainerName, kvs:containers())]),
-            C1 = setelement(#container_log.id, NC, Key),
-            C2 = setelement(#container_log.speed, C1, Speed),
+            C1 = setelement(#container_log.id,     NC, FeedId),
+            C2 = setelement(#container_log.speed,  C1, Speed),
             C3 = setelement(#container_log.rounds, C2, Rounds),
             C3 = setelement(#container_log.rounds, C2, Rounds),
-            C4 = setelement(#container_log.type, C3, GameMode),
+            C4 = setelement(#container_log.type,   C3, GameMode),
             C5 = setelement(#container_log.module, C4, GameKind),
             C5 = setelement(#container_log.module, C4, GameKind),
-            C6 = setelement(#container_log.date, C5, Date),
-            C7 = setelement(#container_log.time, C6, Time),
-            C8 = setelement(#container_log.user, C7, User),
+            C6 = setelement(#container_log.date,   C5, Date),
+            C7 = setelement(#container_log.time,   C6, Time),
+            C8 = setelement(#container_log.user,   C7, User),
             C8
             C8
 
 
             end,
             end,