1 import RAL from './ral';
2 import { Event } from './events';
3 import { Message } from './messages';
4 import { ContentDecoder, ContentTypeDecoder } from './encoding';
5 import { Disposable } from './api';
7 * A callback that receives each incoming JSON-RPC message.
9 export interface DataCallback {
10 (data: Message): void;
12 export interface PartialMessageInfo {
13 readonly messageToken: number;
14 readonly waitingTime: number;
16 /** Reads JSON-RPC messages from some underlying transport. */
17 export interface MessageReader {
18 /** Raised whenever an error occurs while reading a message. */
19 readonly onError: Event<Error>;
20 /** An event raised when the end of the underlying transport has been reached. */
21 readonly onClose: Event<void>;
23 * An event that *may* be raised to inform the owner that only part of a message has been received.
24 * A MessageReader implementation may choose to raise this event after a timeout elapses while waiting for more of a partially received message to be received.
26 readonly onPartialMessage: Event<PartialMessageInfo>;
28 * Begins listening for incoming messages. To be called at most once.
29 * @param callback A callback for receiving decoded messages.
31 listen(callback: DataCallback): Disposable;
32 /** Releases resources incurred from reading or raising events. Does NOT close the underlying transport, if any. */
35 export declare namespace MessageReader {
36 function is(value: any): value is MessageReader;
38 export declare abstract class AbstractMessageReader implements MessageReader {
41 private partialMessageEmitter;
44 get onError(): Event<Error>;
45 protected fireError(error: any): void;
46 get onClose(): Event<void>;
47 protected fireClose(): void;
48 get onPartialMessage(): Event<PartialMessageInfo>;
49 protected firePartialMessage(info: PartialMessageInfo): void;
51 abstract listen(callback: DataCallback): Disposable;
53 export interface MessageReaderOptions {
54 charset?: RAL.MessageBufferEncoding;
55 contentDecoder?: ContentDecoder;
56 contentDecoders?: ContentDecoder[];
57 contentTypeDecoder?: ContentTypeDecoder;
58 contentTypeDecoders?: ContentTypeDecoder[];
60 export declare class ReadableStreamMessageReader extends AbstractMessageReader {
64 private nextMessageLength;
67 private partialMessageTimer;
68 private _partialMessageTimeout;
69 constructor(readable: RAL.ReadableStream, options?: RAL.MessageBufferEncoding | MessageReaderOptions);
70 set partialMessageTimeout(timeout: number);
71 get partialMessageTimeout(): number;
72 listen(callback: DataCallback): Disposable;
74 private clearPartialMessageTimer;
75 private setPartialMessageTimer;