anchor.diff:          , play/3            % play one move: GameId, Cell|Command, AccountId            (in the name of the account given)
           , play/2            % play one move: GameId, Cell|Command                       (in the name of the next player)
           , play_bot/5        % trigger a bot to play one move (async)
  +        , bots_are_busy/3
  +        , bot_is_busy/2
           ]).
   
   -safe([create, start, cancel, accept, play, result, resume, moves, time]).
  
positive.code: 
  -spec create(egGameTypeId(), integer(), egAccountId(), egAccountId()) -> [egGameId() | egGameError()] | egGameError().
  create(GameType, Cnt, YourAcc, MyAcc) when is_integer(MyAcc), is_integer(YourAcc), is_integer(Cnt), Cnt > 0, Cnt =< ?MAX_BATCH_COUNT ->
      [gen_server:call(?MODULE, {create, GameType, YourAcc, MyAcc}) || _ <- lists:seq(1, Cnt)];
  create(_, _, YourAcc, MyAcc) when is_integer(MyAcc), is_integer(YourAcc) ->  ?BAD_BATCH_START_REQUEST;
  create(_, _, _, _) -> ?BAD_ACCOUNT.
  
  -spec start(egGameTypeId(), egAccountId()) -> egGameId() | egGameError().
  start(GameType, MyAcc) when is_integer(MyAcc) ->
  
negative.code:                             ,{purge_delay, 430000}      %% 430000 = 5 Days - 2000 sec
                              ]).
  
  -define(MAX_BATCH_COUNT, 100000).
  -define(CREATE_BATCH_COUNT, 100).
  -define(CREATE_BATCH_BUSY_WAIT, 1000).
  -define(BOT_QUEUE_BUSY_LENGTH, 100).
  
  -define(BAD_BATCH_START_REQUEST, {error, <<"Bad batch start command or batch count exceeded">>}).
  -define(NO_SUCH_GAME_TYPE, {error, <<"Game type does not exist">>}).
  