import { IMsgFromServer } from "./from-server/IFromServer";
import { Game } from "./Game";
import { Player } from "./Player";
import { User } from "./User";
export declare class Room<TGamePlayer extends Player = Player> {
    game: Game<Room>;
    protected maxPlayers: number;
    protected playerMaker: new () => Player;
    protected id: string;
    protected users: Array<User<TGamePlayer>>;
    protected startDate: Date | null;
    protected endDate: Date | null;
    protected type: string;
    constructor(game: Game<Room>, maxPlayers: number, playerMaker: new () => Player, id?: string);
    getId(): string;
    add(u: User<TGamePlayer>): false | undefined;
    count(): number;
    find(u: User): User | undefined;
    findById(id: string): User | undefined;
    remove(u: User): void;
    empty(): boolean;
    isReady(): boolean;
    isPlaying(): boolean;
    start(): void;
    finish(): void;
    isFinished(): boolean;
    toClient(): {
        count: number;
        id: string;
        isPlaying: boolean;
        owner: {
            id: string;
            name: string;
            playing: boolean | null;
            turn: {} | null;
        } | null;
        total: number;
        type: string;
    };
    each(fn: (p: User) => void): void;
    getPlayers(): Array<User<TGamePlayer>>;
    getGamePlayers(): TGamePlayer[];
    sendStatusToAll(): void;
    filterPlayer(fn: (x: User) => boolean): User<TGamePlayer>[];
    protected owner(): User<TGamePlayer>;
    protected sendAll(msg: IMsgFromServer): void;
    protected getType(): string;
}
