import { KnownTransports, TransmissionModes } from "types";
import { IDisposable } from "./IDisposable";
import { IMessage } from "./IMessage";

export type MessageReceiveCallback = (msg: IMessage) => Promise<IMessage>;

export interface ITransport extends IDisposable {

    getName(): KnownTransports;
    getCustomDriverName?(): string;

    getTransmissionMode(): TransmissionModes;

    start(config?: any): Promise<void>;

    stop(): Promise<void>;


    sendAsync(message: IMessage): Promise<IMessage>;

    subscribe(callback: MessageReceiveCallback): IDisposable;

}
