ioutil.go 820 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package engineio
  2. import (
  3. "github.com/googollee/go-engine.io/parser"
  4. "io"
  5. "sync"
  6. )
  7. type connReader struct {
  8. *parser.PacketDecoder
  9. closeChan chan struct{}
  10. }
  11. func newConnReader(d *parser.PacketDecoder, closeChan chan struct{}) *connReader {
  12. return &connReader{
  13. PacketDecoder: d,
  14. closeChan: closeChan,
  15. }
  16. }
  17. func (r *connReader) Close() error {
  18. if r.closeChan == nil {
  19. return nil
  20. }
  21. r.closeChan <- struct{}{}
  22. r.closeChan = nil
  23. return nil
  24. }
  25. type connWriter struct {
  26. io.WriteCloser
  27. locker *sync.Mutex
  28. }
  29. func newConnWriter(w io.WriteCloser, locker *sync.Mutex) *connWriter {
  30. return &connWriter{
  31. WriteCloser: w,
  32. locker: locker,
  33. }
  34. }
  35. func (w *connWriter) Close() error {
  36. defer func() {
  37. if w.locker != nil {
  38. w.locker.Unlock()
  39. w.locker = nil
  40. }
  41. }()
  42. return w.WriteCloser.Close()
  43. }