Skip to content

Instantly share code, notes, and snippets.

@tom-willmowski
Last active November 27, 2022 10:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tom-willmowski/37f5771c9983ba03546cb37909b2d139 to your computer and use it in GitHub Desktop.
Save tom-willmowski/37f5771c9983ba03546cb37909b2d139 to your computer and use it in GitHub Desktop.
// state machine
class StateMachine {
currentState: State | undefined;
public logger: nkruntime.Logger;
public battle: Battle | undefined;
constructor(logger: nkruntime.Logger)
{
this.logger = logger;
}
public change(newState: State) : void
{
if (this.currentState != undefined)
{
this.logger.info("state exit")
this.currentState.exit();
}
this.currentState = newState;
this.logger.info("state enter");
this.currentState.enter();
}
public handle(
context: nkruntime.Context,
logger: nkruntime.Logger,
nakama: nkruntime.Nakama,
dispatcher: nkruntime.MatchDispatcher,
tick: number,
state: nkruntime.MatchState,
messages: nkruntime.MatchMessage[])
{
this.currentState?.handle(context, logger, nakama, dispatcher, tick, state, messages);
}
}
// states
class State {
machine: StateMachine;
constructor(machine: StateMachine)
{
this.machine = machine;
}
public enter(): void { }
public exit(): void { }
public handle(
context: nkruntime.Context,
logger: nkruntime.Logger,
nakama: nkruntime.Nakama,
dispatcher: nkruntime.MatchDispatcher,
tick: number,
state: nkruntime.MatchState,
messages: nkruntime.MatchMessage[]): void {}
}
class LobbyState extends State
{
public enter(): void
{
}
public exit(): void
{
}
public handle(
context: nkruntime.Context,
logger: nkruntime.Logger,
nakama: nkruntime.Nakama,
dispatcher: nkruntime.MatchDispatcher,
tick: number,
state: nkruntime.MatchState,
messages: nkruntime.MatchMessage[]): void
{
}
}
// call
let matchInit: nkruntime.MatchInitFunction = function (context: nkruntime.Context, logger: nkruntime.Logger, nakama: nkruntime.Nakama, params: { [key: string]: string })
{
logger.info("init match");
var machine = new StateMachine(logger);
machine.battle =
{
players: {},
timer: 0,
phase: BattlePhase.Lobby
};
// it seems that this call results in stack overflow
machine.change(new LobbyState(machine));
return {
state: machine,
tickRate: TickRate,
label: matchLabel,
}
}
// here is error log
nakama | {"level":"debug","ts":"2022-11-27T10:32:03.838Z","caller":"server/pipeline.go:65","msg":"Received *rtapi.Envelope_MatchmakerAdd message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"bbeb7e0e-6e3e-11ed-b7ae-7106fdcb5b46","cid":"1","message":{"MatchmakerAdd":{"min_count":2,"max_count":2,"query":"*"}}}
nakama | {"level":"debug","ts":"2022-11-27T10:32:03.840Z","caller":"server/session_ws.go:395","msg":"Sending *rtapi.Envelope_MatchmakerTicket message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"bbeb7e0e-6e3e-11ed-b7ae-7106fdcb5b46","envelope":"cid:\"1\" matchmaker_ticket:{ticket:\"6bdbe1f7-3288-43bd-a6d5-ad5928425607\"}"}
nakama | {"level":"info","ts":"2022-11-27T10:32:10.751Z","caller":"server/session_ws.go:80","msg":"New WebSocket session connected","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"c00dd19a-6e3e-11ed-b7ae-7106fdcb5b46","format":0}
nakama | {"level":"debug","ts":"2022-11-27T10:32:10.833Z","caller":"server/pipeline.go:65","msg":"Received *rtapi.Envelope_MatchmakerAdd message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"c00dd19a-6e3e-11ed-b7ae-7106fdcb5b46","cid":"1","message":{"MatchmakerAdd":{"min_count":2,"max_count":2,"query":"*"}}}
nakama | {"level":"debug","ts":"2022-11-27T10:32:10.835Z","caller":"server/session_ws.go:395","msg":"Sending *rtapi.Envelope_MatchmakerTicket message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"c00dd19a-6e3e-11ed-b7ae-7106fdcb5b46","envelope":"cid:\"1\" matchmaker_ticket:{ticket:\"2121e1a8-40cd-43de-837a-0d1726e918f7\"}"}
nakama | {"level":"info","ts":"2022-11-27T10:32:13.722Z","caller":"server/runtime_javascript_logger.go:74","msg":"init match","mid":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c"}
nakama | {"level":"info","ts":"2022-11-27T10:32:13.722Z","caller":"server/runtime_javascript_logger.go:74","msg":"state exit","mid":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c"}
nakama | {"level":"info","ts":"2022-11-27T10:32:13.722Z","caller":"server/runtime_javascript_logger.go:74","msg":"state enter","mid":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c"}
nakama | {"level":"info","ts":"2022-11-27T10:32:13.722Z","caller":"server/match_handler.go:204","msg":"Match started","mid":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c"}
nakama | {"level":"debug","ts":"2022-11-27T10:32:13.731Z","caller":"server/pipeline.go:65","msg":"Received *rtapi.Envelope_MatchJoin message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"bbeb7e0e-6e3e-11ed-b7ae-7106fdcb5b46","cid":"2","message":{"MatchJoin":{"Id":{"MatchId":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c.nakama1"}}}}
nakama | {"level":"debug","ts":"2022-11-27T10:32:13.733Z","caller":"server/pipeline.go:65","msg":"Received *rtapi.Envelope_MatchJoin message","uid":"5004866a-c495-4023-b2a3-d1cae78beffa","sid":"c00dd19a-6e3e-11ed-b7ae-7106fdcb5b46","cid":"2","message":{"MatchJoin":{"Id":{"MatchId":"faa4b4a2-5d7e-4eb6-8f8c-35af5c44420c.nakama1"}}}}
nakama | runtime: goroutine stack exceeds 1000000000-byte limit
nakama | runtime: sp=0xc021a603d0 stack=[0xc021a60000, 0xc041a60000]
nakama | fatal error: stack overflow
nakama |
nakama | runtime stack:
nakama | runtime.throw({0x1d83d68?, 0x2d25da0?})
nakama | runtime/panic.go:1047 +0x5d fp=0x7fd5797b9cb8 sp=0x7fd5797b9c88 pc=0xa903bd
nakama | runtime.newstack()
nakama | runtime/stack.go:1103 +0x5cc fp=0x7fd5797b9e70 sp=0x7fd5797b9cb8 pc=0xaaafac
nakama | runtime.morestack()
nakama | runtime/asm_amd64.s:570 +0x8b fp=0x7fd5797b9e78 sp=0x7fd5797b9e70 pc=0xac3e4b
nakama |
nakama | goroutine 215 [running]:
nakama | runtime.heapBitsSetType(0xc004cd2eb8?, 0x18?, 0x18?, 0x1ae1de0?)
nakama | runtime/mbitmap.go:844 +0xbac fp=0xc021a603e0 sp=0xc021a603d8 pc=0xa6d24c
nakama | runtime.mallocgc(0x18, 0x1ae1de0, 0x1)
nakama | runtime/malloc.go:1050 +0x64d fp=0xc021a60458 sp=0xc021a603e0 pc=0xa6412d
nakama | runtime.newobject(0x0?)
nakama | runtime/malloc.go:1192 +0x27 fp=0xc021a60480 sp=0xc021a60458 pc=0xa644c7
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8345 +0x233 fp=0xc021a60568 sp=0xc021a60480 pc=0x1921473
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60650 sp=0xc021a60568 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60738 sp=0xc021a60650 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60820 sp=0xc021a60738 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60908 sp=0xc021a60820 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a609f0 sp=0xc021a60908 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60ad8 sp=0xc021a609f0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60bc0 sp=0xc021a60ad8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60ca8 sp=0xc021a60bc0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60d90 sp=0xc021a60ca8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60e78 sp=0xc021a60d90 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a60f60 sp=0xc021a60e78 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61048 sp=0xc021a60f60 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61130 sp=0xc021a61048 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61218 sp=0xc021a61130 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61300 sp=0xc021a61218 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a613e8 sp=0xc021a61300 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a614d0 sp=0xc021a613e8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a615b8 sp=0xc021a614d0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a616a0 sp=0xc021a615b8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61788 sp=0xc021a616a0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61870 sp=0xc021a61788 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61958 sp=0xc021a61870 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61a40 sp=0xc021a61958 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61b28 sp=0xc021a61a40 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61c10 sp=0xc021a61b28 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61cf8 sp=0xc021a61c10 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61de0 sp=0xc021a61cf8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61ec8 sp=0xc021a61de0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a61fb0 sp=0xc021a61ec8 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62098 sp=0xc021a61fb0 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62180 sp=0xc021a62098 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62268 sp=0xc021a62180 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62350 sp=0xc021a62268 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00990?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62438 sp=0xc021a62350 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00960?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62520 sp=0xc021a62438 pc=0x1921545
nakama | github.com/heroiclabs/nakama/v3/server.pointerizeSlices({0x1b938e0?, 0xc001a00930?})
nakama | github.com/heroiclabs/nakama/v3/server/runtime_javascript_nakama.go:8350 +0x305 fp=0xc021a62608 sp=0xc021a62520 pc=0x1921545
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment