Skip to content

Instantly share code, notes, and snippets.

@timjonesdev
Last active August 21, 2019 21:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timjonesdev/30525c27fde2d51e1e21241b9db79338 to your computer and use it in GitHub Desktop.
Save timjonesdev/30525c27fde2d51e1e21241b9db79338 to your computer and use it in GitHub Desktop.
Subscribe to a Server Sent Event
import {Injectable, NgZone} from '@angular/core';
import {environment} from '../../environments/environment';
import {BehaviorSubject, Observable} from "rxjs";
import {TeamModel} from "../models/team.model";
@Injectable({
providedIn: 'root'
})
export class TeamService {
private teamsWatchUrl = environment.backendUrl + environment.watchTeamsPath;
constructor(private zone: NgZone){}
/**
* Subscribe to the teams update Server Sent Event stream
*/
getTeamsStream(): Observable<TeamModel> {
return new Observable((observer) => {
let url = this.teamsWatchUrl;
let eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
let json = JSON.parse(event.data);
if (json !== undefined && json !== '') {
this.zone.run(() => observer.next(json));
}
};
eventSource.onerror = (error) => {
if (eventSource.readyState === 0) {
console.log('The stream has been closed by the server.');
eventSource.close();
observer.complete();
} else {
observer.error('EventSource error: ' + error);
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment