X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/949ec814ff03bde39164405bc1f602b876a1e1de..d8aeb2dea5395514ad49c6271bc7d62e201f371b:/hotline/server.go?ds=sidebyside diff --git a/hotline/server.go b/hotline/server.go index bd15a2e..bda0c2a 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -36,6 +36,8 @@ type requestCtx struct { var nostalgiaVersion = []byte{0, 0, 2, 0x2c} // version ID used by the Nostalgia client var frogblastVersion = []byte{0, 0, 0, 0xb9} // version ID used by the Frogblast 1.2.4 client +var obsessionVersion = []byte{0xbe, 0x00} // version ID used by the Obsession client + type Server struct { Port int Accounts map[string]*Account @@ -153,18 +155,18 @@ func (s *Server) sendTransaction(t Transaction) error { s.mux.Lock() client := s.Clients[uint16(clientID)] + s.mux.Unlock() if client == nil { return fmt.Errorf("invalid client id %v", *t.clientID) } - s.mux.Unlock() - b, err := t.MarshalBinary() if err != nil { return err } - if _, err := client.Connection.Write(b); err != nil { + _, err = client.Connection.Write(b) + if err != nil { return err } @@ -673,7 +675,8 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser } // Used simplified hotline v1.2.3 login flow for clients that do not send login info in tranAgreed - if c.Version == nil || bytes.Equal(c.Version, nostalgiaVersion) || bytes.Equal(c.Version, frogblastVersion) { + // TODO: figure out a generalized solution that doesn't require playing whack-a-mole for specific client versions + if c.Version == nil || bytes.Equal(c.Version, nostalgiaVersion) || bytes.Equal(c.Version, frogblastVersion) || bytes.Equal(c.Version, obsessionVersion) { c.Agreed = true c.logger = c.logger.With("name", string(c.UserName)) c.logger.Infow("Login successful", "clientVersion", fmt.Sprintf("%v", func() int { i, _ := byteToInt(c.Version); return i }()))