147 lines
4.0 KiB
TypeScript
147 lines
4.0 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;
|
|||
|
/**
|
|||
|
* 是否已经连接
|
|||
|
*/
|
|||
|
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 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;
|
|||
|
/**
|
|||
|
* 取消所有订阅,从通用Stomp客户端移除此消息代理
|
|||
|
*/
|
|||
|
close(): void;
|
|||
|
}
|
|||
|
export {};
|