SES-116 Create icons provider and show them on gm screen #45
@ -26,6 +26,7 @@ import { StoreDevtoolsModule } from '@ngrx/store-devtools';
|
|||||||
import { reducers} from './reducers';
|
import { reducers} from './reducers';
|
||||||
import {AppReducer} from './store/reducers/app.reducer';
|
import {AppReducer} from './store/reducers/app.reducer';
|
||||||
import {environment} from '../environments/environment';
|
import {environment} from '../environments/environment';
|
||||||
|
import {CharacterService} from '../services/character.service';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
@ -60,7 +61,8 @@ BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
UserService
|
UserService,
|
||||||
|
CharacterService
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
})
|
})
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import {Component, OnInit} from '@angular/core';
|
import {Component, OnDestroy, OnInit} from '@angular/core';
|
||||||
import {animateText, onSideNavChange} from '../../shared/animations/sidenav-animations';
|
import {animateText, onSideNavChange} from '../../shared/animations/sidenav-animations';
|
||||||
import {GMSignalRService} from '../../shared/signalR-service/gm-signalR.service';
|
import {GMSignalRService} from '../../shared/signalR-service/gm-signalR.service';
|
||||||
|
import {CharacterService} from '../../../services/character.service';
|
||||||
|
import {Subscription} from 'rxjs';
|
||||||
|
import {ErrorResponse} from '../../../types/ErrorResponse';
|
||||||
|
import {HttpErrorResponse} from '@angular/common/http';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
|||||||
selector: 'app-game-master-dashboard',
|
selector: 'app-game-master-dashboard',
|
||||||
@ -8,13 +12,16 @@ import {GMSignalRService} from '../../shared/signalR-service/gm-signalR.service'
|
|||||||
styleUrls: ['./game-master-dashboard.component.css'],
|
styleUrls: ['./game-master-dashboard.component.css'],
|
||||||
animations: [onSideNavChange, animateText]
|
animations: [onSideNavChange, animateText]
|
||||||
})
|
})
|
||||||
export class GameMasterDashboardComponent implements OnInit {
|
export class GameMasterDashboardComponent implements OnInit, OnDestroy {
|
||||||
|
allSubscriptions = new Subscription();
|
||||||
leftSidenavExpanded = false;
|
leftSidenavExpanded = false;
|
||||||
leftSidenavTextExpanded = false;
|
leftSidenavTextExpanded = false;
|
||||||
|
|
||||||
rightSidenavExpanded = false;
|
rightSidenavExpanded = false;
|
||||||
rightSidenavTextExpanded = false;
|
rightSidenavTextExpanded = false;
|
||||||
constructor(private signalRService: GMSignalRService) {}
|
constructor(private signalRService: GMSignalRService, private characterService: CharacterService) {
|
||||||
|
this.SubscribeToEvents();
|
||||||
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.signalRService.Login();
|
this.signalRService.Login();
|
||||||
@ -36,4 +43,30 @@ export class GameMasterDashboardComponent implements OnInit {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateCharactersList(): void {
|
||||||
|
this.allSubscriptions.add(
|
||||||
|
this.characterService.getLoggedCharacters().subscribe((success) => {
|
||||||
|
console.log(success);
|
||||||
|
},
|
||||||
|
(error: ErrorResponse | HttpErrorResponse) => {
|
||||||
|
if (error instanceof HttpErrorResponse) {
|
||||||
|
error = error.error as ErrorResponse;
|
||||||
|
}
|
||||||
|
console.error(error.message);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private SubscribeToEvents(): void {
|
||||||
|
debugger
|
||||||
|
this.signalRService.message.subscribe((message: string) => {
|
||||||
|
if (message === 'New player connected' || message === 'Player disconnected') {
|
||||||
|
this.UpdateCharactersList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy() {
|
||||||
|
this.allSubscriptions.unsubscribe();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
import { Inject, Injectable } from '@angular/core';
|
import { Inject, Injectable } from '@angular/core';
|
||||||
import { SignalRService } from './base/signalR.service';
|
import { SignalRService } from './base/signalR.service';
|
||||||
|
import {Subject} from 'rxjs';
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
export class GMSignalRService {
|
export class GMSignalRService {
|
||||||
signalR: SignalRService;
|
signalR: SignalRService;
|
||||||
|
message: Subject<string>;
|
||||||
|
|
||||||
constructor(@Inject('BASE_URL') baseUrl: string) {
|
constructor(@Inject('BASE_URL') baseUrl: string) {
|
||||||
this.signalR = new SignalRService(baseUrl);
|
this.signalR = new SignalRService(baseUrl);
|
||||||
|
this.message = new Subject<string>();
|
||||||
this.registerOnServerEvents();
|
this.registerOnServerEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,10 +20,15 @@ export class GMSignalRService {
|
|||||||
if (this.signalR.connectionEstablished$.getValue() === true) {
|
if (this.signalR.connectionEstablished$.getValue() === true) {
|
||||||
this.signalR.hubConnection.send('GameMasterLogin');
|
this.signalR.hubConnection.send('GameMasterLogin');
|
||||||
}
|
}
|
||||||
});
|
}).unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerOnServerEvents(): void {
|
private registerOnServerEvents(): void {
|
||||||
|
this.signalR.hubConnection.on('Welcome', (message: string) => {
|
||||||
|
this.message.next('New player connected');
|
||||||
|
});
|
||||||
|
this.signalR.hubConnection.on('GoodBye', (message: string) => {
|
||||||
|
this.message.next('Player disconnected');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
import {Inject, Injectable} from '@angular/core';
|
||||||
|
import {HttpClient} from '@angular/common/http';
|
||||||
|
import {Observable, of, throwError} from 'rxjs';
|
||||||
|
import {ErrorResponse} from '../types/ErrorResponse';
|
||||||
|
import {Either} from '../types/Either';
|
||||||
|
import {switchMap} from 'rxjs/operators';
|
||||||
|
import {LoggedCharactersViewModel} from '../types/viewmodels/character-viewmodels/LoggedCharactersViewModel';
|
||||||
|
|
||||||
|
Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class CharacterService {
|
||||||
|
private baseUrl = 'api/character/';
|
||||||
|
constructor(private http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
|
||||||
|
this.baseUrl = baseUrl + this.baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLoggedCharacters(): Observable<LoggedCharactersViewModel[]> {
|
||||||
|
return this.http.get<Either<LoggedCharactersViewModel[], ErrorResponse>>(this.baseUrl + 'loggedCharacters').pipe(
|
||||||
|
switchMap(response => {
|
||||||
|
if (response.isLeft) {
|
||||||
|
return of(response.left);
|
||||||
|
} else {
|
||||||
|
return throwError(response.right);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
export interface LoggedCharactersViewModel {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
level: number;
|
||||||
|
currentHealthPoints: number;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user
można wyrzucić niepotrzebne spacje