import * as _ from "underscore";
import { IMsgFromClient } from "./from-client/ClientMessage";
import { ClientMessageFactory } from "./from-client/ClientMessageFactory";
import { Room } from "./Room";
import { RoomManager } from "./RoomManager";
import { User } from "./User";
import { UserManager } from "./UserManager";
export interface IGameOptions {
    cleanInterval: number;
    roomsInterval: number;
    usersInterval: number;
    checkPlayerOnlineInterval: number;
    turnMaxTime: number;
}
export declare class Game<TRoom extends Room = Room> {
    users: UserManager;
    rooms: RoomManager;
    private factory;
    private secretToken;
    options: IGameOptions;
    throttledSendRooms: (() => void) & _.Cancelable;
    throttledSendPlayers: (() => void) & _.Cancelable;
    private roomsMessageInterval;
    private playersMessageInterval;
    private checkPlayerOnlineInterval;
    constructor(users: UserManager, rooms: RoomManager, factory: ClientMessageFactory, secretToken: string, options?: IGameOptions);
    findOrCreate(id: string): User;
    infoOf(player: User): any;
    signToken(id: string): string;
    exec(message: IMsgFromClient): any;
    checkPlayersTime(): void;
}
