Browse Source

fix timer bug due to extended next_turn with okey enabling

Maxim Sokhatsky 11 years ago
parent
commit
71d0c0e0d0
1 changed files with 9 additions and 9 deletions
  1. 9 9
      apps/server/src/okey/okey_table.erl

+ 9 - 9
apps/server/src/okey/okey_table.erl

@@ -193,6 +193,11 @@ handle_info({timeout, Magic}, ?STATE_PLAYING,
     gas:info(?MODULE,"OKEY_NG_TABLE_TRN <~p,~p> Move timeout. Do an automatic move(s).", [GameId, TableId]),
     do_timeout_moves(StateData);
 
+handle_info({timeout, Magic}, State,
+            #okey_state{timeout_magic = Magic, game_id = GameId, table_id = TableId} = StateData) ->
+    gas:info(?MODULE,"OKEY_NG_TABLE_TRN <~p,~p> Move timeout. Do an automatic move(s). UNKNOWN STATE ~p", [GameId, TableId,State]),
+    do_timeout_moves(StateData);
+
 handle_info({round_timeout, Round}, ?STATE_PLAYING,
             #okey_state{cur_round = Round, desk_state = DeskState, game_id = GameId,
                    table_id = TableId, timeout_timer = TRef} = StateData) ->
@@ -636,9 +641,7 @@ do_timeout_moves(#okey_state{desk_rule_pid = Desk, desk_state = DeskState} = Sta
                 state = DeskStateName} = DeskState,
     case DeskStateName of
         state_take ->
-            Events1 = case desk_player_action(Desk, CurSeatNum, take_from_table) of
-                {ok,E} -> E;
-                _ -> [] end,
+            {ok,Events1} = desk_player_action(Desk, CurSeatNum, take_from_table),
             [Tash] = [Tash || {taked_from_table, S, Tash} <- Events1, S==CurSeatNum],
             {ok, Events2} = desk_player_action(Desk, CurSeatNum, {discard, Tash}),
             Events2_1 = [case E of
@@ -650,10 +653,7 @@ do_timeout_moves(#okey_state{desk_rule_pid = Desk, desk_state = DeskState} = Sta
             process_game_events(Events, StateData);
         state_discard ->
             {_, [Tash | _]} = lists:keyfind(CurSeatNum, 1, Hands),
-            Res = desk_player_action(Desk, CurSeatNum, {discard, Tash}),
-            Events1 = case Res of
-                {ok,E} -> E;
-                _ -> [] end,
+            {ok,Events1} = desk_player_action(Desk, CurSeatNum, {discard, Tash}),
             Events1_1 = [case E of
                              {tash_discarded, SeatNum, Tash} ->
                                  {tash_discarded_timeout, SeatNum, Tash};
@@ -704,7 +704,7 @@ process_game_events(Events, #okey_state{desk_state = DeskState, players = Player
             erlang:cancel_timer(OldTRef),
             on_game_finish(StateData#okey_state{desk_state = NewDeskState});
         state_take ->
-            case [E || {next_player, _} = E <- Events] of %% Find a next player event
+            case [E || {next_player, _, _} = E <- Events] of %% Find a next player event
                 [] ->
                     {next_state, ?STATE_PLAYING, StateData#okey_state{desk_state = NewDeskState}};
                 [_|_] ->
@@ -855,7 +855,7 @@ handle_desk_events([Event | Events], DeskState, Players, Relay, #okey_state{} =
                 DeskState;
             {next_player, SeatNum, EnableOkey} ->
                 #player{id = PlayerId, user_id = UserId} = get_player_by_seat_num(SeatNum, Players),
-                case not EnableOkey of
+                case EnableOkey of
                     true -> 
                         MsgOkey = create_okey_enabled(SeatNum, CurSeatNum, Players),
                         send_to_client_ge(Relay, PlayerId, MsgOkey, StateData);