Browse Source

Merge branch 'master' of github.com:kakaranet/games

Roman Dayneko 11 years ago
parent
commit
04de25ca01

+ 2 - 8
apps/db/include/game_log.hrl

@@ -3,18 +3,12 @@
 
 -include_lib("kvs/include/kvs.hrl").
 
--record(event_log, {?ITERATOR(feed),
+-record(game_log,  {?CONTAINER, protocol_stat=[] }).
+-record(event_log, {?ITERATOR(game_log),
     game_id,
     timestamp,
     user,
     event,
     game_event}).
 
--record(game_log, {?ITERATOR(feed),
-    game_type,
-    game_id,
-    user,
-    aggregations % [{attach,Count},{join,Count},{}]
-    }).
-
 -endif.

+ 2 - 2
apps/db/src/db_game_log.erl

@@ -5,6 +5,6 @@
 
 metainfo() ->
     #schema{name=kvs,tables=[
-        #table{name=game_log,fields=record_info(fields,game_log)},
-        #table{name=event_log,fields=record_info(fields,event_log)}
+        #table{name=game_log,container=true,fields=record_info(fields,game_log)},
+        #table{name=event_log,container=game_log,fields=record_info(fields,event_log)}
     ]}.

+ 12 - 3
apps/server/src/game_log.erl

@@ -26,7 +26,7 @@ handle_call(_Request, _From, State) ->
     {reply, Reply, State}.
 handle_cast({log_event, PI, #game_event{game = GameId, event = EventName, args = Args} = Event, GameState}, #state{history = History} = State) ->
 
-    Container = 
+    EventLogEntry = 
         #event_log{
            feed_id = {GameId, PI#'PlayerInfo'.id},
            id = {timestamp(), GameId, PI#'PlayerInfo'.id},
@@ -35,8 +35,17 @@ handle_cast({log_event, PI, #game_event{game = GameId, event = EventName, args =
            timestamp = calendar:now_to_universal_time(erlang:now()),
            game_event = Event},
 
-    gas:info(?MODULE, "Event Log: ~p", [Container]),
-    kvs:add(Container),
+    gas:info(?MODULE, "Event Log: ~p", [EventLogEntry]),
+    kvs:add(EventLogEntry),
+
+    {ok,GL} = kvs:get(game_log,{GameId, PI#'PlayerInfo'.id}),
+    ProtocolStats = GL#game_log.protocol_stat,
+    PS = case is_list(ProtocolStats) of true -> ProtocolStats; _ -> [] end,
+    Stats = case lists:keyfind(EventName,1,PS) of
+        {EventName,Count} -> lists:keyreplace(EventName,1,PS,{EventName,Count+1});
+        false -> [{EventName,1}|PS] end,
+    kvs:put(GL#game_log{protocol_stat=Stats}),
+
     {noreply, State#state{history = [Event | 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}.

+ 0 - 1
apps/server/src/gas.erl

@@ -1,7 +1,6 @@
 -module(gas).
 -compile(export_all).
 
-%-define(ALLOWED, [gas,nsg_trn_lucky,game_session,game_manager,game_okey_table]).
 -define(ALLOWED, [gas,auth_server,nsg_trn_lucky,game_log]).
 
 log(Module, String, Args, Fun) ->

+ 13 - 8
apps/server/src/okey/game_okey_table.erl

@@ -950,26 +950,31 @@ init_players([{PlayerId, UserInfo, SeatNum, _StartPoints} | PlayersInfo], Player
     init_players(PlayersInfo, NewPlayers).
 
 %%=================================================================
-send_to_subscriber_ge(Relay, SubscrId, Msg, #okey_state{game_id = GameId} = State) ->
+
+handle_log(PlayerId,Players,Event,State) ->
+    case get_player(PlayerId, Players) of
+        {ok, #player{info=#'PlayerInfo'{robot=false}=PlayerInfo}} ->
+             game_log:put(PlayerInfo,Event,State);
+        _ -> ok end.
+
+send_to_subscriber_ge(Relay, SubscrId, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
     [Name|List] = tuple_to_list(Msg),
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
-    gas:info(?MODULE,"SEND SUB ~p",[Event]),
+    gas:info(?MODULE,"SUBSCRIBER ~p",[SubscrId]),
     ?RELAY:table_message(Relay, {to_subscriber, SubscrId, Event}).
 
 send_to_client_ge(Relay, PlayerId, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
     [Name|List] = tuple_to_list(Msg),
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
     gas:info(?MODULE,"SEND CLIENT ~p",[Event]),
-    case get_player(PlayerId, Players) of
-        {ok, #player{info=#'PlayerInfo'{robot=false}=PlayerInfo}} ->
-             game_log:put(PlayerInfo,Event,State);
-        _ -> ok end,
+    handle_log(PlayerId,Players,Event,State),
     ?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
 
-relay_publish_ge(Relay, Msg, #okey_state{game_id = GameId} = State) ->
+relay_publish_ge(Relay, Msg, #okey_state{players=Players,game_id = GameId} = State) ->
     [Name|List] = tuple_to_list(Msg),
     Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
-    gas:info(?MODULE,"RELAY PUBLISH ~p",[Event]),
+    gas:info(?MODULE,"RELAYX PUBLISH ~p",[Event]),
+    [ handle_log(Id,Players,Event,State) || {_,#player{id=Id},_} <- midict:to_list(Players)],
     relay_publish(Relay, Event).
 
 relay_publish(Relay, Msg) ->

+ 4 - 0
apps/server/src/relay_ng.erl

@@ -318,6 +318,10 @@ handle_table_message({to_client, PlayerId, Msg}, #state{subscribers = Subscriber
     Recepients = find_subscribers_by_player_id(PlayerId, Subscribers),
     gas:info(?MODULE,"RELAY_NG Send table message to player's (~p) sessions: ~p. Message: ~p",
           [PlayerId, Recepients, Msg]),
+
+    %handle_log(PlayerId,Players,Event,State),
+
+
     [Pid ! {relay_event, SubscrId, Msg} || #subscriber{id = SubscrId, pid = Pid} <- Recepients],
     {noreply, State};