| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package internal
- import (
- "net"
- "one.com/nnet"
- "time"
- )
- type TcpServer struct {
- *Hub
- listener *net.TCPListener
- }
- func NewTcpServer(cf *nnet.HubConfig, cb nnet.ISessionCallback, p nnet.IProtocol, ls *net.TCPListener) *TcpServer {
- 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
- }
- func (self *TcpServer) DoJob(int) {
- }
- func (self *TcpServer) Stop() error {
- close(self.chQuit)
- self.wg.Wait() //保证 Start 完全退出
- return nil
- }
|