server_tcp.go 747 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package cpn
  2. import (
  3. "net"
  4. "one.com/nnet"
  5. "time"
  6. )
  7. type TcpServer struct {
  8. *Hub
  9. listener *net.TCPListener
  10. }
  11. func NewTcpServer(cf *nnet.HubConfig, cb nnet.ISessionCallback, p nnet.IProtocol, ls *net.TCPListener) nnet.IHub {
  12. return &TcpServer{
  13. Hub: newHub(cf, cb, p),
  14. listener: ls,
  15. }
  16. }
  17. func (self *TcpServer) Start() error {
  18. self.wg.Add(1)
  19. defer func() {
  20. self.listener.Close()
  21. self.wg.Done()
  22. }()
  23. for {
  24. select {
  25. case <-self.chQuit:
  26. return nil
  27. default:
  28. }
  29. self.listener.SetDeadline(time.Now().Add(self.conf.Timeout))
  30. conn, err := self.listener.AcceptTCP()
  31. if err != nil {
  32. continue
  33. }
  34. self.wg.Add(1)
  35. go func() {
  36. ses := newSession(conn, self)
  37. ses.Do()
  38. self.wg.Done()
  39. }()
  40. }
  41. return nil
  42. }