// sendResponse send resp to client, sendResponse must be goroutine safe. func (server *Server) writeTCPResponse(wr *bufio.Writer, p *Proto) (err error) { var ( buf []byte packLen int32 ) packLen = RawHeaderSize + int32(len(p.Body)) p.HeaderLen = RawHeaderSize if buf, err = wr.Peek(RawHeaderSize); err != nil { return } binary.BigEndian.PutInt32(buf[PackOffset:], packLen) binary.BigEndian.PutInt16(buf[HeaderOffset:], p.HeaderLen) binary.BigEndian.PutInt16(buf[VerOffset:], p.Ver) binary.BigEndian.PutInt32(buf[OperationOffset:], p.Operation) binary.BigEndian.PutInt32(buf[SeqIdOffset:], p.SeqId) if p.Body != nil { _, err = wr.Write(p.Body) } if Debug { log.Debug("write proto: %v", p) } return }