123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import { Subject, AnonymousSubject } from '../../Subject';
- import { Subscriber } from '../../Subscriber';
- import { Observable } from '../../Observable';
- import { Subscription } from '../../Subscription';
- import { Operator } from '../../Operator';
- import { Observer, NextObserver } from '../../types';
- /**
- * WebSocketSubjectConfig is a plain Object that allows us to make our
- * webSocket configurable.
- *
- * <span class="informal">Provides flexibility to {@link webSocket}</span>
- *
- * It defines a set of properties to provide custom behavior in specific
- * moments of the socket's lifecycle. When the connection opens we can
- * use `openObserver`, when the connection is closed `closeObserver`, if we
- * are interested in listening for data comming from server: `deserializer`,
- * which allows us to customize the deserialization strategy of data before passing it
- * to the socket client. By default `deserializer` is going to apply `JSON.parse` to each message comming
- * from the Server.
- *
- * ## Example
- * **deserializer**, the default for this property is `JSON.parse` but since there are just two options
- * for incomming data, either be text or binarydata. We can apply a custom deserialization strategy
- * or just simply skip the default behaviour.
- * ```ts
- * import { webSocket } from 'rxjs/webSocket';
- *
- * const wsSubject = webSocket({
- * url: 'ws://localhost:8081',
- * //Apply any transformation of your choice.
- * deserializer: ({data}) => data
- * });
- *
- * wsSubject.subscribe(console.log);
- *
- * // Let's suppose we have this on the Server: ws.send("This is a msg from the server")
- * //output
- * //
- * // This is a msg from the server
- * ```
- *
- * **serializer** allows us tom apply custom serialization strategy but for the outgoing messages
- * ```ts
- * import { webSocket } from 'rxjs/webSocket';
- *
- * const wsSubject = webSocket({
- * url: 'ws://localhost:8081',
- * //Apply any transformation of your choice.
- * serializer: msg => JSON.stringify({channel: "webDevelopment", msg: msg})
- * });
- *
- * wsSubject.subscribe(() => subject.next("msg to the server"));
- *
- * // Let's suppose we have this on the Server: ws.send("This is a msg from the server")
- * //output
- * //
- * // {"channel":"webDevelopment","msg":"msg to the server"}
- * ```
- *
- * **closeObserver** allows us to set a custom error when an error raise up.
- * ```ts
- * import { webSocket } from 'rxjs/webSocket';
- *
- * const wsSubject = webSocket({
- * url: 'ws://localhost:8081',
- * closeObserver: {
- next(closeEvent) {
- const customError = { code: 6666, reason: "Custom evil reason" }
- console.log(`code: ${customError.code}, reason: ${customError.reason}`);
- }
- }
- * });
- *
- * //output
- * // code: 6666, reason: Custom evil reason
- * ```
- *
- * **openObserver**, Let's say we need to make some kind of init task before sending/receiving msgs to the
- * webSocket or sending notification that the connection was successful, this is when
- * openObserver is usefull for.
- * ```ts
- * import { webSocket } from 'rxjs/webSocket';
- *
- * const wsSubject = webSocket({
- * url: 'ws://localhost:8081',
- * openObserver: {
- * next: () => {
- * console.log('connetion ok');
- * }
- * },
- * });
- *
- * //output
- * // connetion ok`
- * ```
- * */
- export interface WebSocketSubjectConfig<T> {
- /** The url of the socket server to connect to */
- url: string;
- /** The protocol to use to connect */
- protocol?: string | Array<string>;
- /** @deprecated use {@link deserializer} */
- resultSelector?: (e: MessageEvent) => T;
- /**
- * A serializer used to create messages from passed values before the
- * messages are sent to the server. Defaults to JSON.stringify.
- */
- serializer?: (value: T) => WebSocketMessage;
- /**
- * A deserializer used for messages arriving on the socket from the
- * server. Defaults to JSON.parse.
- */
- deserializer?: (e: MessageEvent) => T;
- /**
- * An Observer that watches when open events occur on the underlying web socket.
- */
- openObserver?: NextObserver<Event>;
- /**
- * An Observer than watches when close events occur on the underlying webSocket
- */
- closeObserver?: NextObserver<CloseEvent>;
- /**
- * An Observer that watches when a close is about to occur due to
- * unsubscription.
- */
- closingObserver?: NextObserver<void>;
- /**
- * A WebSocket constructor to use. This is useful for situations like using a
- * WebSocket impl in Node (WebSocket is a DOM API), or for mocking a WebSocket
- * for testing purposes
- */
- WebSocketCtor?: {
- new (url: string, protocols?: string | string[]): WebSocket;
- };
- /** Sets the `binaryType` property of the underlying WebSocket. */
- binaryType?: 'blob' | 'arraybuffer';
- }
- export declare type WebSocketMessage = string | ArrayBuffer | Blob | ArrayBufferView;
- export declare class WebSocketSubject<T> extends AnonymousSubject<T> {
- private _config;
- /** @deprecated This is an internal implementation detail, do not use. */
- _output: Subject<T>;
- private _socket;
- constructor(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>);
- lift<R>(operator: Operator<T, R>): WebSocketSubject<R>;
- private _resetState;
- /**
- * Creates an {@link Observable}, that when subscribed to, sends a message,
- * defined by the `subMsg` function, to the server over the socket to begin a
- * subscription to data over that socket. Once data arrives, the
- * `messageFilter` argument will be used to select the appropriate data for
- * the resulting Observable. When teardown occurs, either due to
- * unsubscription, completion or error, a message defined by the `unsubMsg`
- * argument will be send to the server over the WebSocketSubject.
- *
- * @param subMsg A function to generate the subscription message to be sent to
- * the server. This will still be processed by the serializer in the
- * WebSocketSubject's config. (Which defaults to JSON serialization)
- * @param unsubMsg A function to generate the unsubscription message to be
- * sent to the server at teardown. This will still be processed by the
- * serializer in the WebSocketSubject's config.
- * @param messageFilter A predicate for selecting the appropriate messages
- * from the server for the output stream.
- */
- multiplex(subMsg: () => any, unsubMsg: () => any, messageFilter: (value: T) => boolean): Observable<any>;
- private _connectSocket;
- /** @deprecated This is an internal implementation detail, do not use. */
- _subscribe(subscriber: Subscriber<T>): Subscription;
- unsubscribe(): void;
- }
|