saas-smartAi通信协议标准库
gongshangguo
2022-02-25 6d7dfff9e1920e55dfa4a7311f8e173d0e631fed
server/server.go
@@ -4,7 +4,6 @@
   "basic.com/valib/go-aiot.git/aiotProto/aiot"
   "basic.com/valib/go-aiot.git/client"
   "basic.com/valib/go-aiot.git/util"
   "basic.com/valib/logger.git"
   uuid "github.com/satori/go.uuid"
   "go.uber.org/zap"
   "net"
@@ -39,6 +38,8 @@
   ClusterBlackList map[string]struct{}
   // 回调接口
   serverCallBack ServerCallBack
   // logger
   Logger *zap.SugaredLogger
}
// 全局服务
@@ -78,7 +79,8 @@
}
// 初始化服务
func NewServer(addr string, serverId string, serverCallBack ServerCallBack) *Server {
func NewServer(addr string, serverId string, serverCallBack ServerCallBack, logger *zap.SugaredLogger) *Server {
   logger.Debug("New server...", zap.String("addr", addr))
   return &Server{
      addr: addr,
      waitGroup: &util.WaitGroupWrapper{},
@@ -89,6 +91,7 @@
      ClusterDevice: make(map[string]map[string]struct{}),
      ClusterBlackList: make(map[string]struct{}),
      serverCallBack: serverCallBack,
      Logger: logger,
   }
}
@@ -180,24 +183,25 @@
// 启动服务
func (s *Server) StartSrv() error {
   s.Logger.Debug("Start server...", zap.String("addr", s.addr))
   // 错误
   var err error
   // tcpAddr
   s.tcpAddr, err = net.ResolveTCPAddr("tcp", s.addr)
   if err != nil {
      logger.Error("Can not build tcp server for now", zap.String("addr", s.addr), zap.Error(err))
      s.Logger.Error("Can not build tcp server for now", zap.String("addr", s.addr), zap.Error(err))
      return err
   }
   // 监听
   s.tcpListener, err = net.ListenTCP("tcp", s.tcpAddr)
   if err != nil {
      logger.Error("Can not listen tcp server for now", zap.String("addr", s.addr), zap.Error(err))
      s.Logger.Error("Can not listen tcp server for now", zap.String("addr", s.addr), zap.Error(err))
      return err
   }
   // 收到连接
   logger.Debug("Starting to listen addr", zap.String("addr", s.addr))
   s.Logger.Debug("Starting to listen addr", zap.String("addr", s.addr))
   s.waitGroup.Wrap(func() {
      for {
         // 获取连接
@@ -205,33 +209,33 @@
         if err != nil {
            // 让出grouting
            if netErr, ok := err.(net.Error);ok && netErr.Temporary() {
               logger.Error("Continue listening...", zap.String("addr", s.tcpListener.Addr().String()), zap.Error(err))
               s.Logger.Error("Continue listening...", zap.String("addr", s.tcpListener.Addr().String()), zap.Error(err))
               runtime.Gosched()
               continue
            }
            // 不能使用已关闭的连接
            if !strings.Contains(err.Error(), "use of closed network connection") {
               logger.Error("Can not use a closed network connection", zap.String("addr", s.addr), zap.Error(err))
               s.Logger.Error("Can not use a closed network connection", zap.String("addr", s.addr), zap.Error(err))
            }
            break
         }
         // 处理连接
         logger.Debug("Client connected", zap.String("RemoteAddr", clientConn.RemoteAddr().String()), zap.String("LocalAddr", clientConn.LocalAddr().String()))
         s.Logger.Debug("Client connected", zap.String("RemoteAddr", clientConn.RemoteAddr().String()), zap.String("LocalAddr", clientConn.LocalAddr().String()))
         go s.Handler(clientConn)
      }
   })
   // wait
   s.waitGroup.Wait()
   logger.Warn("Tcp server exist", zap.String("addr", s.addr))
   s.Logger.Warn("Tcp server exist", zap.String("addr", s.addr))
   return nil
}
// 处理连接
func (s *Server) Handler(clientConn net.Conn) {
   logger.Debug("Client connected...", zap.String("RemoteAddr", clientConn.RemoteAddr().String()), zap.String("LocalAddr", clientConn.LocalAddr().String()))
   s.Logger.Debug("Client connected...", zap.String("RemoteAddr", clientConn.RemoteAddr().String()), zap.String("LocalAddr", clientConn.LocalAddr().String()))
   // 临时ID
   tplClientId := uuid.NewV4().String()
@@ -241,7 +245,7 @@
   // 初始化连接
   cliCon := &Clients{}
   cli := client.NewClient(s.addr, tplClientId,cliRegister, cliCon)
   cli := client.NewClient(s.addr, tplClientId,cliRegister, cliCon, s.Logger)
   // 设置连接状态
   cli.SetState(client.StateConnected)