X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/d4c152a4dba0eec7c8ecd13732900909f51b1c97..02b446d81d53ba3ccd4175917a62563bbda54199:/hotline/client_conn.go diff --git a/hotline/client_conn.go b/hotline/client_conn.go index c1ae4e3..4e703c2 100644 --- a/hotline/client_conn.go +++ b/hotline/client_conn.go @@ -2,9 +2,11 @@ package hotline import ( "encoding/binary" + "go.uber.org/zap" "golang.org/x/crypto/bcrypt" "io" "math/big" + "sort" ) type byClientID []*ClientConn @@ -64,6 +66,7 @@ type ClientConn struct { AutoReply []byte Transfers map[int][]*FileTransfer Agreed bool + logger *zap.SugaredLogger } func (cc *ClientConn) sendAll(t int, fields ...Field) { @@ -96,10 +99,8 @@ func (cc *ClientConn) handleTransaction(transaction *Transaction) error { } } - cc.Server.Logger.Infow( + cc.logger.Infow( "Received Transaction", - "login", cc.Account.Login, - "name", string(cc.UserName), "RequestType", handler.Name, ) @@ -164,9 +165,9 @@ func (cc *ClientConn) Authorize(access int) bool { return true } - accessBitmap := big.NewInt(int64(binary.BigEndian.Uint64(*cc.Account.Access))) + i := big.NewInt(int64(binary.BigEndian.Uint64(*cc.Account.Access))) - return accessBitmap.Bit(63-access) == 1 + return i.Bit(63-access) == 1 } // Disconnect notifies other clients that a client has disconnected @@ -222,3 +223,13 @@ func (cc *ClientConn) NewErrReply(t *Transaction, errMsg string) Transaction { }, } } + +// sortedClients is a utility function that takes a map of *ClientConn and returns a sorted slice of the values. +// The purpose of this is to ensure that the ordering of client connections is deterministic so that test assertions work. +func sortedClients(unsortedClients map[uint16]*ClientConn) (clients []*ClientConn) { + for _, c := range unsortedClients { + clients = append(clients, c) + } + sort.Sort(byClientID(clients)) + return clients +}