/** * bundle socket 的时候,这个文件是 tsc 的一个 entry * import 一下需要的 Rx 操作符 */ import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/toPromise'; import 'rxjs/add/operator/concatMap'; import 'rxjs/add/operator/take'; import { Net } from '../Net'; import { Database } from '../db'; import { SDKFetch, SDKFetchOptions } from '../SDKFetch'; import { Interceptors, Proxy } from './Middleware'; import * as Consumer from 'snapper-consumer'; import { UserMe } from '../schemas/UserMe'; import { TableInfoByMessageType } from './MapToTable'; export declare class SocketClient { private fetch; private net; private mapToTable; private _isDebug; private _client; private _socketUrl; private _consumerId; private _getUserMeStream; private _joinedRoom; private _leavedRoom; /** * 拦截器序列。如果需要在消息接触 db 之前对起进行额外的过滤、变换 * 等操作,可以在这里添加相应 handler。 */ interceptors: Interceptors; /** * 代理。如果需要获得不会接触 db 的消息(与数据模型无关),比如界面 * 状态变更的消息等,可以在这里注册相应 handler。 */ proxy: Proxy; private handleMsgToDB; private handleMsg; private database; constructor(fetch: SDKFetch, net: Net, mapToTable: TableInfoByMessageType); destroy(): void; debug(): void; /** * 常见的 url 参数有(它们的值一般写在配置文件里) * - `https://messaging.__domain__`(如公有云部署) * - `wss://__host__/messaging`(如私有云部署) * * 注意:`url` 参数并不是最终被用来与服务器端链接的 url;目前 teambition * 服务端要求 websocket 链接的目标 url 以 `/websocket` 结尾, * 所以参数里提供的 url 如果不是以 `/websocket` 结尾(一般配置都会 * 省略这个路径片段),请求时会在 url 的路径上加上 `websocket` 片段, * 如:`https://messaging.teambition.net/websocket`。 */ setSocketUrl(url: string): void; initClient(client: Consumer, userMe?: UserMe): Promise; initReactiveDB(database: Database): void; connect(): Promise; getConsumerId(): string | undefined; /** * uri 格式: :type/:id * eg: projects, organizations/554c83b1b2c809b4715d17b0 */ join(uri: string): Consumer | undefined; leave(uri: string): Promise; private _onopen; private _connect; private _onmessage; private _getToken; private _join; } export declare function leaveRoom(this: SDKFetch, room: string, consumerId: string, options?: SDKFetchOptions): Promise; export declare function joinRoom(this: SDKFetch, room: string, consumerId: string, options?: SDKFetchOptions): Promise; declare module '../SDKFetch' { interface SDKFetch { joinRoom: typeof joinRoom; leaveRoom: typeof leaveRoom; } }