package xugu import ( "bufio" ) // ---------------------------------------------------------------------------------------------------- type SrvResponse struct { FormArgDescri []*FormArgDescri SelectResult []*SelectResult InsertResult []*InsertResult UpdateResult []*UpdateResult DeleteResult []*DeleteResult ProcRet []*ProcRet OutParamRet []*OutParamRet ErrInfo []*ErrInfo WarnInfo []*WarnInfo Message []*Message } // func parseResponse(conn net.Conn) (*SrvResponse, error) { // response := &SrvResponse{} // reader := bufio.NewReader(conn) // for { // msgType, err := reader.ReadByte() // if err != nil { // return nil, err // } // switch msgType { // case '$': // argDescri, err := parseFormArgDescri(reader) // if err != nil { // return nil, err // } // response.FormArgDescri = append(response.FormArgDescri, argDescri) // case 'I': // insertResult, err := parseInsertResult(reader) // if err != nil { // return nil, err // } // response.InsertResult = append(response.InsertResult, insertResult) // case 'U': // updateResult, err := parseUpdateResult(reader) // if err != nil { // return nil, err // } // response.UpdateResult = append(response.UpdateResult, updateResult) // case 'D': // deleteResult, err := parseDeleteResult(reader) // if err != nil { // return nil, err // } // response.DeleteResult = append(response.DeleteResult, deleteResult) // case 'O': // procRet, err := parseProcRet(reader) // if err != nil { // return nil, err // } // response.ProcRet = append(response.ProcRet, procRet) // case 'P': // outParamRet, err := parseOutParamRet(reader) // if err != nil { // return nil, err // } // response.OutParamRet = append(response.OutParamRet, outParamRet) // case 'E': // errInfo, err := parseErrInfo(reader) // if err != nil { // return nil, err // } // response.ErrInfo = append(response.ErrInfo, errInfo) // case 'W': // warnInfo, err := parseWarnInfo(reader) // if err != nil { // return nil, err // } // response.WarnInfo = append(response.WarnInfo, warnInfo) // case 'M': // message, err := parseMessage(reader) // if err != nil { // return nil, err // } // response.Message = append(response.Message, message) // case 'K': // return response, nil // default: // return nil, fmt.Errorf("未知的消息类型: %v", msgType) // } // } // } // 解析函数的实现,例如 parseFormArgDescri 等 func readString(reader *bufio.Reader, length int) (string, error) { bytes := make([]byte, length) _, err := reader.Read(bytes) return string(bytes), err } func parseFieldDescri(reader *bufio.Reader) (FieldDescri, error) { fieldDescri := FieldDescri{} var err error fieldDescri.FieldNameLen, err = readInt32(reader) if err != nil { return fieldDescri, err } fieldDescri.FieldName, err = readString(reader, fieldDescri.FieldNameLen) if err != nil { return fieldDescri, err } // fieldDescri.FieldType, err = fieldType(reader) // if err != nil { // return fieldDescri, err // } fieldDescri.FieldPreciScale, err = readInt32(reader) if err != nil { return fieldDescri, err } fieldDescri.FieldFlag, err = readInt32(reader) if err != nil { return fieldDescri, err } return fieldDescri, nil }