import { Netron } from './netron';
import { Interface } from './interface';
import { Definition } from './definition';
import { EventSubscriber } from './types';
export declare abstract class AbstractPeer {
    netron: Netron;
    id: string;
    protected interfaces: Map<string, {
        instance: Interface;
        refCount: number;
    }>;
    constructor(netron: Netron, id: string);
    abstract set(defId: string, name: string, value: any): Promise<void>;
    abstract get(defId: string, name: string): Promise<any>;
    abstract call(defId: string, method: string, args: any[]): Promise<any>;
    abstract subscribe(eventName: string, handler: EventSubscriber): Promise<void> | void;
    abstract unsubscribe(eventName: string, handler: EventSubscriber): Promise<void> | void;
    abstract exposeService(instance: any): Promise<Definition>;
    abstract unexposeService(ctxId: string, releaseOriginated?: boolean): Promise<void>;
    unexposeAllServices(): void;
    abstract getServiceNames(): string[];
    queryInterface<T>(serviceName: string): Promise<T>;
    queryInterfaceByDefId<T>(defId: string, def?: Definition): Promise<T>;
    releaseInterface<T>(iInstance: T): Promise<void>;
    protected abstract releaseInterfaceInternal(iInstance: any): Promise<void>;
    protected abstract getDefinitionById(defId: string): Definition;
    protected abstract getDefinitionByServiceName(name: string): Definition;
}
