message_reader.go 957 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package socketio
  2. import (
  3. "bufio"
  4. )
  5. type messageReader struct {
  6. reader *bufio.Reader
  7. message string
  8. firstRead bool
  9. }
  10. func newMessageReader(bufr *bufio.Reader) (*messageReader, error) {
  11. if _, err := bufr.ReadBytes('"'); err != nil {
  12. return nil, err
  13. }
  14. msg, err := bufr.ReadBytes('"')
  15. if err != nil {
  16. return nil, err
  17. }
  18. for {
  19. b, err := bufr.Peek(1)
  20. if err != nil {
  21. return nil, err
  22. }
  23. if b[0] == ',' {
  24. bufr.ReadByte()
  25. break
  26. }
  27. if b[0] != ' ' {
  28. break
  29. }
  30. bufr.ReadByte()
  31. }
  32. return &messageReader{
  33. reader: bufr,
  34. message: string(msg[:len(msg)-1]),
  35. firstRead: true,
  36. }, nil
  37. }
  38. func (r *messageReader) Message() string {
  39. return r.message
  40. }
  41. func (r *messageReader) Read(b []byte) (int, error) {
  42. if len(b) == 0 {
  43. return 0, nil
  44. }
  45. if r.firstRead {
  46. r.firstRead = false
  47. b[0] = '['
  48. n, err := r.reader.Read(b[1:])
  49. if err != nil {
  50. return -1, err
  51. }
  52. return n + 1, err
  53. }
  54. return r.reader.Read(b)
  55. }