Started work on Server pages

This commit is contained in:
Tom Bloor 2019-12-27 02:59:21 +00:00
parent 6307780b9c
commit dfc702992b
Signed by: TBSliver
GPG key ID: 4657C7EBE42CC5CC
8 changed files with 136 additions and 8 deletions

View file

@ -5,6 +5,8 @@ import { ConfigComponent } from "./pages/config/config.component";
import { QuestsComponent } from "./pages/config/quests/quests.component";
import { GridComponent } from "./pages/config/grid/grid.component";
import { DbsComponent } from "./pages/config/dbs/dbs.component";
import { ServersComponent } from "./pages/config/servers/servers.component";
import { ServerComponent } from "./pages/config/servers/server/server.component";
const routes: Routes = [
@ -16,6 +18,8 @@ const routes: Routes = [
{path: 'grid', component: GridComponent},
{path: 'dbs', component: DbsComponent},
{path: 'quests', component: QuestsComponent},
{path: 'servers', component: ServersComponent},
{path: 'server/:index', component: ServerComponent}
]
}
];

View file

@ -17,6 +17,8 @@ import { TextComponent } from './components/form/text/text.component';
import { PasswordComponent } from './components/form/password/password.component';
import { DbsComponent } from './pages/config/dbs/dbs.component';
import { CheckboxComponent } from './components/form/checkbox/checkbox.component';
import { ServersComponent } from './pages/config/servers/servers.component';
import { ServerComponent } from './pages/config/servers/server/server.component';
@NgModule({
declarations: [
@ -30,7 +32,9 @@ import { CheckboxComponent } from './components/form/checkbox/checkbox.component
TextComponent,
PasswordComponent,
DbsComponent,
CheckboxComponent
CheckboxComponent,
ServersComponent,
ServerComponent
],
imports: [
BrowserModule,

View file

@ -2,16 +2,18 @@ import { Deserialize } from "../util/deserialize.model";
import { ServerSublevelModel } from "./serverSublevel.model";
export class ServerModel implements Deserialize {
// General Settings
name: string;
gridX: number;
gridY: number;
MachineIdTag: string;
isHomeServer: boolean;
// Connection Settings
ip: string;
name: string;
port: number;
gamePort: number;
seamlessDataPort: number;
isHomeServer: boolean;
AdditionalCmdLineParams: string;
OverrideShooterGameModeDefaultGameIni: object;
floorZDist: number;
utcOffset: number;
@ -31,9 +33,7 @@ export class ServerModel implements Deserialize {
serverIslandPointsMultiplier: number;
lastModified: string;
lastImageOverride: string;
islandLocked: boolean;
discoLocked: boolean;
pathsLocked: boolean;
extraSublevels: string[];
totalExtraSublevels: string[];
islandInstances;
@ -43,6 +43,17 @@ export class ServerModel implements Deserialize {
sublevels: ServerSublevelModel[];
// Irrelevant, used internally by Grapeshot
//MachineIdTag: string;
// Probably also irrelevant
//AdditionalCmdLineParams: string;
// Used by ServerGridEditor
//islandLocked: boolean;
//discoLocked: boolean;
//pathsLocked: boolean;
deserialize(input: any): this {
Object.assign(this, input);
this.sublevels = this.sublevels.map(i => new ServerSublevelModel().deserialize(i));

View file

@ -3,6 +3,7 @@
<button class="btn btn-primary btn-block" [routerLink]="['grid']">Grid Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['dbs']">DB Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['quests']">Quest Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['servers']">Server Settings</button>
</div>
<div class="col-10"><router-outlet></router-outlet></div>
</div>

View file

@ -0,0 +1,30 @@
<div class="mt-3">
<h2>{{ cell.name }}<em *ngIf="cell.name === '' || cell.name === undefined">No Name Set</em> - ({{ cell.gridX }}
, {{ cell.gridY }})</h2>
<ngb-accordion>
<ngb-panel title="General Settings">
<ng-template ngbPanelContent>
<app-text id="name" label="Name" [(text)]="cell.name"
help="Friendly name for this server. Can be blank"></app-text>
<app-number id="gridX" label="Grid X" [(number)]="cell.gridX"
help="X position in the Grid. 0 Indexed"></app-number>
<app-number id="gridY" label="Grid Y" [(number)]="cell.gridY"
help="Y position in the Grid. 0 Indexed"></app-number>
<app-checkbox id="isHomeServer" label="Home Server" [(checkbox)]="cell.isHomeServer"
help="Whether this cell can be used for players with no beds"></app-checkbox>
</ng-template>
</ngb-panel>
<ngb-panel title="Connection Settings">
<ng-template ngbPanelContent>
<app-text id="ip" label="IP" [(text)]="cell.ip" help="IP address of host this cell is on"></app-text>
<app-number id="port" label="Port" [(number)]="cell.port"
help="Port used for inter cell communication"></app-number>
<app-number id="gamePort" label="Game Port" [(number)]="cell.gamePort"
help="Port used for external UE4 traffic"></app-number>
<app-number id="seamlessDataPort" label="Seamless Port" [(number)]="cell.seamlessDataPort"
help="Used for transferring map images when no MetaWorldURL set"></app-number>
</ng-template>
</ngb-panel>
</ngb-accordion>
<p>{{ cell | json }}</p>
</div>

View file

@ -0,0 +1,22 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, ParamMap } from "@angular/router";
import { switchMap } from "rxjs/operators";
import { Server } from "../../../../server";
import { ServerModel } from "../../../../models/atlasData/server.model";
@Component({
selector: 'app-server',
templateUrl: './server.component.html'
})
export class ServerComponent implements OnInit {
private cell: ServerModel;
constructor(private server: Server, private route: ActivatedRoute) {
}
ngOnInit() {
let index = this.route.snapshot.paramMap.get('index');
this.cell = this.server.serverGrid.servers[index];
}
}

View file

@ -0,0 +1,19 @@
<div class="mt-3 mb-3">
<h2>Cell Grid</h2>
<table class="table">
<thead>
<tr>
<th>#</th>
<th *ngFor="let x of xArray">{{ x }}</th>
</tr>
</thead>
<tbody *ngFor="let y of xArray">
<tr>
<th>{{ y }}</th>
<td *ngFor="let x of xArray"><a [routerLink]="['/config','server', serverLookup[x][y]]">{{ serverLookup[x][y] }}</a></td>
</tr>
</tbody>
</table>
<h2 *ngIf="unknownServers.length > 0">Cells Outside Grid</h2>
<button class="btn btn-warning" *ngFor="let u of unknownServers">{{ u }}</button>
</div>

View file

@ -0,0 +1,37 @@
import { Component, OnInit } from '@angular/core';
import { Server } from "../../../server";
import { ServerGridModel } from "../../../models/serverGrid.model";
@Component({
selector: 'app-servers',
templateUrl: './servers.component.html'
})
export class ServersComponent implements OnInit {
private grid: ServerGridModel;
private xArray: number[];
private yArray: number[];
private serverLookup: number[][] = [];
private unknownServers: number[] = [];
constructor(private server: Server) {
this.grid = server.serverGrid;
this.xArray = Array.from(Array(this.grid.totalGridsX).keys());
this.yArray = Array.from(Array(this.grid.totalGridsY).keys());
this.grid.servers.forEach((i, index) => {
if (i.gridX < this.grid.totalGridsX && i.gridY < this.grid.totalGridsY) {
if (this.serverLookup[i.gridX] === undefined)
this.serverLookup[i.gridX] = [];
this.serverLookup[i.gridX][i.gridY] = index;
} else {
this.unknownServers.push(index);
}
});
console.log("Server Lookup", this.serverLookup);
console.log("Unknown Servers", this.unknownServers);
}
ngOnInit() {
}
}