import SocketClient from './SocketClient';
export interface StateConfiguration<T, K> {
    initialValue: T;
    allowConnectingClient?: (clientInformation: K) => Boolean;
    interceptStateUpdate?: (updates: Partial<T>, clientInformation: K) => Partial<T> | null;
    selfDestruct?: (numberOfClients: number, timeOfCreation: Date) => Boolean;
    ttl?: number;
}
export default class State<T, K> {
    private connectedClients;
    private value;
    private timeOfCreation;
    private allowConnectingClient;
    private interceptStateUpdate;
    private selfDestruct;
    private destructionHandler;
    constructor(config: StateConfiguration<T, K>, destructionHandler: () => {});
    connectClient: (socketClient: SocketClient<T, K>) => void;
    disconnectClient: (socketClient: SocketClient<T, K>) => void;
    mutate: (updates: Partial<T>, clientInformation: K) => Boolean;
    broadcastStateUpdate: (updates: Partial<T>) => void;
    getState(): T;
    private destroy;
}
