When pipeline.ProcessRequest return false, the nakama-js can be timeout because the IncommingLoop is break. To fix it, we add a flag for safely break the IncommingLoop
diff --git a/server/session_ws.go b/server/session_ws.go
index b5a9222e..f37eacb1 100644
--- a/server/session_ws.go
+++ b/server/session_ws.go
@@ -171,6 +171,8 @@ func (s *sessionWS) Expiry() int64 {
}
func (s *sessionWS) Consume() {
+ var IsSafeBreakLoop bool = false
+
// Fire an event for session start.
if fn := s.runtime.EventSessionStart(); fn != nil {
fn(s.userID.String(), s.username.Load(), s.vars, s.expiry, s.id.String(), s.clientIP, s.clientPort, s.lang, time.Now().UTC().Unix())
@@ -241,17 +243,21 @@ IncomingLoop:
break
}
+ if IsSafeBreakLoop {
+ break IncomingLoop
+ }
+
switch request.Cid {
case "":
if !s.pipeline.ProcessRequest(s.logger, s, request) {
reason = "error processing message"
- break IncomingLoop
+ IsSafeBreakLoop = true
}
default:
requestLogger := s.logger.With(zap.String("cid", request.Cid))
if !s.pipeline.ProcessRequest(requestLogger, s, request) {
reason = "error processing message"
- break IncomingLoop
+ IsSafeBreakLoop = true
}
}