diff --git a/SessionCompanion/SessionCompanion/ClientApp/package-lock.json b/SessionCompanion/SessionCompanion/ClientApp/package-lock.json
index b59a411..c6b1e3f 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/package-lock.json
+++ b/SessionCompanion/SessionCompanion/ClientApp/package-lock.json
@@ -8674,6 +8674,21 @@
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
+ "ng-dynamic-component": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ng-dynamic-component/-/ng-dynamic-component-8.0.1.tgz",
+ "integrity": "sha512-Ak25QTYmjNVxyZ6ywqRDDjoqAJheFeK0XoHsomwVjdHSiLoQcGfNNj5z51pqoRGpjdDZMSV+J2gaCbRNBeiy3g==",
+ "requires": {
+ "tslib": "^2.0.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+ }
+ }
+ },
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
diff --git a/SessionCompanion/SessionCompanion/ClientApp/package.json b/SessionCompanion/SessionCompanion/ClientApp/package.json
index ca095c7..cec8400 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/package.json
+++ b/SessionCompanion/SessionCompanion/ClientApp/package.json
@@ -32,6 +32,7 @@
"core-js": "^3.3.3",
"hammerjs": "^2.0.8",
"jquery": "3.4.1",
+ "ng-dynamic-component": "^8.0.1",
"oidc-client": "^1.9.1",
"popper.js": "^1.16.0",
"rpg-awesome": "^0.2.0",
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/app.module.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/app.module.ts
index 20c56c3..50924a9 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/app.module.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/app.module.ts
@@ -50,6 +50,8 @@ import { GameMasterMonstersTableComponent } from './components/game-master-monst
import { MonsterService } from '../services/monster.service';
import { SpellDetailsDialogComponent } from './components/spell-details-dialog/spell-details-dialog.component';
import { GameMasterShopkeepersTableComponent } from './components/game-master-shopkeepers-table/game-master-shopkeepers-table.component';
+import { SendMessageActionComponent } from './components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component';
+import { DynamicModule } from 'ng-dynamic-component';
@NgModule({
declarations: [
@@ -70,6 +72,7 @@ import { GameMasterShopkeepersTableComponent } from './components/game-master-sh
GameMasterMonstersTableComponent,
SpellDetailsDialogComponent,
GameMasterShopkeepersTableComponent,
+ SendMessageActionComponent,
],
imports: [
BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
@@ -98,6 +101,7 @@ import { GameMasterShopkeepersTableComponent } from './components/game-master-sh
MatSortModule,
MatTooltipModule,
MatRadioModule,
+ DynamicModule,
],
providers: [
UserService,
@@ -119,6 +123,7 @@ import { GameMasterShopkeepersTableComponent } from './components/game-master-sh
ThrowPrimaryAbilityComponent,
SpellDetailsDialogComponent,
GameMasterShopkeepersTableComponent,
+ SendMessageActionComponent,
],
})
export class AppModule {}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.css
new file mode 100644
index 0000000..66e070b
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.css
@@ -0,0 +1,36 @@
+.send-message-main {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.send-message-main > mat-form-field {
+ margin-left: auto;
+ margin-right: auto;
+ width: 80%;
+}
+
+.message-textarea {
+ height: 150px;
+}
+
+.break {
+ flex-basis: 100%;
+ height: 0;
+}
+
+.send-message-actions {
+ margin-left: auto;
+}
+
+.send-message-actions > button {
+ margin-right: 20px;
+ margin-left: 20px;
+}
+
+.no-focus:focus {
+ outline: none;
+}
+
+.send-button {
+ color: darkseagreen;
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.html
new file mode 100644
index 0000000..847acea
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.html
@@ -0,0 +1,11 @@
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.ts
new file mode 100644
index 0000000..a829ac7
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/actions-components/send-message-action/send-message-action.component.ts
@@ -0,0 +1,28 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { GMSignalRService } from '../../../../shared/signalR-service/gm-signalR.service';
+
+@Component({
+ selector: 'app-send-message-action',
+ templateUrl: './send-message-action.component.html',
+ styleUrls: ['./send-message-action.component.css'],
+})
+export class SendMessageActionComponent implements OnInit {
+ @Input() characterId: any;
+
+ @Output()
+ closeComponent = new EventEmitter();
+
+ constructor(private signalRService: GMSignalRService) {}
+
+ ngOnInit() {}
+
+ SendMessage(message: string) {
+ debugger;
+ this.signalRService.SendMessageToPlayer(this.characterId, message);
+ this.Close();
+ }
+
+ Close() {
+ this.closeComponent.emit();
+ }
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.css
index 411b4bb..e179d19 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.css
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.css
@@ -10,3 +10,8 @@
box-shadow: 0 11px 15px -7px rgba(0, 0, 0, 0.2),
0 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 5px 20px 4px #d8d8d8;
}
+
+.after-name-divider {
+ border-top-width: 3px;
+ margin-bottom: 20px;
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.html
index 9445b81..d1c74d5 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.html
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.html
@@ -1,5 +1,16 @@
{{characterName}}
+
+
+
+
+
+
+
+
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.ts
index ac8b921..b3f457b 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/game-master-character-actions-dialog/game-master-character-actions-dialog.component.ts
@@ -1,5 +1,6 @@
-import { Component, Inject, OnInit } from '@angular/core';
+import { Component, Inject, Injector, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
+import { SendMessageActionComponent } from './actions-components/send-message-action/send-message-action.component';
@Component({
selector: 'app-game-master-character-actions-dialog',
@@ -9,6 +10,17 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
export class GameMasterCharacterActionsDialogComponent implements OnInit {
characterId: number;
characterName: string;
+ actionComponentName;
+ availableActions: { name: string; componentName: string }[] = [
+ {
+ name: 'Send Message',
+ componentName: 'SendMessageActionComponent',
+ },
+ ];
+ inputs: { characterId: number };
+ outputs: any = {
+ closeComponent: () => this.ChangeActionComponent(null),
+ };
constructor(
public dialogRef: MatDialogRef,
@@ -18,5 +30,17 @@ export class GameMasterCharacterActionsDialogComponent implements OnInit {
ngOnInit() {
this.characterId = this.data.characterid;
this.characterName = this.data.characterName;
+ this.inputs = { characterId: this.characterId };
+ console.log(this.inputs);
+ }
+
+ ChangeActionComponent(componentName: string): void {
+ switch (componentName) {
+ case 'SendMessageActionComponent':
+ this.actionComponentName = SendMessageActionComponent;
+ break;
+ default:
+ this.actionComponentName = null;
+ }
}
}
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 3db8ef0..52be629 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
@@ -76,7 +76,15 @@ export class GameMasterDashboardComponent implements OnInit, OnDestroy {
rightSidenavExpanded = false;
rightSidenavTextExpanded = false;
- loggedCharacters: LoggedCharactersViewModel[];
+ loggedCharacters: LoggedCharactersViewModel[] = [
+ {
+ class: 'paladin',
+ id: 2,
+ name: 'Test',
+ currentHealthPoints: 5,
+ level: 1,
+ },
+ ];
constructor(
private store: Store,
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 08cf425..db03980 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,6 +1,6 @@
import { Inject, Injectable } from '@angular/core';
import { SignalRService } from './base/signalR.service';
-import {Subject} from 'rxjs';
+import { Subject } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class GMSignalRService {
@@ -16,16 +16,24 @@ export class GMSignalRService {
public Login() {
this.signalR.startConnection();
- this.signalR.connectionEstablished$.subscribe(() => {
- if (this.signalR.connectionEstablished$.getValue() === true) {
- this.signalR.hubConnection.send('GameMasterLogin');
- }
- }).unsubscribe();
+ this.signalR.connectionEstablished$
+ .subscribe(() => {
+ if (this.signalR.connectionEstablished$.getValue() === true) {
+ this.signalR.hubConnection.send('GameMasterLogin');
+ }
+ })
+ .unsubscribe();
+ }
+
+ public SendMessageToPlayer(characterId: number, message: string) {
+ this.signalR.hubConnection
+ .send('SendMessageToPlayer', characterId, message)
+ .catch((err) => console.error(err));
}
private registerOnServerEvents(): void {
this.signalR.hubConnection.on('Welcome', (message: string) => {
- this.message.next('New player connected');
+ this.message.next('New player connected');
});
this.signalR.hubConnection.on('GoodBye', (message: string) => {
this.message.next('Player disconnected');