Adds websocket service

Adds RXJS for websocket use
This commit is contained in:
GloriousCode
2017-08-28 17:40:59 +10:00
parent d1753b85b0
commit af2d8cf157
5 changed files with 65 additions and 8 deletions

View File

@@ -14,16 +14,20 @@ import { HomeComponent } from './pages/home/home.component';
import { AboutComponent } from './pages/about/about.component';
import { AppRoutingModule } from './app-routing.module';
import { WebsocketService } from './services/websocket/websocket.service';
import { ElectronService } from './providers/electron.service';
import { NavbarComponent } from './shared/navbar/navbar.component';
import * as Rx from 'rxjs/Rx';
import {Injectable} from '@angular/core';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
AboutComponent,
NavbarComponent
NavbarComponent,
WebsocketService
],
imports: [
BrowserModule,

View File

@@ -0,0 +1,15 @@
import { TestBed, inject } from '@angular/core/testing';
import { WebsocketService } from './websocket.service';
describe('WebsocketService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [WebsocketService]
});
});
it('should be created', inject([WebsocketService], (service: WebsocketService) => {
expect(service).toBeTruthy();
}));
});

View File

@@ -0,0 +1,39 @@
import { Injectable } from '@angular/core';
import * as Rx from 'rxjs/Rx';
@Injectable()
export class WebsocketService {
private socket: Rx.Subject<MessageEvent>;
public connect(url): Rx.Subject<MessageEvent> {
if(!this.socket) {
this.socket = this.create(url);
}
return this.socket;
}
private create(url): Rx.Subject<MessageEvent> {
let ws = new WebSocket(url);
let observable = Rx.Observable.create(
(obs: Rx.Observer<MessageEvent>) => {
ws.onmessage = obs.next.bind(obs);
ws.onerror = obs.error.bind(obs);
ws.onclose = obs.complete.bind(obs);
return ws.close.bind(ws);
}
);
let observer = {
next: (data: Object) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(data));
}
},
};
return Rx.Subject.create(observer, observable);
}
}