/// <reference types="node" />
import { Socket } from 'net';
import { NCSServerConnection } from './connection/NCSServerConnection';
import { IMOSObject, IMOSRunningOrder, IMOSRunningOrderBase, IMOSRunningOrderStatus, IMOSStoryStatus, IMOSItemStatus, IMOSROReadyToAir, IMOSStoryAction, IMOSItem, IMOSROAction, IMOSROStory, IMOSItemAction, IMOSROFullStory, IMOSROAck, IMOSObjectList, IMOSRequestObjectList, IMOSListSearchableSchema, IMOSAck, MosItemReplaceOptions, IMOSExternalMetaData, IMOSListMachInfo, IMOSDefaultActiveX, IMOSString128, IMOSTime, MosTypes, AnyXMLObject } from '@mos-connection/model';
import { MosModel } from '@mos-connection/helper';
import { IConnectionConfig, IMOSConnectionStatus, IMOSDevice } from './api';
export declare class MosDevice implements IMOSDevice {
    socket: Socket;
    manufacturer: IMOSString128;
    model: IMOSString128;
    hwRev: IMOSString128;
    swRev: IMOSString128;
    DOM: IMOSTime;
    SN: IMOSString128;
    ID: IMOSString128;
    time: IMOSTime;
    opTime: IMOSTime;
    mosRev: IMOSString128;
    defaultActiveX?: Array<IMOSDefaultActiveX>;
    mosExternalMetaData?: Array<IMOSExternalMetaData>;
    private _idPrimary;
    private _idSecondary;
    private _debug;
    private supportedProfiles;
    /** If set, will do more checks that mos-protocol is properly implemented */
    readonly strict: boolean;
    readonly mosTypes: MosTypes;
    readonly parseMosTypes: MosModel.MosParseTypes;
    private _disposed;
    private _scheduleCheckProfileValidnessTimeout;
    private _primaryConnection;
    private _secondaryConnection;
    private _currentConnection;
    private _callbackOnRequestMachineInfo?;
    private _callbackOnConnectionChange?;
    private _callbackOnRequestMOSOBject?;
    private _callbackOnRequestAllMOSObjects?;
    private _callbackOnMOSObjects?;
    private _callbackOnCreateRunningOrder?;
    private _callbackOnReplaceRunningOrder?;
    private _callbackOnDeleteRunningOrder?;
    private _callbackOnRequestRunningOrder?;
    private _callbackOnMetadataReplace?;
    private _callbackOnRunningOrderStatus?;
    private _callbackOnStoryStatus?;
    private _callbackOnItemStatus?;
    private _callbackOnReadyToAir?;
    private _callbackOnROInsertStories?;
    private _callbackOnROInsertItems?;
    private _callbackOnROReplaceStories?;
    private _callbackOnROReplaceItems?;
    private _callbackOnROMoveStories?;
    private _callbackOnROMoveItems?;
    private _callbackOnRODeleteStories?;
    private _callbackOnRODeleteItems?;
    private _callbackOnROSwapStories?;
    private _callbackOnROSwapItems?;
    private _callbackOnItemReplace?;
    private _callbackOnObjectCreate?;
    private _callbackOnRequestObjectActionNew?;
    private _callbackOnRequestObjectActionUpdate?;
    private _callbackOnRequestObjectActionDelete?;
    private _callbackOnRequestObjectList?;
    private _callbackOnRequestSearchableSchema?;
    private _callbackOnRequestAllRunningOrders?;
    private _callbackOnRunningOrderStory?;
    constructor(idPrimary: string, idSecondary: string | null, connectionConfig: IConnectionConfig, primaryConnection: NCSServerConnection | null, secondaryConnection: NCSServerConnection | null, offSpecFailover: boolean, strict: boolean);
    /** True if MOS-device has connection to server (can send messages) */
    get hasConnection(): boolean;
    /** Primary ID (probably the NCS-ID) */
    get idPrimary(): string;
    /** Secondary / Buddy ID (probably the MOS-ID) */
    get idSecondary(): string | null;
    /** Host name (IP-address) of the primary server */
    get primaryHost(): string | null;
    /** Name (ID) of the primary server */
    get primaryId(): string | null;
    /** Host name (IP-address) of the secondary (buddy) server */
    get secondaryHost(): string | null;
    /** Name (ID) of the secondary (buddy) server */
    get secondaryId(): string | null;
    connect(): void;
    dispose(): Promise<void>;
    routeData(data: AnyXMLObject, port: MosModel.PortType): Promise<any>;
    requestMachineInfo(): Promise<IMOSListMachInfo>;
    onRequestMachineInfo(cb: () => Promise<IMOSListMachInfo>): void;
    onConnectionChange(cb: (connectionStatus: IMOSConnectionStatus) => void): void;
    getConnectionStatus(): IMOSConnectionStatus;
    /** @deprecated getMachineInfo is deprecated, use requestMachineInfo instead */
    getMachineInfo(): Promise<IMOSListMachInfo>;
    /** @deprecated onGetMachineInfo is deprecated, use onRequestMachineInfo instead */
    onGetMachineInfo(cb: () => Promise<IMOSListMachInfo>): void;
    sendMOSObject(obj: IMOSObject): Promise<IMOSAck>;
    onRequestMOSObject(cb: (objId: string) => Promise<IMOSObject | null>): void;
    sendRequestMOSObject(objID: IMOSString128): Promise<IMOSObject>;
    onRequestAllMOSObjects(cb: () => Promise<Array<IMOSObject>>): void;
    onMOSObjects(cb: (objs: IMOSObject[]) => Promise<IMOSAck>): void;
    sendRequestAllMOSObjects(pause?: number): Promise<IMOSAck>;
    /**
     * https://mosprotocol.com/wp-content/MOS-Protocol-Documents/MOS-Protocol-2.8.4-Current.htm#mosListAll
     */
    private _sendAllMOSObjects;
    /**
     * @deprecated getMOSObject is deprecated, use sendRequestMOSObject instead
     */
    getMOSObject(objId: IMOSString128): Promise<IMOSObject>;
    /** @deprecated getAllMOSObjects is deprecated, use sendRequestAllMOSObjects instead */
    getAllMOSObjects(): Promise<IMOSAck>;
    onCreateRunningOrder(cb: (ro: IMOSRunningOrder) => Promise<IMOSROAck>): void;
    sendCreateRunningOrder(ro: IMOSRunningOrder): Promise<IMOSROAck>;
    onReplaceRunningOrder(cb: (ro: IMOSRunningOrder) => Promise<IMOSROAck>): void;
    sendReplaceRunningOrder(ro: IMOSRunningOrder): Promise<IMOSROAck>;
    onDeleteRunningOrder(cb: (runningOrderId: IMOSString128) => Promise<IMOSROAck>): void;
    sendDeleteRunningOrder(runningOrderId: IMOSString128): Promise<IMOSROAck>;
    onRequestRunningOrder(cb: (runningOrderId: IMOSString128) => Promise<IMOSRunningOrder | null>): void;
    sendRequestRunningOrder(runningOrderId: IMOSString128): Promise<IMOSRunningOrder | null>;
    /**
     * @deprecated getRunningOrder is deprecated, use sendRequestRunningOrder instead
     */
    getRunningOrder(runningOrderId: IMOSString128): Promise<IMOSRunningOrder | null>;
    onMetadataReplace(cb: (metadata: IMOSRunningOrderBase) => Promise<IMOSROAck>): void;
    sendMetadataReplace(metadata: IMOSRunningOrderBase): Promise<IMOSROAck>;
    onRunningOrderStatus(cb: (status: IMOSRunningOrderStatus) => Promise<IMOSROAck>): void;
    onStoryStatus(cb: (status: IMOSStoryStatus) => Promise<IMOSROAck>): void;
    onItemStatus(cb: (status: IMOSItemStatus) => Promise<IMOSROAck>): void;
    /** @deprecated setRunningOrderStatus is deprecated, use sendRunningOrderStatus instead */
    setRunningOrderStatus(status: IMOSRunningOrderStatus): Promise<IMOSROAck>;
    /** @deprecated setStoryStatus is deprecated, use sendStoryStatus instead */
    setStoryStatus(status: IMOSStoryStatus): Promise<IMOSROAck>;
    /** @deprecated setItemStatus is deprecated, use sendItemStatus instead */
    setItemStatus(status: IMOSItemStatus): Promise<IMOSROAck>;
    sendRunningOrderStatus(status: IMOSRunningOrderStatus): Promise<IMOSROAck>;
    sendStoryStatus(status: IMOSStoryStatus): Promise<IMOSROAck>;
    sendItemStatus(status: IMOSItemStatus): Promise<IMOSROAck>;
    onReadyToAir(cb: (Action: IMOSROReadyToAir) => Promise<IMOSROAck>): void;
    sendReadyToAir(Action: IMOSROReadyToAir): Promise<IMOSROAck>;
    onROInsertStories(cb: (Action: IMOSStoryAction, Stories: Array<IMOSROStory>) => Promise<IMOSROAck>): void;
    sendROInsertStories(Action: IMOSStoryAction, Stories: Array<IMOSROStory>): Promise<IMOSROAck>;
    onROInsertItems(cb: (Action: IMOSItemAction, Items: Array<IMOSItem>) => Promise<IMOSROAck>): void;
    sendROInsertItems(Action: IMOSItemAction, Items: Array<IMOSItem>): Promise<IMOSROAck>;
    onROReplaceStories(cb: (Action: IMOSStoryAction, Stories: Array<IMOSROStory>) => Promise<IMOSROAck>): void;
    sendROReplaceStories(Action: IMOSStoryAction, Stories: Array<IMOSROStory>): Promise<IMOSROAck>;
    onROReplaceItems(cb: (Action: IMOSItemAction, Items: Array<IMOSItem>) => Promise<IMOSROAck>): void;
    sendROReplaceItems(Action: IMOSItemAction, Items: Array<IMOSItem>): Promise<IMOSROAck>;
    onROMoveStories(cb: (Action: IMOSStoryAction, Stories: Array<IMOSString128>) => Promise<IMOSROAck>): void;
    sendROMoveStories(Action: IMOSStoryAction, Stories: Array<IMOSString128>): Promise<IMOSROAck>;
    onROMoveItems(cb: (Action: IMOSItemAction, Items: Array<IMOSString128>) => Promise<IMOSROAck>): void;
    sendROMoveItems(Action: IMOSItemAction, Items: Array<IMOSString128>): Promise<IMOSROAck>;
    onRODeleteStories(cb: (Action: IMOSROAction, Stories: Array<IMOSString128>) => Promise<IMOSROAck>): void;
    sendRODeleteStories(Action: IMOSROAction, Stories: Array<IMOSString128>): Promise<IMOSROAck>;
    onRODeleteItems(cb: (Action: IMOSStoryAction, Items: Array<IMOSString128>) => Promise<IMOSROAck>): void;
    sendRODeleteItems(Action: IMOSStoryAction, Items: Array<IMOSString128>): Promise<IMOSROAck>;
    onROSwapStories(cb: (Action: IMOSROAction, StoryID0: IMOSString128, StoryID1: IMOSString128) => Promise<IMOSROAck>): void;
    sendROSwapStories(Action: IMOSROAction, StoryID0: IMOSString128, StoryID1: IMOSString128): Promise<IMOSROAck>;
    onROSwapItems(cb: (Action: IMOSStoryAction, ItemID0: IMOSString128, ItemID1: IMOSString128) => Promise<IMOSROAck>): void;
    sendROSwapItems(Action: IMOSStoryAction, ItemID0: IMOSString128, ItemID1: IMOSString128): Promise<IMOSROAck>;
    onObjectCreate(cb: (object: IMOSObject) => Promise<IMOSAck>): void;
    sendObjectCreate(object: IMOSObject): Promise<IMOSAck>;
    onItemReplace(cb: (roID: IMOSString128, storyID: IMOSString128, item: IMOSItem) => Promise<IMOSROAck>): void;
    sendItemReplace(options: MosItemReplaceOptions): Promise<IMOSROAck>;
    onRequestSearchableSchema(cb: (username: string) => Promise<IMOSListSearchableSchema>): void;
    sendRequestSearchableSchema(username: string): Promise<IMOSListSearchableSchema>;
    onRequestObjectList(cb: (objList: IMOSRequestObjectList) => Promise<IMOSObjectList>): void;
    sendRequestObjectList(reqObjList: IMOSRequestObjectList): Promise<IMOSObjectList>;
    onRequestObjectActionNew(cb: (obj: IMOSObject) => Promise<IMOSAck>): void;
    sendRequestObjectActionNew(obj: IMOSObject): Promise<IMOSAck>;
    onRequestObjectActionUpdate(cb: (objId: IMOSString128, obj: IMOSObject) => Promise<IMOSAck>): void;
    sendRequestObjectActionUpdate(objId: IMOSString128, obj: IMOSObject): Promise<IMOSAck>;
    onRequestObjectActionDelete(cb: (objId: IMOSString128) => Promise<IMOSAck>): void;
    sendRequestObjectActionDelete(objId: IMOSString128): Promise<IMOSAck>;
    /** @deprecated onMosObjCreate is deprecated, use onObjectCreate instead */
    onMosObjCreate(cb: (object: IMOSObject) => Promise<IMOSAck>): void;
    /** @deprecated mosObjCreate is deprecated, use sendObjectCreate instead */
    mosObjCreate(object: IMOSObject): Promise<IMOSAck>;
    /** @deprecated onMosItemReplace is deprecated, use onItemReplace instead */
    onMosItemReplace(cb: (roID: IMOSString128, storyID: IMOSString128, item: IMOSItem) => Promise<IMOSROAck>): void;
    /** @deprecated mosItemReplace is deprecated, use sendItemReplace instead */
    mosItemReplace(options: MosItemReplaceOptions): Promise<IMOSROAck>;
    /** @deprecated onMosReqSearchableSchema is deprecated, use onRequestSearchableSchema instead */
    onMosReqSearchableSchema(cb: (username: string) => Promise<IMOSListSearchableSchema>): void;
    /** @deprecated mosRequestSearchableSchema is deprecated, use sendRequestSearchableSchema instead */
    mosRequestSearchableSchema(username: string): Promise<IMOSListSearchableSchema>;
    /** @deprecated onMosReqObjectList is deprecated, use onRequestObjectList instead */
    onMosReqObjectList(cb: (objList: IMOSRequestObjectList) => Promise<IMOSObjectList>): void;
    /** @deprecated mosRequestObjectList is deprecated, use sendRequestObjectList instead */
    mosRequestObjectList(reqObjList: IMOSRequestObjectList): Promise<IMOSObjectList>;
    /** @deprecated onMosReqObjectAction is deprecated, use onRequestObjectAction*** instead */
    onMosReqObjectAction(_cb: (action: string, obj: IMOSObject) => Promise<IMOSAck>): void;
    onRequestAllRunningOrders(cb: () => Promise<IMOSRunningOrder[]>): void;
    sendRequestAllRunningOrders(): Promise<Array<IMOSRunningOrderBase>>;
    onRunningOrderStory(cb: (story: IMOSROFullStory) => Promise<IMOSROAck>): void;
    sendRunningOrderStory(story: IMOSROFullStory): Promise<IMOSROAck>;
    /** @deprecated onROReqAll is deprecated, use onRequestAllRunningOrders instead */
    onROReqAll(cb: () => Promise<IMOSRunningOrder[]>): void;
    /** @deprecated getAllRunningOrders is deprecated, use sendRequestAllRunningOrders instead */
    getAllRunningOrders(): Promise<Array<IMOSRunningOrderBase>>;
    /** @deprecated onROStory is deprecated, use onRunningOrderStory instead */
    onROStory(cb: (story: IMOSROFullStory) => Promise<IMOSROAck>): void;
    /** @deprecated sendROStory is deprecated, use sendRunningOrderStory instead */
    sendROStory(story: IMOSROFullStory): Promise<IMOSROAck>;
    setDebug(debug: boolean): void;
    /**
     * Do a check if the profile is valid. Throws if not.
     * Optionally called after a mosDevice has been set up to ensure that all callbacks have been set up properly.
     */
    checkProfileValidness(): void;
    /** Does a check if the specified profile is set, and throws otherwise */
    private checkProfile;
    private executeCommand;
    private switchConnections;
    private switchConnectionsAndExecuteCommand;
    private _emitConnectionChange;
    private handleParseReply;
    private unknownReply;
    private badRoAckReply;
    /** throws if there is an error */
    private _ensureReply;
    private _scheduleCheckProfileValidness;
    /**
     * Checks that all callbacks have been set up properly, according to which MOS-profile have been set in the options.
     * throws if something's wrong
     */
    private _checkProfileValidness;
    private debugTrace;
}
export interface IProfiles {
    profile0: boolean;
    profile1: boolean;
    profile2: boolean;
    profile3: boolean;
    profile4: boolean;
    profile5: boolean;
    profile6: boolean;
    profile7: boolean;
}
//# sourceMappingURL=MosDevice.d.ts.map