| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package cpn
- import (
- "net"
- "git.wanbits.io/joe/nnet"
- "time"
- )
- type TcpServer struct {
- *Hub
- listener *net.TCPListener
- }
- func NewTcpServer(cf *nnet.HubConfig, cb nnet.ISessionCallback, p nnet.IProtocol, ls *net.TCPListener) nnet.IHub {
- return &TcpServer{
- Hub: newHub(cf, cb, p),
- listener: ls,
- }
- }
- func (self *TcpServer) Start() error {
- self.wg.Add(1)
- defer func() {
- self.listener.Close()
- self.wg.Done()
- }()
- for {
- select {
- case <-self.chQuit:
- return nil
- default:
- }
- self.listener.SetDeadline(time.Now().Add(self.conf.Timeout))
- conn, err := self.listener.AcceptTCP()
- if err != nil {
- continue
- }
- self.wg.Add(1)
- go func() {
- ses := newSession(conn, self)
- ses.Do()
- self.wg.Done()
- }()
- }
- return nil
- }
|