]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/client_conn.go
Adopt more fixed size array types for struct fields
[rbdr/mobius] / hotline / client_conn.go
index f73265d6f7a0f8643384dc53331bc2d1ae0236ff..0a7768f78835597e1026f386ac82dc3da9ac5702 100644 (file)
@@ -54,13 +54,13 @@ func (cc *ClientConn) sendAll(t int, fields ...Field) {
 }
 
 func (cc *ClientConn) handleTransaction(transaction Transaction) error {
-       requestNum := binary.BigEndian.Uint16(transaction.Type)
+       requestNum := binary.BigEndian.Uint16(transaction.Type[:])
        if handler, ok := TransactionHandlers[requestNum]; ok {
                for _, reqField := range handler.RequiredFields {
                        field := transaction.GetField(reqField.ID)
 
                        // Validate that required field is present
-                       if field.ID == nil {
+                       if field.ID == [2]byte{0, 0} {
                                cc.logger.Error(
                                        "Missing required field",
                                        "RequestType", handler.Name, "FieldID", reqField.ID,
@@ -81,7 +81,7 @@ func (cc *ClientConn) handleTransaction(transaction Transaction) error {
 
                transactions, err := handler.Handler(cc, &transaction)
                if err != nil {
-                       return err
+                       return fmt.Errorf("error handling transaction: %w", err)
                }
                for _, t := range transactions {
                        cc.Server.outbox <- t
@@ -166,28 +166,24 @@ func (cc *ClientConn) notifyOthers(t Transaction) (trans []Transaction) {
 
 // NewReply returns a reply Transaction with fields for the ClientConn
 func (cc *ClientConn) NewReply(t *Transaction, fields ...Field) Transaction {
-       reply := Transaction{
-               Flags:     0x00,
+       return Transaction{
                IsReply:   0x01,
-               Type:      []byte{0x00, 0x00},
+               Type:      [2]byte{0x00, 0x00},
                ID:        t.ID,
                clientID:  cc.ID,
-               ErrorCode: []byte{0, 0, 0, 0},
+               ErrorCode: [4]byte{0, 0, 0, 0},
                Fields:    fields,
        }
-
-       return reply
 }
 
 // NewErrReply returns an error reply Transaction with errMsg
 func (cc *ClientConn) NewErrReply(t *Transaction, errMsg string) Transaction {
        return Transaction{
                clientID:  cc.ID,
-               Flags:     0x00,
                IsReply:   0x01,
-               Type:      []byte{0, 0},
+               Type:      [2]byte{0, 0},
                ID:        t.ID,
-               ErrorCode: []byte{0, 0, 0, 1},
+               ErrorCode: [4]byte{0, 0, 0, 1},
                Fields: []Field{
                        NewField(FieldError, []byte(errMsg)),
                },