rx-winjs
Version:
Library for composing asynchronous and event-based operations in JavaScript extending the Windows WinJS library
53 lines (44 loc) • 1.91 kB
JavaScript
/**
* Creates a WebSocket Subject with a given URL, protocol and an optional observer for the open event.
*
* @example
* var socket = Rx.DOM.fromWebSocket('http://localhost:8080', 'stock-protocol', function(e) { ... });
* var socket = Rx.DOM.fromWebSocket('http://localhost:8080', 'stock-protocol', observer);
*
* @param {String} url The URL of the WebSocket.
* @param {String} protocol The protocol of the WebSocket.
* @param {Function|Observer} [observerOrOnNext] An optional Observer or onNext function to capture the open event.
* @returns {Subject} An observable sequence wrapping a WebSocket.
*/
Rx.WinJS.fromWebSocket = function (url, protocol, observerOrOnNext) {
var socket = new window.WebSocket(url, protocol);
var observable = observableCreate(function (obs) {
if (observerOrOnNext) {
socket.onopen = function (openEvent) {
if (typeof observerOrOnNext === 'function') {
observerOrOnNext(openEvent);
} else if (observerOrOnNext.onNext) {
observerOrOnNext.onNext(openEvent);
}
};
}
socket.onmessage = function (data) {
obs.onNext(data);
};
socket.onerror = function (err) {
obs.onError(err);
};
socket.onclose = function () {
obs.onCompleted();
};
return function () {
socket.close();
};
});
var observer = observerCreate(function (data) {
if (socket.readyState === WebSocket.OPEN) {
socket.send(data);
}
});
return Subject.create(observer, observable);
};