xugu_sock_recv2.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package xugu
  2. import (
  3. "bufio"
  4. )
  5. // ----------------------------------------------------------------------------------------------------
  6. type SrvResponse struct {
  7. FormArgDescri []*FormArgDescri
  8. SelectResult []*SelectResult
  9. InsertResult []*InsertResult
  10. UpdateResult []*UpdateResult
  11. DeleteResult []*DeleteResult
  12. ProcRet []*ProcRet
  13. OutParamRet []*OutParamRet
  14. ErrInfo []*ErrInfo
  15. WarnInfo []*WarnInfo
  16. Message []*Message
  17. }
  18. // func parseResponse(conn net.Conn) (*SrvResponse, error) {
  19. // response := &SrvResponse{}
  20. // reader := bufio.NewReader(conn)
  21. // for {
  22. // msgType, err := reader.ReadByte()
  23. // if err != nil {
  24. // return nil, err
  25. // }
  26. // switch msgType {
  27. // case '$':
  28. // argDescri, err := parseFormArgDescri(reader)
  29. // if err != nil {
  30. // return nil, err
  31. // }
  32. // response.FormArgDescri = append(response.FormArgDescri, argDescri)
  33. // case 'I':
  34. // insertResult, err := parseInsertResult(reader)
  35. // if err != nil {
  36. // return nil, err
  37. // }
  38. // response.InsertResult = append(response.InsertResult, insertResult)
  39. // case 'U':
  40. // updateResult, err := parseUpdateResult(reader)
  41. // if err != nil {
  42. // return nil, err
  43. // }
  44. // response.UpdateResult = append(response.UpdateResult, updateResult)
  45. // case 'D':
  46. // deleteResult, err := parseDeleteResult(reader)
  47. // if err != nil {
  48. // return nil, err
  49. // }
  50. // response.DeleteResult = append(response.DeleteResult, deleteResult)
  51. // case 'O':
  52. // procRet, err := parseProcRet(reader)
  53. // if err != nil {
  54. // return nil, err
  55. // }
  56. // response.ProcRet = append(response.ProcRet, procRet)
  57. // case 'P':
  58. // outParamRet, err := parseOutParamRet(reader)
  59. // if err != nil {
  60. // return nil, err
  61. // }
  62. // response.OutParamRet = append(response.OutParamRet, outParamRet)
  63. // case 'E':
  64. // errInfo, err := parseErrInfo(reader)
  65. // if err != nil {
  66. // return nil, err
  67. // }
  68. // response.ErrInfo = append(response.ErrInfo, errInfo)
  69. // case 'W':
  70. // warnInfo, err := parseWarnInfo(reader)
  71. // if err != nil {
  72. // return nil, err
  73. // }
  74. // response.WarnInfo = append(response.WarnInfo, warnInfo)
  75. // case 'M':
  76. // message, err := parseMessage(reader)
  77. // if err != nil {
  78. // return nil, err
  79. // }
  80. // response.Message = append(response.Message, message)
  81. // case 'K':
  82. // return response, nil
  83. // default:
  84. // return nil, fmt.Errorf("未知的消息类型: %v", msgType)
  85. // }
  86. // }
  87. // }
  88. // 解析函数的实现,例如 parseFormArgDescri 等
  89. func readString(reader *bufio.Reader, length int) (string, error) {
  90. bytes := make([]byte, length)
  91. _, err := reader.Read(bytes)
  92. return string(bytes), err
  93. }
  94. func parseFieldDescri(reader *bufio.Reader) (FieldDescri, error) {
  95. fieldDescri := FieldDescri{}
  96. var err error
  97. fieldDescri.FieldNameLen, err = readInt32(reader)
  98. if err != nil {
  99. return fieldDescri, err
  100. }
  101. fieldDescri.FieldName, err = readString(reader, fieldDescri.FieldNameLen)
  102. if err != nil {
  103. return fieldDescri, err
  104. }
  105. // fieldDescri.FieldType, err = fieldType(reader)
  106. // if err != nil {
  107. // return fieldDescri, err
  108. // }
  109. fieldDescri.FieldPreciScale, err = readInt32(reader)
  110. if err != nil {
  111. return fieldDescri, err
  112. }
  113. fieldDescri.FieldFlag, err = readInt32(reader)
  114. if err != nil {
  115. return fieldDescri, err
  116. }
  117. return fieldDescri, nil
  118. }