@docsvision/webclient
Version:
Type definitions for DocsVision WebClient scripts and extensions.
149 lines (148 loc) • 7.98 kB
TypeScript
import { $CurrentEmployeeId } from "@docsvision/webclient/StandardServices";
import { $LocalStorage } from "@docsvision/webclient/System/$LocalStorage";
import { IRealtimeCommunicationService } from "@docsvision/webclient/System/$RealtimeCommunicationService";
import { IRealTimeCommunicationMessage } from "@docsvision/webclient/System/IRealTimeCommunicationMessage";
import { RealtimeServerSender } from "@docsvision/webclient/System/RealtimeServerSender";
import { RealtimeSubscriber as RealtimeSubscriberClass } from "@docsvision/webclient/System/RealtimeSubscriber";
import { NotyDef } from "@docsvision/webclient/System/PopupNotification";
/** @internal */
export interface IRealtimeMasterTabInfo {
masterTabId?: string;
connectionId?: string;
masterLastSeen?: Date;
tabs: string[];
}
/** @internal */
export interface IReceivedRealtimeMessageQueueItem {
message: IRealTimeCommunicationMessage<any>;
receivedTime: Date;
targetTabs?: string[];
}
/** @internal */
export interface ISendRealtimeMessageQueueItem {
message: IRealTimeCommunicationMessage<any>;
senderTabId: string;
}
/** @internal */
export interface ITabClosedData {
isMaster: boolean;
tabId: string;
}
/** @deprecated Use RealtimeSubscriber instead. */
export declare type RealtimeSubscriber<T> = RealtimeSubscriberClass<T>;
/** Интерфейс отправителя сообщений к серверу в режиме реального времени, используемый в {@link RealtimeCommunicationService} */
export declare class RealtimeCommunicationService implements IRealtimeCommunicationService {
private services;
private static MasterChannelType;
private static TabChannelType;
private static RegisterTabChannel;
private static RegisterTabMessage;
private static TabRegisteredMessage;
private static TabUnregisteredMessage;
/** Тип сообщения об установлении соединения с сервером. */
static ConnectedMessage: string;
/** Тип сообщения о потере соединения с сервером. */
static DisconnectedMessage: string;
/** @internal Timeout to try reconnect after connection completely lost (server is unavablable more then 30 sec). */
static ReconnectTimeout: number;
/** Тип сообщения о закрытии вкладки. */
static TabClosed: string;
popupNotification: NotyDef;
private mainLocalStorageKey;
private messagesFromMaster;
private messagesFromTabs;
private messagesToMaster;
private masterBroadcast;
private registerTabChannel?;
private customSenders;
private tabId;
private masterTabMonitorTimer;
private masterTabMonitorInterval;
private tabChannelTimeToDead;
private connection?;
private lastMasterTabId?;
private registeredAsSlave;
/** Закрывается ли эта вкладка в данный момент */
private isClosing;
private reconnectTimeout;
private clearStorageTimeout;
private pendingMessagesToServer;
/** @internal */
constructor(services: $CurrentEmployeeId & $LocalStorage);
/** Идентификатор текущей пользовательской сессии. */
get sessionId(): string;
/** Отправить сообщение на сервер. */
sendToServer<T>(message: IRealTimeCommunicationMessage<T>): void;
/** Отправить сообщение между вкладками. */
sendBetweenTabs<T>(message: IRealTimeCommunicationMessage<T>, targetTabs?: string[], sync?: boolean): void;
/** Отправить сообщение конкретной вкладке. */
sendToTab<T>(tabId: string, message: IRealTimeCommunicationMessage<T>): void;
/** Отправить сообщение вкладке, которая осуществляет взаимодействие с сервером. */
sendToMasterTab<T>(message: IRealTimeCommunicationMessage<T>): void;
/** Существуют ли подписчики данного сообщения в текущей вкладке. */
hasSubscribers(messageType: string): boolean;
/** Подписаться на сообщения определенного типа. */
subscribe<T>(messageType: string, callback: RealtimeSubscriberClass<T>): void;
/** Отписаться от сообщений определенного типа. */
unsubscribe<T>(messageType: string, callback: RealtimeSubscriberClass<T>): void;
/** Подменяет способ отправки сообщений на сервер для определенного типа сообщений. */
setServerSender(messageType: string, processor: RealtimeServerSender<any>): void;
/** Возвращает объект, заданный в {@link setServerSender}. */
getServerSender(messageType: string): RealtimeServerSender<any>;
/** Возвращает информацию о том, был ли сервис инициализирован и готов ли он к работе. */
initialized(): boolean;
/** Осуществляет ли текущая вкладка взаимодействие с сервером. */
get isMasterTab(): boolean;
/** Идентификатор текущей вкладки. */
get currentTabId(): string;
/** Идентификатор вкладки, осуществляющей взаимодействие с сервером. */
get masterTabId(): string | undefined;
/** @internal */
protected onMonitorMasterTabTimerTick: () => void;
/** @internal */
protected onInitializeSlaveTab(info: IRealtimeMasterTabInfo): void;
/** @internal */
protected onRegisteredAsSlave: (message: IRealTimeCommunicationMessage<string>) => void;
/** @internal */
protected onUnregisteredAsSlave: (message: IRealTimeCommunicationMessage<string>) => void;
/** @internal */
protected onInitializeMasterTab(info: IRealtimeMasterTabInfo): void;
/** @internal */
protected ensureDeinitializedMaster(): void;
protected onClearStorage(): void;
/** @internal */
protected onHubMessage: (message: IRealTimeCommunicationMessage<any>) => void;
/** @internal */
protected onMessageToServer: (message: IRealTimeCommunicationMessage<any>) => Promise<void>;
/** @internal */
protected onMessageToTabs(item: IRealTimeCommunicationMessage<any>, sync?: boolean): void;
/** @internal */
protected onTabOpened: (message: IRealTimeCommunicationMessage<string>) => void;
/** @internal */
protected onCurrentTabClose: () => void;
/** @internal */
protected onTabClose: (message: IRealTimeCommunicationMessage<ITabClosedData>) => void;
/** @internal */
protected closeChannelFromTab(tabId: string): void;
/** @internal */
protected openChannelFromTab(tabId: string): void;
/** @internal */
protected getMasterTabInfo(): IRealtimeMasterTabInfo;
/** @internal */
protected setMasterTabInfo(data: IRealtimeMasterTabInfo): void;
/** @internal */
protected getCurrentEmployee(): string;
/** @internal */
protected getCurrentEmployeeAccountName(): string;
/** Возвращает значение настройки из web-конфигурации. */
static get EnableSignalRLogging(): boolean;
/**
* Возвращает настройку из web-конфигурации - таймаут перед инициализацией соединения с сервером,
* для уменьшения нагрузки на сетевой канал при открытии приложения.
*/
static get SignalRInitTimeout(): number;
/** @internal */
static log(msg: string): void;
/** @internal */
static logMessage(caption: string, message: IRealTimeCommunicationMessage<any>): void;
}