diff --git a/webclient/src/api/AdminService.tsx b/webclient/src/api/AdminService.tsx new file mode 100644 index 000000000..b7fb9efa4 --- /dev/null +++ b/webclient/src/api/AdminService.tsx @@ -0,0 +1,19 @@ +import { AdminCommands } from 'websocket'; + +export default class AdminService { + static adjustMod(userName: string, shouldBeMod?: boolean, shouldBeJudge?: boolean): void { + AdminCommands.adjustMod(userName, shouldBeMod, shouldBeJudge); + } + + static reloadConfig(): void { + AdminCommands.reloadConfig(); + } + + static shutdownServer(reason: string, minutes: number): void { + AdminCommands.shutdownServer(reason, minutes); + } + + static updateServerMessage(): void { + AdminCommands.updateServerMessage(); + } +} diff --git a/webclient/src/api/index.ts b/webclient/src/api/index.ts index 9d2f3726f..aebb8f81a 100644 --- a/webclient/src/api/index.ts +++ b/webclient/src/api/index.ts @@ -1,3 +1,4 @@ +export { default as AdminService } from './AdminService'; export { default as AuthenticationService } from './AuthenticationService'; export { default as ModeratorService } from './ModeratorService'; export { default as RoomsService } from './RoomsService'; diff --git a/webclient/src/websocket/commands/admin/adjustMod.ts b/webclient/src/websocket/commands/admin/adjustMod.ts new file mode 100644 index 000000000..fed82eeaa --- /dev/null +++ b/webclient/src/websocket/commands/admin/adjustMod.ts @@ -0,0 +1,29 @@ +import webClient from '../../WebClient'; +import { AdminPersistence } from '../../persistence'; + +export function adjustMod(userName: string, shouldBeMod?: boolean, shouldBeJudge?: boolean): void { + const command = webClient.protobuf.controller.Command_AdjustMod.create({ userName, shouldBeMod, shouldBeJudge }); + + const sc = webClient.protobuf.controller.AdminCommand.create({ + '.Command_AdjustMod.ext': command + }); + + webClient.protobuf.sendAdminCommand(sc, (raw) => { + const { responseCode } = raw; + + let error: string; + + switch (responseCode) { + case webClient.protobuf.controller.Response.ResponseCode.RespOk: + AdminPersistence.adjustMod(userName, shouldBeMod, shouldBeJudge); + return; + default: + error = 'Failed to reload config.'; + break; + } + + if (error) { + console.error(responseCode, error); + } + }); +} diff --git a/webclient/src/websocket/commands/admin/index.ts b/webclient/src/websocket/commands/admin/index.ts new file mode 100644 index 000000000..5d4ae21bf --- /dev/null +++ b/webclient/src/websocket/commands/admin/index.ts @@ -0,0 +1,4 @@ +export * from './adjustMod'; +export * from './reloadConfig'; +export * from './shutdownServer'; +export * from './updateServerMessage'; diff --git a/webclient/src/websocket/commands/admin/reloadConfig.ts b/webclient/src/websocket/commands/admin/reloadConfig.ts new file mode 100644 index 000000000..6dbae9712 --- /dev/null +++ b/webclient/src/websocket/commands/admin/reloadConfig.ts @@ -0,0 +1,29 @@ +import webClient from '../../WebClient'; +import { AdminPersistence } from '../../persistence'; + +export function reloadConfig(): void { + const command = webClient.protobuf.controller.Command_ReloadConfig.create(); + + const sc = webClient.protobuf.controller.AdminCommand.create({ + '.Command_ReloadConfig.ext': command + }); + + webClient.protobuf.sendAdminCommand(sc, (raw) => { + const { responseCode } = raw; + + let error: string; + + switch (responseCode) { + case webClient.protobuf.controller.Response.ResponseCode.RespOk: + AdminPersistence.reloadConfig(); + return; + default: + error = 'Failed to reload config.'; + break; + } + + if (error) { + console.error(responseCode, error); + } + }); +} diff --git a/webclient/src/websocket/commands/admin/shutdownServer.ts b/webclient/src/websocket/commands/admin/shutdownServer.ts new file mode 100644 index 000000000..090a25187 --- /dev/null +++ b/webclient/src/websocket/commands/admin/shutdownServer.ts @@ -0,0 +1,29 @@ +import webClient from '../../WebClient'; +import { AdminPersistence } from '../../persistence'; + +export function shutdownServer(reason: string, minutes: number): void { + const command = webClient.protobuf.controller.Command_ShutdownServer.create({ reason, minutes }); + + const sc = webClient.protobuf.controller.AdminCommand.create({ + '.Command_ShutdownServer.ext': command + }); + + webClient.protobuf.sendAdminCommand(sc, (raw) => { + const { responseCode } = raw; + + let error: string; + + switch (responseCode) { + case webClient.protobuf.controller.Response.ResponseCode.RespOk: + AdminPersistence.shutdownServer(); + return; + default: + error = 'Failed to update server message.'; + break; + } + + if (error) { + console.error(responseCode, error); + } + }); +} diff --git a/webclient/src/websocket/commands/admin/updateServerMessage.ts b/webclient/src/websocket/commands/admin/updateServerMessage.ts new file mode 100644 index 000000000..00cea46d2 --- /dev/null +++ b/webclient/src/websocket/commands/admin/updateServerMessage.ts @@ -0,0 +1,29 @@ +import webClient from '../../WebClient'; +import { AdminPersistence } from '../../persistence'; + +export function updateServerMessage(): void { + const command = webClient.protobuf.controller.Command_UpdateServerMessage.create(); + + const sc = webClient.protobuf.controller.AdminCommand.create({ + '.Command_UpdateServerMessage.ext': command + }); + + webClient.protobuf.sendAdminCommand(sc, (raw) => { + const { responseCode } = raw; + + let error: string; + + switch (responseCode) { + case webClient.protobuf.controller.Response.ResponseCode.RespOk: + AdminPersistence.updateServerMessage(); + return; + default: + error = 'Failed to update server message.'; + break; + } + + if (error) { + console.error(responseCode, error); + } + }); +} diff --git a/webclient/src/websocket/commands/index.tsx b/webclient/src/websocket/commands/index.tsx index 0681b08fc..2c68fcfb9 100644 --- a/webclient/src/websocket/commands/index.tsx +++ b/webclient/src/websocket/commands/index.tsx @@ -1,3 +1,4 @@ +export * as AdminCommands from './admin'; export * as ModeratorCommands from './moderator'; export * as RoomCommands from './room'; export * as SessionCommands from './session'; diff --git a/webclient/src/websocket/persistence/AdminPresistence.ts b/webclient/src/websocket/persistence/AdminPresistence.ts new file mode 100644 index 000000000..2e03a811a --- /dev/null +++ b/webclient/src/websocket/persistence/AdminPresistence.ts @@ -0,0 +1,17 @@ +export class AdminPersistence { + static adjustMod(userName: string, shouldBeMod: boolean, shouldBeJudge: boolean) { + console.log('adjustMod'); + } + + static reloadConfig() { + console.log('reloadConfig'); + } + + static shutdownServer() { + console.log('shutdownServer'); + } + + static updateServerMessage() { + console.log('updateServerMessage'); + } +} diff --git a/webclient/src/websocket/persistence/index.ts b/webclient/src/websocket/persistence/index.ts index f858a2386..2235d505e 100644 --- a/webclient/src/websocket/persistence/index.ts +++ b/webclient/src/websocket/persistence/index.ts @@ -1,3 +1,4 @@ +export { AdminPersistence } from './AdminPresistence'; export { RoomPersistence } from './RoomPersistence'; export { SessionPersistence } from './SessionPersistence'; export { ModeratorPersistence } from './ModeratorPresistence'; diff --git a/webclient/src/websocket/services/ProtobufService.ts b/webclient/src/websocket/services/ProtobufService.ts index 155959bc9..6dda2fba9 100644 --- a/webclient/src/websocket/services/ProtobufService.ts +++ b/webclient/src/websocket/services/ProtobufService.ts @@ -55,6 +55,14 @@ export class ProtobufService { this.sendCommand(cmd, (raw) => callback && callback(raw)); } + public sendAdminCommand(adminCmd: number, callback?: Function) { + const cmd = this.controller.CommandContainer.create({ + 'adminCommand': [adminCmd] + }); + + this.sendCommand(cmd, (raw) => callback && callback(raw)); + } + public sendCommand(cmd: number, callback: Function) { this.cmdId++;