liuxiulin 2 年之前
父节点
当前提交
0ebdadabbe
共有 2 个文件被更改,包括 9 次插入3 次删除
  1. 5 1
      server/client.go
  2. 4 2
      server/server.go

+ 5 - 1
server/client.go

@@ -51,6 +51,8 @@ func (c *Client) SendLoop() {
 			timer := time.NewTimer(5 * time.Second)
 			for {
 				select {
+				case <-c.closeChan:
+					return
 				case <-timer.C:
 					glog.Errorf("接收指令超时")
 					break
@@ -210,6 +212,8 @@ func (c *Client) SendGetAddress() error {
 	timer := time.NewTimer(10 * time.Second)
 	for {
 		select {
+		case <-c.closeChan:
+			return nil
 		case <-timer.C:
 			glog.Errorf("读取数据超时")
 			return errors.New("读取数据超时")
@@ -225,7 +229,7 @@ func (c *Client) SendGetAddress() error {
 				if !c.isReg {
 					c.SetId(gbinary.DecodeToString(receiveBuf))
 					c.isReg = true
-					break
+					continue
 				}
 				_, err = c.srv.message.Decode(c.packetContext, receiveBuf)
 				if err != nil {

+ 4 - 2
server/server.go

@@ -47,7 +47,7 @@ func (s *Server) Start() error {
 func (s *Server) Stop() {
 	s.clients.Iterator(func(k interface{}, v interface{}) bool {
 		client := v.(*Client)
-		client.closeConnection()
+		close(client.closeChan)
 		return true
 	})
 	_ = s.server.Close()
@@ -67,11 +67,13 @@ func (s *Server) onClientConnect(conn *gtcp.Conn) {
 		_ = s.gateWay.SubDeviceLogin(g.Cfg().GetString("Sparrow.DeviceCode"), id)
 		s.clients.Set(id, c)
 	}
-	time.Sleep(10 * time.Second)
 	err := c.SendGetAddress()
 	if err != nil {
 		return
 	}
+
+	time.Sleep(10 * time.Second)
+
 	go c.SendLoop()
 
 	go c.GetActivePower()