-
-
Save tom-willmowski/37f5771c9983ba03546cb37909b2d139 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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