Last active
August 21, 2019 21:52
-
-
Save timjonesdev/30525c27fde2d51e1e21241b9db79338 to your computer and use it in GitHub Desktop.
Subscribe to a Server Sent Event
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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