-
-
-
-
-
-
-
-
- folder
- Link 1
-
-
- folder
- Link 2
-
-
- folder
- Link 3
-
-
-
-
-
- SessionCompanion
-
-
-
-
-
-
-
-
-
-
- folder
- Link 1
-
-
- folder
- Link 2
-
-
- folder
- Link 3
-
-
-
-
+
+
+
+
+
+
+
+
+
+ folder
+ Link 1
+
+
+ folder
+ Link 2
+
+
+ folder
+ Link 3
+
+
+
+
+
+ SessionCompanion
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ loggedCharacter.name.length > 12
+ ? (loggedCharacter.name | slice: 0:12) + '..'
+ : loggedCharacter.name
+ }}
+
+
+
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-dashboard/game-master-dashboard.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-dashboard/game-master-dashboard.component.ts
index 1b303b8..d93a20e 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-dashboard/game-master-dashboard.component.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-dashboard/game-master-dashboard.component.ts
@@ -1,20 +1,37 @@
-import {Component, OnInit} from '@angular/core';
-import {animateText, onSideNavChange} from '../../shared/animations/sidenav-animations';
-import {GMSignalRService} from '../../shared/signalR-service/gm-signalR.service';
+import { Component, OnDestroy, OnInit } from '@angular/core';
+import {
+ animateText,
+ onSideNavChange,
+} from '../../shared/animations/sidenav-animations';
+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';
+import { LoggedCharactersViewModel } from '../../../types/viewmodels/character-viewmodels/LoggedCharactersViewModel';
+import { first } from 'rxjs/operators';
@Component({
selector: 'app-game-master-dashboard',
templateUrl: './game-master-dashboard.component.html',
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;
leftSidenavTextExpanded = false;
rightSidenavExpanded = false;
rightSidenavTextExpanded = false;
- constructor(private signalRService: GMSignalRService) {}
+ loggedCharacters: LoggedCharactersViewModel[];
+
+ constructor(
+ private signalRService: GMSignalRService,
+ private characterService: CharacterService
+ ) {
+ this.SubscribeToEvents();
+ }
ngOnInit() {
this.signalRService.Login();
@@ -36,4 +53,36 @@ export class GameMasterDashboardComponent implements OnInit {
break;
}
}
+
+ UpdateCharactersList(): void {
+ this.characterService
+ .getLoggedCharacters()
+ .pipe(first())
+ .subscribe(
+ (success) => {
+ this.loggedCharacters = success;
+ },
+ (error: ErrorResponse | HttpErrorResponse) => {
+ if (error instanceof HttpErrorResponse) {
+ error = error.error as ErrorResponse;
+ }
+ console.error(error.message);
+ }
+ );
+ }
+
+ private SubscribeToEvents(): void {
+ this.signalRService.message.subscribe((message: string) => {
+ if (
+ message === 'New player connected' ||
+ message === 'Player disconnected'
+ ) {
+ this.UpdateCharactersList();
+ }
+ });
+ }
+
+ ngOnDestroy() {
+ this.allSubscriptions.unsubscribe();
+ }
}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
index 5331821..bb796df 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
@@ -1,14 +1,14 @@
import {Component, OnInit} from '@angular/core';
import { Router } from '@angular/router';
-import {first} from "rxjs/operators";
-import {ClearUserId} from "../../store/actions/app.actions";
-import {ErrorResponse} from "../../../types/ErrorResponse";
-import {HttpErrorResponse} from "@angular/common/http";
-import {Store} from "@ngrx/store";
-import {AppState} from "../../store/models/app-state.model";
-import {CharacterService} from "../../../services/character.service";
-import {CharacterForLoginViewModel} from "../../../types/viewmodels/character-viewmodels/CharacterForLoginViewModel";
-import {AddCharacterId} from "../../store/actions/player.action";
+import {first} from 'rxjs/operators';
+import {ClearUserId} from '../../store/actions/app.actions';
+import {ErrorResponse} from '../../../types/ErrorResponse';
+import {HttpErrorResponse} from '@angular/common/http';
+import {Store} from '@ngrx/store';
+import {AppState} from '../../store/models/app-state.model';
+import {CharacterService} from '../../../services/character.service';
+import {CharacterForLoginViewModel} from '../../../types/viewmodels/character-viewmodels/CharacterForLoginViewModel';
+import {AddCharacterId} from '../../store/actions/player.action';
@Component({
selector: 'app-select-character',
@@ -29,21 +29,21 @@ export class SelectCharacterComponent implements OnInit {
this.characterService.getUserCharactersList(userId).pipe(first()).subscribe((charactersList) => {
this.charactersList = charactersList;
}, (error: ErrorResponse | HttpErrorResponse) => {
- if(error instanceof HttpErrorResponse){
- error = error.error as ErrorResponse
+ if (error instanceof HttpErrorResponse) {
+ error = error.error as ErrorResponse;
}
- console.error(error.message)
- } )
+ console.error(error.message);
+ } );
});
}
- onCharacterClick(characterId: number){
- this.store.dispatch(new AddCharacterId({characterId}))
- this.router.navigate(['player'])
+ onCharacterClick(characterId: number) {
+ this.store.dispatch(new AddCharacterId({characterId}));
+ this.router.navigate(['player']);
}
- onArrowBackClick(){
- this.store.dispatch(new ClearUserId())
- this.router.navigate(['login'])
+ onArrowBackClick() {
+ this.store.dispatch(new ClearUserId());
+ this.router.navigate(['login']);
}
}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts
deleted file mode 100644
index 4f57bb0..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {
- ActionReducer,
- ActionReducerMap,
- createFeatureSelector,
- createSelector,
- MetaReducer
-} from '@ngrx/store';
-import { environment } from '../../environments/environment';
-
-export interface State {
-
-}
-
-export const reducers: ActionReducerMap
= {
-
-};
-
-
-export const metaReducers: MetaReducer[] = !environment.production ? [] : [];
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/how-to.RMD b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/how-to.RMD
index 5ba5504..b0d9081 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/how-to.RMD
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/how-to.RMD
@@ -1,29 +1,4 @@
Moduł został już dodany i wstrzyknięty do roota apki.
-Aby dodać nową ikonkę, plik svg wstawiamy do folderu icons/svg-icons.
-Następnie wpisujemy w konsoli polecenie:
-npm run generate-icons
-
-Zostaną wtedy utworzone nowe klasy z dodaną ikonką.
-
-Jeśli po tym będziemy chcieli użyć gdzieś naszej ikonki, nie pojawi się ona...
-Jest to spowodowane tym, że nie chcemy, aby aplikacja wczytywała w jednym momencie wszystkie nasze ikonki a jedynie te potrzebne
-Musi więc ją dodać w odpowiednim momencie do rejestru, w innym wypadku w konsoli dostaniemy komunikat:
-![img.png](warning.png)
-
-Teraz zarejestrujmy naszą ikonkę:
-
-Dodajemy w konstruktorze danego komponentu:
-```typescript
-iconRegister: SessionCompanionIconsRegistry
-```
-
-Następnie dodajemy interesującą nas ikonkę:
-```typescript
-this.iconRegister.registerIcon(scIconBarbarian);
-```
-
-Samą ikonkę ładujemy w tagu
-```html
-
-```
+Aby dodać nową ikonkę, plik svg wstawiamy do folderu assets/icons/svg-icons.
+Oraz dodajym kolejnego enuma w pliku sc-icon.model.ts
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/sc-icon.model.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/sc-icon.model.ts
deleted file mode 100644
index 840ea40..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/sc-icon.model.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-/* 🤖 this file was generated by svg-to-ts*/
-export const scIconBarbarian: {
- name: 'barbarian';
- data: string;
-} = {
- name: 'barbarian',
- data: ``
-};
-export const scIconBard: {
- name: 'bard';
- data: string;
-} = {
- name: 'bard',
- data: ``
-};
-export const scIconCleric: {
- name: 'cleric';
- data: string;
-} = {
- name: 'cleric',
- data: ``
-};
-export const scIconDruid: {
- name: 'druid';
- data: string;
-} = {
- name: 'druid',
- data: ``
-};
-export const scIconFighter: {
- name: 'fighter';
- data: string;
-} = {
- name: 'fighter',
- data: ``
-};
-export const scIconMonk: {
- name: 'monk';
- data: string;
-} = {
- name: 'monk',
- data: ``
-};
-export const scIconPaladin: {
- name: 'paladin';
- data: string;
-} = {
- name: 'paladin',
- data: ``
-};
-export const scIconRanger: {
- name: 'ranger';
- data: string;
-} = {
- name: 'ranger',
- data: ``
-};
-export const scIconRogue: {
- name: 'rogue';
- data: string;
-} = {
- name: 'rogue',
- data: ``
-};
-export const scIconSorcerer: {
- name: 'sorcerer';
- data: string;
-} = {
- name: 'sorcerer',
- data: ``
-};
-export const scIconWarlock: {
- name: 'warlock';
- data: string;
-} = {
- name: 'warlock',
- data: ``
-};
-export const scIconWizard: {
- name: 'wizard';
- data: string;
-} = {
- name: 'wizard',
- data: ``
-};
-export type scIcon =
- | 'barbarian'
- | 'bard'
- | 'cleric'
- | 'druid'
- | 'fighter'
- | 'monk'
- | 'paladin'
- | 'ranger'
- | 'rogue'
- | 'sorcerer'
- | 'warlock'
- | 'wizard';
-export interface SessionCompanionIcon {
- name: scIcon;
- data: string;
-}
-export type SessionCompanionIconNameSubset<
- T extends Readonly
-> = T[number]['name'];
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/barbarian.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/barbarian.svg
deleted file mode 100644
index a4d948e..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/barbarian.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/bard.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/bard.svg
deleted file mode 100644
index 565ebe9..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/bard.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/cleric.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/cleric.svg
deleted file mode 100644
index df1b7e5..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/cleric.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/druid.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/druid.svg
deleted file mode 100644
index 036adc9..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/druid.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/fighter.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/fighter.svg
deleted file mode 100644
index 4fa6997..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/fighter.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/monk.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/monk.svg
deleted file mode 100644
index 3590be6..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/monk.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/paladin.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/paladin.svg
deleted file mode 100644
index 0fb47a7..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/paladin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/ranger.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/ranger.svg
deleted file mode 100644
index 4d9aca2..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/ranger.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/rogue.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/rogue.svg
deleted file mode 100644
index 2e89550..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/rogue.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/sorcerer.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/sorcerer.svg
deleted file mode 100644
index e26b851..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/sorcerer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/warlock.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/warlock.svg
deleted file mode 100644
index 329c82f..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/warlock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/wizard.svg b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/wizard.svg
deleted file mode 100644
index c61b956..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/icons/svg-icons/wizard.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons-registry.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons-registry.service.ts
index 0870b10..6d48cad 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons-registry.service.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons-registry.service.ts
@@ -1,31 +1,22 @@
import {Injectable} from '@angular/core';
-import { SessionCompanionIcon } from './icons/sc-icon.model';
+import {scIcon} from '../../../assets/icons/sc-icon.model';
+import {MatIconRegistry} from '@angular/material';
+import {DomSanitizer} from '@angular/platform-browser';
@Injectable({
providedIn: 'root'
})
export class SessionCompanionIconsRegistry {
+ constructor(private registry: MatIconRegistry, private sanitizer: DomSanitizer) {
+ }
- private registry = new Map();
+ public registerIcons(): void {
+ this.loadIcons(Object.values(scIcon), '../assets/icons/svg-icons');
+ }
- public registerIcons(icons: SessionCompanionIcon[]): void {
- icons.forEach((icon: SessionCompanionIcon) => {
- if (!this.registry.has(icon.name)) {
- this.registry.set(icon.name, icon.data);
- }
+ private loadIcons(iconKeys: string[], iconUrl: string): void {
+ iconKeys.forEach((icon: string) => {
+ this.registry.addSvgIcon(icon, this.sanitizer.bypassSecurityTrustResourceUrl(`${iconUrl}/${icon}.svg`));
});
}
-
- public registerIcon(icon: SessionCompanionIcon): void {
- if (!this.registry.has(icon.name)) {
- this.registry.set(icon.name, icon.data);
- }
- }
-
- public getIcon(iconName: string): string | undefined {
- if (!this.registry.has(iconName)) {
- console.warn(`We could not find the Icon with the name ${iconName}, did you add it to the Icon registry?`);
- }
- return this.registry.get(iconName);
- }
}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.component.ts
deleted file mode 100644
index 5752798..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.component.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import {ChangeDetectionStrategy, Component, ElementRef, Inject, Input, Optional} from '@angular/core';
-import {SessionCompanionIconsRegistry} from './session-companion-icons-registry.service';
-import { DOCUMENT } from '@angular/common';
-
-@Component({
- selector: 'app-sc-icons',
- template: `
-
- `,
- styles: [':host::ng-deep svg{width: 50px; height: 50px}'],
- changeDetection: ChangeDetectionStrategy.OnPush
-})
-export class SessionCompanionIconsComponent {
-
- private svgIcon: SVGElement;
-
- @Input()
- set name(iconName: string) {
- if (this.svgIcon) {
- this.element.nativeElement.removeChild(this.svgIcon);
- }
- const svgData = this.scIconRegistry.getIcon(iconName);
- this.svgIcon = this.svgElementFromString(svgData);
- this.element.nativeElement.appendChild(this.svgIcon);
- }
-
- constructor(private element: ElementRef, private scIconRegistry: SessionCompanionIconsRegistry,
- @Optional() @Inject(DOCUMENT) private document: any) {
- }
-
- private svgElementFromString(svgContent: string): SVGElement {
- const div = this.document.createElement('DIV');
- div.innerHTML = svgContent;
- return div.querySelector('svg') || this.document.createElementNS('http://www.w3.org/2000/svg', 'path');
- }
-}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.module.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.module.ts
deleted file mode 100644
index eb9152a..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/session-companion-icons.module.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import {NgModule} from '@angular/core';
-import {SessionCompanionIconsComponent} from './session-companion-icons.component';
-
-@NgModule({
- declarations: [SessionCompanionIconsComponent],
- imports: [],
- exports: [
- SessionCompanionIconsComponent
- ]
-})
-export class SessionCompanionIconsModule {
-}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/warning.png b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/warning.png
deleted file mode 100644
index d36ffcb..0000000
Binary files a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/sc-icons/warning.png and /dev/null differ
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/signalR-service/gm-signalR.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/signalR-service/gm-signalR.service.ts
index 4ca94db..08cf425 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/signalR-service/gm-signalR.service.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/shared/signalR-service/gm-signalR.service.ts
@@ -1,12 +1,15 @@
import { Inject, Injectable } from '@angular/core';
import { SignalRService } from './base/signalR.service';
+import {Subject} from 'rxjs';
@Injectable({ providedIn: 'root' })
export class GMSignalRService {
signalR: SignalRService;
+ message: Subject;
constructor(@Inject('BASE_URL') baseUrl: string) {
this.signalR = new SignalRService(baseUrl);
+ this.message = new Subject();
this.registerOnServerEvents();
}
@@ -17,10 +20,15 @@ export class GMSignalRService {
if (this.signalR.connectionEstablished$.getValue() === true) {
this.signalR.hubConnection.send('GameMasterLogin');
}
- });
+ }).unsubscribe();
}
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');
+ });
}
}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
index 7fda9a7..fe999ff 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
@@ -1,8 +1,8 @@
import {AppStoreModel} from './app-store.model';
import {ActionReducerMap} from '@ngrx/store';
import {AppReducer} from '../reducers/app.reducer';
-import {PlayerStoreModel} from "./player-store.model";
-import {PlayerReducer} from "../reducers/player.reducer";
+import {PlayerStoreModel} from './player-store.model';
+import {PlayerReducer} from '../reducers/player.reducer';
export interface AppState {
appStore: AppStoreModel;
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts
index 33cc4b6..3077834 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts
@@ -1,5 +1,5 @@
-import {PlayerStoreModel} from "../models/player-store.model";
-import {PlayerAction, PlayerActionTypes} from "../actions/player.action";
+import {PlayerStoreModel} from '../models/player-store.model';
+import {PlayerAction, PlayerActionTypes} from '../actions/player.action';
const initialState: PlayerStoreModel = {
characterId: null
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/sc-icon.model.ts b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/sc-icon.model.ts
new file mode 100644
index 0000000..e3537d1
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/sc-icon.model.ts
@@ -0,0 +1,14 @@
+export enum scIcon {
+ Barbarian = 'barbarian',
+ Bard = 'bard',
+ Cleric = 'cleric',
+ Druid = 'druid',
+ Fighter = 'fighter',
+ Monk = 'monk',
+ Paladin = 'paladin',
+ Ranger = 'ranger',
+ rogue = 'rogue',
+ Sorcerer = 'sorcerer',
+ Warlock = 'warlock',
+ Wizard = 'wizard'
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/barbarian.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/barbarian.svg
new file mode 100644
index 0000000..ea18fd3
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/barbarian.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/bard.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/bard.svg
new file mode 100644
index 0000000..1e139d8
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/bard.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/cleric.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/cleric.svg
new file mode 100644
index 0000000..f7a6586
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/cleric.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/druid.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/druid.svg
new file mode 100644
index 0000000..8290333b
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/druid.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/fighter.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/fighter.svg
new file mode 100644
index 0000000..0f55a43
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/fighter.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/monk.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/monk.svg
new file mode 100644
index 0000000..dccf6ac
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/monk.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/paladin.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/paladin.svg
new file mode 100644
index 0000000..615bc8f
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/paladin.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/ranger.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/ranger.svg
new file mode 100644
index 0000000..8defce6
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/ranger.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/rogue.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/rogue.svg
new file mode 100644
index 0000000..a5ebf42
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/rogue.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/sorcerer.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/sorcerer.svg
new file mode 100644
index 0000000..6fa42fb
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/sorcerer.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/warlock.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/warlock.svg
new file mode 100644
index 0000000..d84762e
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/warlock.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/wizard.svg b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/wizard.svg
new file mode 100644
index 0000000..1df2853
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/assets/icons/svg-icons/wizard.svg
@@ -0,0 +1 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
index 01180af..c390a44 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
@@ -3,8 +3,9 @@ import {HttpClient, HttpParams} 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 {CharacterForLoginViewModel} from "../types/viewmodels/character-viewmodels/CharacterForLoginViewModel";
+import {CharacterForLoginViewModel} from '../types/viewmodels/character-viewmodels/CharacterForLoginViewModel';
+import {switchMap, retry} from 'rxjs/operators';
+import {LoggedCharactersViewModel} from '../types/viewmodels/character-viewmodels/LoggedCharactersViewModel';
Injectable({
providedIn: 'root'
@@ -15,6 +16,19 @@ export class CharacterService {
this.baseUrl = baseUrl + this.baseUrl;
}
+ getLoggedCharacters(): Observable {
+ return this.http.get>(this.baseUrl + 'loggedCharacters').pipe(
+ switchMap(response => {
+ if (response.isLeft) {
+ return of(response.left);
+ } else {
+ return throwError(response.right);
+ }
+ }),
+ retry(3)
+ );
+ }
+
getUserCharactersList(userId: number): Observable {
const params = new HttpParams().set('userId', userId.toString())
return this.http.get>(this.baseUrl + 'userCharactersList', {params}).pipe(
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/LoggedCharactersViewModel.ts b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/LoggedCharactersViewModel.ts
new file mode 100644
index 0000000..36ea974
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/LoggedCharactersViewModel.ts
@@ -0,0 +1,7 @@
+export interface LoggedCharactersViewModel {
+ id: number;
+ name: string;
+ level: number;
+ currentHealthPoints: number;
+ class: string;
+}