155 lines
4.3 KiB
TypeScript
155 lines
4.3 KiB
TypeScript
import EventEmitter from 'eventemitter3';
|
||
import { IGraphicScene } from '../app';
|
||
import { GraphicQueryStore, GraphicState, JlGraphic } from '../core';
|
||
import { IMessageHandler, MessageClientEvents } from './BasicMessageClient';
|
||
export declare enum ClientEngine {
|
||
Stomp = 0,
|
||
MQTT = 1
|
||
}
|
||
export interface MessageCliOption {
|
||
/**
|
||
* 客户端引擎
|
||
*/
|
||
engine?: ClientEngine;
|
||
/**
|
||
* 消息协议,默认protobuf
|
||
*/
|
||
protocol?: 'json' | 'protobuf';
|
||
/**
|
||
* websocket url地址
|
||
*/
|
||
wsUrl: string;
|
||
/**
|
||
* 认证token
|
||
*/
|
||
token?: string;
|
||
/**
|
||
* 项目名称(可用于订阅客户端识别)
|
||
*/
|
||
clientName?: string;
|
||
/**
|
||
* 连接超时,默认30秒,ms
|
||
*/
|
||
connectTimeout?: number;
|
||
/**
|
||
* 心跳发送间隔,默认60秒,s
|
||
*/
|
||
heartbeat?: number;
|
||
/**
|
||
* 重试间隔,默认2秒,ms
|
||
*/
|
||
retryPeriod?: number;
|
||
/**
|
||
* 重试次数,默认100次
|
||
*/
|
||
retryTimes?: number;
|
||
}
|
||
export interface CompleteMessageCliOption extends MessageCliOption {
|
||
protocol: 'json' | 'protobuf';
|
||
connectTimeout: number;
|
||
heartbeat: number;
|
||
retryPeriod: number;
|
||
retryTimes: number;
|
||
}
|
||
export interface IMessageClient extends EventEmitter<MessageClientEvents> {
|
||
/**
|
||
* 添加订阅
|
||
* @param destination
|
||
* @param handler
|
||
*/
|
||
addSubscription(destination: string, handler: IMessageHandler): void;
|
||
/**
|
||
* 移除订阅
|
||
* @param destination
|
||
* @param handler
|
||
*/
|
||
removeSubscription(destination: string, handler: IMessageHandler): void;
|
||
/**
|
||
* 发布消息
|
||
* @param destination
|
||
* @param message
|
||
*/
|
||
publishMessage(destination: string, message: Uint8Array): void;
|
||
/**
|
||
* 是否已经连接
|
||
*/
|
||
get connected(): boolean;
|
||
/**
|
||
* 关闭连接
|
||
*/
|
||
close(): void;
|
||
}
|
||
export declare class WsMsgCli {
|
||
private static client;
|
||
private static options;
|
||
private static appMsgBroker;
|
||
static new(options: MessageCliOption): void;
|
||
static isInitiated(): boolean;
|
||
static emitConnectStateChangeEvent(connected: boolean): void;
|
||
static isConnected(): boolean;
|
||
static registerSubscription(destination: string, handler: IMessageHandler): void;
|
||
static unregisterSubscription(destination: string, handler: IMessageHandler): void;
|
||
static registerAppMsgBroker(broker: AppWsMsgBroker): void;
|
||
static publishMessage(destination: string, message: Uint8Array): void;
|
||
static removeAppMsgBroker(broker: AppWsMsgBroker): void;
|
||
static hasAppMsgBroker(): boolean;
|
||
/**
|
||
* 关闭websocket连接
|
||
*/
|
||
static close(): void;
|
||
}
|
||
export type GraphicStateMessageConvert = (message: Uint8Array) => GraphicState[];
|
||
export type GraphicQuery = (state: GraphicState, store: GraphicQueryStore) => JlGraphic | undefined;
|
||
export type SubscriptionMessageHandle = (message: Uint8Array) => void;
|
||
export interface ICreateOnNotFound {
|
||
graphicTypes?: string[];
|
||
}
|
||
export interface AppStateSubscription {
|
||
/**
|
||
* 订阅路径
|
||
*/
|
||
destination: string;
|
||
/**
|
||
* 图形状态消息转换
|
||
*/
|
||
messageConverter?: GraphicStateMessageConvert;
|
||
/**
|
||
* 根据状态查询图形对象,默认为根据code和type查询图形对象
|
||
*/
|
||
graphicQueryer?: GraphicQuery;
|
||
/**
|
||
* 当未根据状态找到图形对象时是否创建新对象
|
||
* 值为设备类型列表
|
||
*/
|
||
createOnNotFound?: ICreateOnNotFound;
|
||
/**
|
||
* 订阅消息处理
|
||
*/
|
||
messageHandle?: SubscriptionMessageHandle;
|
||
}
|
||
declare class AppMessageHandler implements IMessageHandler {
|
||
app: IGraphicScene;
|
||
sub: AppStateSubscription;
|
||
constructor(app: IGraphicScene, subOptions: AppStateSubscription);
|
||
get App(): IGraphicScene;
|
||
handle(data: any): void;
|
||
}
|
||
/**
|
||
* 图形APP的websocket消息代理
|
||
*/
|
||
export declare class AppWsMsgBroker {
|
||
app: IGraphicScene;
|
||
subscriptions: Map<string, AppMessageHandler>;
|
||
constructor(app: IGraphicScene);
|
||
subscribe(sub: AppStateSubscription): void;
|
||
unsbuscribe(destination: string): void;
|
||
unsubscribeAll(): void;
|
||
resubscribeAll(): void;
|
||
publishMessage(destination: string, message: Uint8Array): void;
|
||
/**
|
||
* 取消所有订阅,从通用Stomp客户端移除此消息代理
|
||
*/
|
||
close(): void;
|
||
}
|
||
export {};
|