Skip to content
This repository was archived by the owner on Apr 20, 2018. It is now read-only.

Commit 7fa5f15

Browse files
Adding server-sent events
1 parent 584e899 commit 7fa5f15

File tree

6 files changed

+108
-2
lines changed

6 files changed

+108
-2
lines changed

Gruntfile.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module.exports = function (grunt) {
3232
'src/jsonp.js',
3333
'src/websocket.js',
3434
'src/webworker.js',
35+
'src/evensource.js',
3536
'src/mutationobserver.js',
3637
'src/requestanimationframescheduler.js',
3738
'src/mutationobserverscheduler.js',
@@ -52,6 +53,7 @@ module.exports = function (grunt) {
5253
'src/jsonp.js',
5354
'src/websocket.js',
5455
'src/webworker.js',
56+
'src/evensource.js',
5557
'src/mutationobserver.js',
5658
'src/requestanimationframescheduler.js',
5759
'src/mutationobserverscheduler.js',

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rxjs-dom",
3-
"version": "4.0.0",
3+
"version": "4.0.1",
44
"main": "dist/rx.dom.js",
55
"dependencies": {
66
"rxjs": "*"

doc/operators/fromeventsource.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
### `Rx.DOM.from(url, [openObserver])`
2+
[Ⓢ](https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/src/eventsource.js "View in source")
3+
4+
This method wraps an EventSource as an observable sequence which is used to send server-side events. Note that your browser must support EventSource objects.
5+
6+
#### Arguments
7+
1. `url` *(String)*: The URL of the Server-Side Events.
8+
3. `[openObserver]` *(`Rx.Observer`)*: An optional Observer to capture the open event.
9+
10+
#### Returns
11+
*(`Observable`)*: An observable sequence which represents the data from a server-side event.
12+
13+
#### Example
14+
```js
15+
// Using a function for the open
16+
var source = Rx.DOM.fromEventSource('foo.php');
17+
18+
source.subscribe(function (e) {
19+
console.log('Received data: ' + e.data);
20+
});
21+
22+
23+
// Using an observer for the open
24+
var observer = Rx.Observer.create(function (e) {
25+
console.log('Opening');
26+
});
27+
28+
// Using a function for the open
29+
var source = Rx.DOM.fromEventSource('foo.php', observer);
30+
31+
socket.subscribe(function (e) {
32+
console.log('Received data: ' + e.data);
33+
});
34+
35+
socket.onNext('data');
36+
```
37+
38+
### Location
39+
40+
File:
41+
- [`/src/eventsource.js`](https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/src/eventsource.js)
42+
43+
Dist:
44+
- [`rx.dom.js`](https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/dist/rx.dom.js) | - [`rx.dom.compat.js`](https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/dist/rx.dom.compat.js)
45+
46+
Prerequisites:
47+
- If using `rx.js`
48+
- [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js)
49+
- [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js)
50+
- [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/rx.lite.compat.js)
51+
52+
NPM Packages:
53+
- [`rx-dom`](https://preview.npmjs.com/package/rx-dom)
54+
55+
NuGet Packages:
56+
- [`RxJS-Bridges-HTML`](http://www.nuget.org/packages/RxJS-Bridges-HTML/)
57+
58+
Unit Tests:
59+
- [`/tests/tests.eventsource.js](https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/tests/tests.eventsource.js)

doc/readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ This section contains the reference documentation for the Reactive Extensions fo
6464
- [`Rx.DOM.post`](operators/post.md)
6565
- [`Rx.DOM.jsonpRequest`](operators/jsonprequest.md)
6666

67+
Server-Sent Events
68+
- [`Rx.DOM.fromEventSource`](operators/fromeventsource.md)
69+
6770
Web Sockets
6871

6972
- [`Rx.DOM.fromWebSocket`](operators/fromwebsocket.md)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "rx-dom",
33
"title": "The Reactive Extensions Bindings for the DOM.",
44
"description": "Library for using DOM elements as well as Ajax requests",
5-
"version": "4.0.0",
5+
"version": "4.0.1",
66
"homepage": "https://github.com/Reactive-Extensions/RxJS-DOM",
77
"author": {
88
"name": "MS Open Tech",

src/eventsource.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
if (!!root.EventSource) {
2+
3+
/**
4+
* This method wraps an EventSource as an observable sequence.
5+
* @param {String} url The url of the server-side script.
6+
* @param {Observer} [openObserver] An optional observer for the 'open' event for the server side event.
7+
* @returns {Observable} An observable sequence which represents the data from a server-side event.
8+
*/
9+
dom.fromEventSource = function (url, openObserver) {
10+
return new AnonymousObservable(function (observer) {
11+
var source = new root.EventSource(url);
12+
13+
function onOpen(e) {
14+
openObserver.onNext(e);
15+
openObserver.onCompleted();
16+
source.removeEventListener('open', onOpen, false);
17+
}
18+
19+
function onError(e) {
20+
if (e.readyState === EventSource.CLOSED) {
21+
observer.onCompleted();
22+
} else {
23+
observer.onError(e);
24+
}
25+
}
26+
27+
function onMessage(e) {
28+
observer.onNext(e);
29+
}
30+
31+
openObserver && source.addEventListener('open', onOpen, false);
32+
source.addEventListener('error', onError, false);
33+
source.addEventListener('message', onMessage, false);
34+
35+
return function () {
36+
source.removeEventListener('error', onError, false);
37+
source.removeEventListener('message', onMessage, false);
38+
source.close();
39+
};
40+
});
41+
};
42+
}

0 commit comments

Comments
 (0)