From a393e213aaa1cce12a9a97bb4a4494eb3e7c908f Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Wed, 20 Oct 2021 22:01:16 -0700 Subject: [PATCH] Create a pool for the type checking --- core/chat/server.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/core/chat/server.go b/core/chat/server.go index 8c0cd2265..407eff154 100644 --- a/core/chat/server.go +++ b/core/chat/server.go @@ -24,6 +24,14 @@ var _server *Server // a map of user IDs and when they last were active. var _lastSeenCache = sync.Map{} +type typeCheck struct { + Type string `json:"type"` +} + +var _typeCheckPool = sync.Pool{ + New: func() interface{} { return new(typeCheck) }, +} + // Server represents an instance of the chat server. type Server struct { seq uint @@ -284,14 +292,14 @@ func (s *Server) DisconnectUser(userID string) { } func (s *Server) eventReceived(event chatClientEvent) { - var typecheck map[string]interface{} - if err := json.Unmarshal(event.data, &typecheck); err != nil { + tc := _typeCheckPool.Get().(*typeCheck) + defer _typeCheckPool.Put(tc) + + if err := json.Unmarshal(event.data, tc); err != nil { log.Debugln(err) } - eventType := typecheck["type"] - - switch eventType { + switch tc.Type { case events.MessageSent: s.userMessageSent(event) @@ -299,7 +307,7 @@ func (s *Server) eventReceived(event chatClientEvent) { s.userNameChanged(event) default: - log.Debugln(eventType, "event not found:", typecheck) + log.Debugln(tc.Type, "event not found:", tc) } }