diff --git a/assembly/game_handler.ts b/assembly/game_handler.ts index b55104f..b971fbf 100644 --- a/assembly/game_handler.ts +++ b/assembly/game_handler.ts @@ -1,4 +1,4 @@ -import {decode, GetBalanceRequest, JoinRequest, RollRequest, UnknownRequest} from "./request"; +import {decode, GetBalanceRequest, JoinRequest, Request, RollRequest, UnknownRequest} from "./request"; import {ErrorResponse} from "./response"; import {GameManager} from "./dice"; @@ -7,7 +7,7 @@ let gameManager = new GameManager(); // returns string, because serialization to a byte array is not compatible with our invoke handlers export function handler(requestBytes: Uint8Array): string { - let request = decode(requestBytes); + let request: Request = decode(requestBytes); if (request instanceof JoinRequest) { return gameManager.join().serialize(); @@ -16,9 +16,9 @@ export function handler(requestBytes: Uint8Array): string { } else if (request instanceof GetBalanceRequest) { return gameManager.getBalance(request.playerId).serialize(); } else if (request instanceof UnknownRequest) { - return new ErrorResponse("There is no such type of request.").serialize(); - } else { - unreachable(); - return ""; + return new ErrorResponse(request.message).serialize(); } + + let response = new ErrorResponse("Unereachable: " + request.action); + return response.serialize(); } diff --git a/assembly/index.ts b/assembly/index.ts index f4506bf..bf2dea7 100644 --- a/assembly/index.ts +++ b/assembly/index.ts @@ -1,4 +1,4 @@ -import "allocator/tlsf"; +// import "allocator/tlsf"; //import "allocator/buddy"; //import "allocator/arena"; diff --git a/assembly/request.ts b/assembly/request.ts index d44965f..6a36c47 100644 --- a/assembly/request.ts +++ b/assembly/request.ts @@ -1,9 +1,25 @@ import {JSONDecoder, JSONHandler} from "../node_modules/assemblyscript-json/assembly/decoder"; -export abstract class Request {} +export abstract class Request { + public action: string = ""; +} -export class UnknownRequest extends Request {} -export class JoinRequest extends Request {} +export class UnknownRequest extends Request { + public message: string; + + constructor(message: string) { + super(); + this.action = "unknown"; + this.message = message; + } + +} +export class JoinRequest extends Request { + constructor() { + super(); + this.action = "Join"; + } +} export class RollRequest extends Request { public readonly playerId: u64; public betPlacement: u8; @@ -13,6 +29,7 @@ export class RollRequest extends Request { this.playerId = playerId; this.betPlacement = betPlacement; this.betSize = betSize; + this.action = "Roll"; } } export class GetBalanceRequest extends Request { @@ -20,6 +37,7 @@ export class GetBalanceRequest extends Request { constructor(playerId: u64) { super(); this.playerId = playerId; + this.action = "GetBalance"; } } @@ -31,6 +49,10 @@ export function decode(bytes: Uint8Array): Request { let action = jsonHandler.action; + if (!action) { + return new UnknownRequest("'action' field is not specified.") + } + if (action === "Join") { return new JoinRequest(); } else if (action === "Roll") { @@ -38,7 +60,7 @@ export function decode(bytes: Uint8Array): Request { } else if (action === "GetBalance") { return new GetBalanceRequest(jsonHandler.playerId) } else { - return new UnknownRequest(); + return new UnknownRequest("There is no request with action: " + action); } }