Browse Source

added fields game_id, timestamp and event to game_event_container
game_observer got events trough cast

Roman Dayneko 11 years ago
parent
commit
0033b6ca86

+ 3 - 1
apps/db/include/game_event_container.hrl

@@ -6,7 +6,9 @@
 -record(game_event_container,
         {
           ?ITERATOR(feed),
-          time,
+          game_id,
+          timestamp,
+          event,
           game_event
         }).
 

+ 1 - 1
apps/db/src/db_game_event_container.erl

@@ -5,5 +5,5 @@
 
 metainfo() ->
     #schema{name=kvs,tables=[
-        #table{name=game_event_container,fields=record_info(fields,game_event_container)}
+        #table{name=game_event_container,fields=record_info(fields,game_event_container), keys=[game_id, event]}
     ]}.

+ 46 - 6
apps/server/src/game_observer.erl

@@ -22,7 +22,7 @@
          terminate/2, code_change/3]).
 
 %% api
--export([mypid/0, clear_history/0, get_history/0]).
+-export([mypid/0, clear_history/0, get_history/0, log_event/1]).
 
 -define(SERVER, ?MODULE).
 
@@ -50,7 +50,9 @@ clear_history() ->
 
 get_history() ->
     gen_server:call(?SERVER, get_history).
-    
+
+log_event(Event) ->
+    gen_server:cast(?SERVER, {log_event, Event}).
 
 %%%===================================================================
 %%% gen_server callbacks
@@ -103,6 +105,24 @@ handle_call(_Request, _From, State) ->
 %%                                  {stop, Reason, State}
 %% @end
 %%--------------------------------------------------------------------
+handle_cast({log_event, #game_event{game = GameId, event = EventName, args = Args} = Event}, #state{history = History} = State) ->
+
+    PlayerId = case lists:keyfind(player, 1, Args) of {_, Id} -> Id; _ -> <<"unknow">> end,
+    
+    Container = 
+        #game_event_container{
+           feed_id = {GameId, PlayerId},
+           id = {timestamp(), GameId, PlayerId},
+           game_id = GameId,
+           event = EventName,
+           timestamp = calendar:now_to_universal_time(erlang:now()), %% date in universal time
+           game_event = Event},
+ 
+    gas:info(?MODULE, ">>>>>>>>>>>>>>>>> Container ~p", [Container]),
+    
+    kvs:add(Container), %% will be spamming kvs
+
+    {noreply, State#state{history = [Event | History]}};
 handle_cast(clear_history, State) ->
     {noreply, State#state{history = []}};
 handle_cast(_Msg, State) ->
@@ -119,10 +139,25 @@ handle_cast(_Msg, State) ->
 %%                                   {stop, Reason, State}
 %% @end
 %%--------------------------------------------------------------------
-handle_info({relay_event, _Ref, Event}, #state{history = History} = State) ->
-%%    Container = #game_event_container{id = erlang:now(), time = erlang:now(), game_event = Event},
-%%    kvs:add(Container), %% will be spamming kvs, remarked 
-    {noreply, State#state{history = [Event | History]}};
+
+%%handle_info({relay_event, _Ref, #game_event{game = GameId, event = Event, args = Args} = GameEvent},
+%%            #state{history = History} = State) ->
+%%    
+%%    {_, PlayerId} = lists:keyfind(player, 1, Args),
+%%    
+%%    Container = 
+%%        #game_event_container{
+%%           feed_id = {GameId, PlayerId},
+%%           id = {timestamp(), GameId, PlayerId},
+%%           game_id = GameId,
+%%           event = Event,
+%%           timestamp = calendar:now_to_universal_time(erlang:now()), %% date in universal time
+%%           game_event = GameEvent},
+%% 
+%%    gas:info(?MODULE, ">>>>>>>>>>>>>>>>> Container ~p", [Container]),
+%%    
+%%    kvs:add(Container), %% will be spamming kvs
+%%    {noreply, State#state{history = [Event | History]}};
 handle_info(_Info, State) ->
     gas:info(?MODULE, ">>>>>>>>>>>>>>>>> info message ~p", [_Info]),
     {noreply, State}.
@@ -155,3 +190,8 @@ code_change(_OldVsn, State, _Extra) ->
 %%%===================================================================
 %%% Internal functions
 %%%===================================================================
+
+
+timestamp() ->
+    {MegaSec, Sec, MiliSec} = erlang:now(),
+    MegaSec * 1000 * 1000 * 1000  + Sec * 1000 + MiliSec.

+ 4 - 1
apps/server/src/okey/game_okey_ng_table_trn.erl

@@ -170,7 +170,7 @@ init([GameId, TableId, Params]) ->
 
     Players = init_players(PlayersInfo),
     RelayParams = [{players, [{PlayerId, UserInfo#'PlayerInfo'.id} || {PlayerId, UserInfo, _, _} <- PlayersInfo]},
-                   {observers_allowed, true},
+                   {observers_allowed, false},
                    {table, {?MODULE, self()}}],
     {ok, Relay} = ?RELAY:start(RelayParams),
 
@@ -1013,18 +1013,21 @@ send_to_subscriber_ge(Relay, SubscrId, Msg, #state{game_id = GameId} = _StateDat
     [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]),
+    game_observer:log_event(Event),
     ?RELAY:table_message(Relay, {to_subscriber, SubscrId, Event}).
 
 send_to_client_ge(Relay, PlayerId, Msg, #state{game_id = GameId} = _StateData) ->
     [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]),
+    game_observer:log_event(Event),
     ?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
 
 relay_publish_ge(Relay, Msg, #state{game_id = GameId} = _StateData) ->
     [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]),
+    game_observer:log_event(Event),
     relay_publish(Relay, Event).
 
 relay_publish(Relay, Msg) ->