listener.go 582 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package gateway
  2. import (
  3. "io"
  4. "net"
  5. )
  6. type Listener struct {
  7. addr net.Addr
  8. ch chan net.Conn
  9. }
  10. func (l *Listener) Receive(conn net.Conn) {
  11. select {
  12. case l.ch <- conn:
  13. default:
  14. }
  15. }
  16. func (l *Listener) Accept() (net.Conn, error) {
  17. select {
  18. case c, ok := <-l.ch:
  19. if ok {
  20. return c, nil
  21. }
  22. return nil, io.ErrClosedPipe
  23. }
  24. }
  25. func (l *Listener) Close() error {
  26. close(l.ch)
  27. return nil
  28. }
  29. func (l *Listener) Addr() net.Addr {
  30. return l.addr
  31. }
  32. func NewListener(addr net.Addr) *Listener {
  33. l := &Listener{
  34. addr: addr,
  35. ch: make(chan net.Conn, 2),
  36. }
  37. return l
  38. }