wareInfo.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * @Author : zou.yingbin
  3. * @Create : 2022/3/23 11:05
  4. * @Modify : 2022/3/23 11:05
  5. * @note :
  6. */
  7. package client
  8. import (
  9. "log"
  10. "strings"
  11. )
  12. type wareInfo struct {
  13. buf []byte // 内容[报价开始(0x10):报价结束(0x11)]
  14. exchId string // 交易所id
  15. goodsCode string // 商品代码
  16. ask string // 卖价
  17. bid string // 买价
  18. last string // 最新价
  19. tm string // 时间
  20. }
  21. func (r *wareInfo) getField(tag byte) string {
  22. for i, v := range r.buf {
  23. if v == tag {
  24. for j, d := range r.buf[i:] {
  25. if d == 0x01 || d == 0x11 {
  26. buf := r.buf[i+2 : i+j]
  27. return string(buf)
  28. }
  29. }
  30. }
  31. }
  32. return ""
  33. }
  34. func (r *wareInfo) parseField() {
  35. r.goodsCode = r.getField(0x21)
  36. r.ask = r.getField(0x4c)
  37. r.bid = r.getField(0x42)
  38. r.last = r.getField(0x24)
  39. r.tm = r.getField(0x41)
  40. r.exchId = r.getField(0x56)
  41. if r.exchId == "200" {
  42. r.goodsCode = "200"
  43. }
  44. }
  45. func (r *wareInfo) printInfo() {
  46. if r.ask == "" {
  47. return
  48. }
  49. log.Println(r.exchId, r.goodsCode, r.ask, r.bid, r.last, r.tm)
  50. }
  51. func (r *wareInfo) debugPrintAllField() {
  52. if len(r.buf) <= 2 {
  53. return
  54. }
  55. if r.buf[0] != 0x10 || r.buf[len(r.buf)-1] != 0x11 {
  56. return
  57. }
  58. type Field struct {
  59. Tag byte
  60. Value string
  61. }
  62. var sField []Field
  63. tmp := string(r.buf[2 : len(r.buf)-1])
  64. //0x01 字段分割
  65. strS := strings.Split(tmp, string([]byte{0x01}))
  66. for _, v := range strS {
  67. //0x02 值分割
  68. split := strings.Split(v, string([]byte{0x02}))
  69. if len(split) != 2 {
  70. break
  71. }
  72. d := Field{
  73. Tag: ([]byte(split[0]))[0],
  74. Value: split[1],
  75. }
  76. sField = append(sField, d)
  77. }
  78. for _, v := range sField {
  79. log.Printf("0x%0x %s\n", v.Tag, v.Value)
  80. }
  81. }