Parcourir la source

fix:日志文件权限问题解决

zzf il y a 1 an
Parent
commit
8eedddccf7
13 fichiers modifiés avec 111 ajouts et 127 suppressions
  1. 2 3
      api/gateway/gateway.go
  2. 64 49
      api/gateway/sse.go
  3. 3 0
      config/application.yaml
  4. 5 0
      config/config.go
  5. 1 1
      docs/docs.go
  6. 1 1
      docs/swagger.json
  7. 1 1
      docs/swagger.yaml
  8. 1 0
      err/errMsg.go
  9. 5 2
      global/global.go
  10. 3 3
      initialize/router.go
  11. 1 0
      initialize/run.go
  12. 22 67
      initialize/ws.go
  13. 2 0
      main.go

+ 2 - 3
api/gateway/gateway.go

@@ -75,8 +75,7 @@ func ScanDevice(c *gin.Context) {
 	}
 	paramMap["active"] = "1"
 	paramMap["event"] = "1"
-	SseScanDevice(paramMap, param.FilterType, c.Request)
-	//http.GetReq(global.Config.Gateway.BaseUrl + global.Config.Gateway.OpenNotify)
+	SseScanDevice(paramMap, param.FilterType, c)
 	response.Success("扫描完成", "", c)
 	return
 }
@@ -91,7 +90,7 @@ func ScanDevice(c *gin.Context) {
 // @Accept json
 // @Produce json
 // @Success 200 {string} string "ok"
-// @Router /v1/device/connection [get]
+// @Router /v1/device/connection [post]
 func ConnectDevice(c *gin.Context) {
 	var param gateway.DeviceConnParam
 	err := c.ShouldBindJSON(&param)

+ 64 - 49
api/gateway/sse.go

@@ -7,15 +7,15 @@ import (
 	"confrontation-training/models/gateway"
 	"encoding/json"
 	"fmt"
+	"github.com/gin-gonic/gin"
 	"github.com/gorilla/websocket"
 	"github.com/r3labs/sse/v2"
-	"net/http"
 	"strings"
 	"time"
 )
 
 // SseScanDevice 扫描设备
-func SseScanDevice(paramMap map[string]string, filterType string, r *http.Request) {
+func SseScanDevice(paramMap map[string]string, filterType string, c *gin.Context) {
 	var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl
 
 	deviceMap := make(map[string]gateway.DeviceScanned)
@@ -24,49 +24,48 @@ func SseScanDevice(paramMap map[string]string, filterType string, r *http.Reques
 			scanUrl += "&" + key + "=" + value
 		}
 	}
-
+	fmt.Println("创建新的sse")
 	//events := make(chan *sse.Event)
-	client := sse.NewClient(scanUrl)
-	go func() {
-		fmt.Println("开始SSE")
-		//err := client.SubscribeChan("messages", events)
-		//if err != nil {
-		//	return
-		//}
-		err := client.SubscribeRaw(func(msg *sse.Event) {
-			//fmt.Println(string(msg.Data))
-			var data gateway.DeviceScannedFromGateway
-			err := json.Unmarshal(msg.Data, &data)
-			if err != nil {
-				fmt.Printf("SSE数据转换异常:%s", err.Error())
-				return
-			}
-			deviceScanned := gateway.DeviceScanned{}
-			deviceScanned.MAC = data.Bdaddrs[0].Bdaddr
-			if filterType == "1" {
-				deviceService := GetDeviceService()
-				_, i := deviceService.FindDeviceByMac(deviceScanned.MAC)
-				if i > 0 {
-					deviceScanned.Name = data.Name
-					deviceScanned.Rssi = data.Rssi
-					deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
-					deviceScanned.Chip = data.ChipId
-					deviceMap[deviceScanned.MAC] = deviceScanned
-					fmt.Println(deviceScanned)
-				}
-			}
-		})
+	client := global.SseClientDevice
+	client.URL = scanUrl
+	//ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
+	//if err != nil {
+	//	response.Failed(errors.SocketInitError, c)
+	//}
+	ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
+	if err != nil {
+		panic(err)
+		return
+	}
+	fmt.Println("开始SSE")
+	err = client.SubscribeRaw(func(msg *sse.Event) {
+		var data gateway.DeviceScannedFromGateway
+		err := json.Unmarshal(msg.Data, &data)
 		if err != nil {
-			fmt.Println(err.Error())
+			fmt.Printf("SSE数据转换异常:%s", err.Error())
 			return
 		}
-		<-r.Context().Done()
-		return
-	}()
-	ticket := time.NewTicker(time.Duration(global.Config.Gateway.ScanSecond) * time.Millisecond)
-	for range ticket.C {
-		fmt.Println("当前时间:" + time.Now().Format("2006-01-02 15:04:05"))
-		ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
+		deviceScanned := gateway.DeviceScanned{}
+		deviceScanned.MAC = data.Bdaddrs[0].Bdaddr
+		//库中存在的设备
+		if filterType == "1" {
+			deviceService := GetDeviceService()
+			_, i := deviceService.FindDeviceByMac(deviceScanned.MAC)
+			if i > 0 {
+				deviceScanned.Name = data.Name
+				deviceScanned.Rssi = data.Rssi
+				deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
+				deviceScanned.Chip = data.ChipId
+				deviceMap[deviceScanned.MAC] = deviceScanned
+				fmt.Println(deviceScanned)
+			}
+		} else {
+			deviceScanned.Name = data.Name
+			deviceScanned.Rssi = data.Rssi
+			deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
+			deviceScanned.Chip = data.ChipId
+			deviceMap[deviceScanned.MAC] = deviceScanned
+		}
 		if len(deviceMap) > 0 {
 
 			if err != nil {
@@ -80,7 +79,9 @@ func SseScanDevice(paramMap map[string]string, filterType string, r *http.Reques
 				fmt.Println("data parse Error :" + err.Error())
 				return
 			}
-			messageMap["data"] = string(marshal)
+			messageMap["content"] = string(marshal)
+			messageMap["Sender"] = "server"
+			messageMap["Recipient"] = "client"
 			bytes, err := json.Marshal(messageMap)
 			if err != nil {
 				fmt.Printf("json异常:%s", err.Error())
@@ -98,9 +99,8 @@ func SseScanDevice(paramMap map[string]string, filterType string, r *http.Reques
 				return
 			}
 		}
-		client = nil
-		ws = nil
-	}
+		time.Sleep(200 * time.Millisecond)
+	})
 }
 
 // SseOpenNotify 开启通知
@@ -113,12 +113,16 @@ func SseOpenNotify() {
 		return
 	}
 
-	client := sse.NewClient(notifyUrl)
+	//client := global.SseClientData(notifyUrl)
+	client := global.SseClientData
+	client.URL = notifyUrl
 	err = client.SubscribeRaw(func(msg *sse.Event) {
-		s := string(msg.Data)
+		bytes := msg.Data
+		s := string(bytes)
 		//fmt.Println("notify receive data :" + s)
 
 		flag := strings.HasPrefix(s, "E840") || strings.HasPrefix(s, "E841") || strings.HasPrefix(s, "E823")
+		//非心电数据
 		if !flag {
 			//websocket 通知数据
 			//msgMap := make(map[string]string)
@@ -132,13 +136,24 @@ func SseOpenNotify() {
 			}
 			messageMap := make(map[string]string)
 			messageMap["msgType"] = constant.MessageTypeData
-			messageMap["data"] = string(msg.Data)
-			err := ws.WriteMessage(websocket.TextMessage, msg.Data)
+			messageMap["content"] = string(msg.Data)
+			messageMap["Sender"] = "server"
+			messageMap["Recipient"] = "client"
+			bytes, err := json.Marshal(messageMap)
+			err = ws.WriteMessage(websocket.TextMessage, bytes)
 			if err != nil {
 				fmt.Println(errors.SendMessageError + err.Error())
 				return
 			}
+			//心电数据
+		} else {
+			if len(bytes) == 18 {
+
+			}
 		}
+		//time.Sleep(100)
+		//time.Sleep(100 * time.Millisecond)
+		//time.Sleep(10 * time.Millisecond)
 	})
 	if err != nil {
 		return

+ 3 - 0
config/application.yaml

@@ -36,6 +36,9 @@ log2file:
   filePath: ./logs/
   fileName: confrontation_training
   fileSuffix: .log
+#第一次打开
+param:
+  firstOpen : 1
 
 
 

+ 5 - 0
config/config.go

@@ -12,6 +12,10 @@ type Gateway struct {
 	DisconnectUrl   string `mapstructure:"disconnectUrl"`
 }
 
+type Param struct {
+	FirstOpen string `mapstructure:"firstOpen"`
+}
+
 type Config struct {
 	Server    Server    `mapstructure:"server"`
 	SQLite    SQLite    `mapstructure:"sqlite"`
@@ -20,6 +24,7 @@ type Config struct {
 	Websocket Websocket `mapstructure:"websocket"`
 	Gateway   Gateway   `mapstructure:"gateway"`
 	Log2File  Log2File  `mapstructure:"log2file"`
+	Param     Param     `mapstructure:"Param"`
 }
 
 // Server 服务启动端口配置

+ 1 - 1
docs/docs.go

@@ -275,7 +275,7 @@ const docTemplate = `{
             }
         },
         "/v1/device/connection": {
-            "get": {
+            "post": {
                 "description": "连接设备",
                 "consumes": [
                     "application/json"

+ 1 - 1
docs/swagger.json

@@ -266,7 +266,7 @@
             }
         },
         "/v1/device/connection": {
-            "get": {
+            "post": {
                 "description": "连接设备",
                 "consumes": [
                     "application/json"

+ 1 - 1
docs/swagger.yaml

@@ -172,7 +172,7 @@ paths:
       tags:
       - 设备管理
   /v1/device/connection:
-    get:
+    post:
       consumes:
       - application/json
       description: 连接设备

+ 1 - 0
err/errMsg.go

@@ -16,6 +16,7 @@ const (
 	UserPasswordChangeError   = "用户密码修改失败"
 	UserOldPasswordError      = "用户原密码错误"
 	SendMessageError          = "消息发送失败"
+	SocketInitError           = "Socket开启异常"
 	SocketCloseError          = "Socket关闭异常:"
 	DeviceConnectSuccess      = "设备连接成功"
 	WriteDataSuccess          = "写入数据成功"

+ 5 - 2
global/global.go

@@ -2,10 +2,13 @@ package global
 
 import (
 	"confrontation-training/config"
+	"github.com/r3labs/sse/v2"
 	"gorm.io/gorm"
 )
 
 var (
-	Config config.Config
-	Db     *gorm.DB
+	Config          config.Config
+	Db              *gorm.DB
+	SseClientDevice *sse.Client
+	SseClientData   *sse.Client
 )

+ 3 - 3
initialize/router.go

@@ -25,8 +25,8 @@ func Router() {
 		fmt.Printf("初始化表格异常:%s", initTableErr.Error())
 		return
 	}
-	//gin.SetMode(gin.ReleaseMode)
-	gin.SetMode(gin.DebugMode)
+	gin.SetMode(gin.ReleaseMode)
+	//gin.SetMode(gin.DebugMode)
 	engine := gin.Default()
 	//解决跨域
 	engine.Use(middleware.Cors())
@@ -55,7 +55,7 @@ func Router() {
 	user.POST("/change/password", gateway.GetUser().ModePass)
 	device := v1.Group("/device")
 	device.POST("/scan", gateway.ScanDevice)
-	device.GET("/connection", gateway.ConnectDevice)
+	device.POST("/connection", gateway.ConnectDevice)
 	device.POST("/write/data/", gateway.WriteData)
 	device.GET("/open/notify/", gateway.OpenNotify)
 	device.GET("/:mac/stop/trans/", gateway.StopTrans)

+ 1 - 0
initialize/run.go

@@ -4,6 +4,7 @@ func Run() {
 	SwagInit()
 	LoadConfig()
 	SQLite()
+	CreateSseClient()
 	go Manager.Start()
 	Router()
 }

+ 22 - 67
initialize/ws.go

@@ -1,9 +1,7 @@
 package initialize
 
 import (
-	errmsg "confrontation-training/err"
 	"encoding/json"
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/gorilla/websocket"
 	"log"
@@ -30,8 +28,6 @@ type Message struct {
 	Sender    string `json:"sender,omitempty"`
 	Recipient string `json:"recipient,omitempty"`
 	Content   string `json:"content,omitempty"`
-	RecordId  string `json:"recordId,omitempty"`
-	Status    bool   `json:"status,omitempty"`
 }
 
 // Manager define a ws server manager
@@ -49,20 +45,17 @@ func (manager *ClientManager) Start() {
 		select {
 		case conn := <-Manager.Register:
 			log.Printf("新用户加入:%v", conn.ID)
-			fmt.Println("当前Client连接数:" + string(len(Manager.Clients)))
 			Manager.Clients[conn.ID] = conn
-			//jsonMessage, _ := json.Marshal(&Message{Content: "Successful connection to socket service"})
-			//conn.Send <- jsonMessage
+			jsonMessage, _ := json.Marshal(&Message{Content: "Successful connection to socket service"})
+			conn.Send <- jsonMessage
 		case conn := <-Manager.Unregister:
 			log.Printf("用户离开:%v", conn.ID)
-			fmt.Println("当前Client连接数:" + string(len(Manager.Clients)))
 			if _, ok := Manager.Clients[conn.ID]; ok {
-				//jsonMessage, _ := json.Marshal(&Message{Content: "A socket has disconnected"})
-				//conn.Send <- jsonMessage
+				jsonMessage, _ := json.Marshal(&Message{Content: "A socket has disconnected"})
+				conn.Send <- jsonMessage
 				close(conn.Send)
 				delete(Manager.Clients, conn.ID)
 			}
-			fmt.Println("当前Client连接数:" + string(len(Manager.Clients)))
 		case message := <-Manager.Broadcast:
 			MessageStruct := Message{}
 			err := json.Unmarshal(message, &MessageStruct)
@@ -71,33 +64,15 @@ func (manager *ClientManager) Start() {
 				return
 			}
 			for id, conn := range Manager.Clients {
-
-				//处理结果回执消息
-				if MessageStruct.Recipient == "server" {
-					//更新record
-					if MessageStruct.RecordId != "" {
-
-						//content := ""
-						if MessageStruct.Status {
-							//content = errmsg.TestResultSuccess + MessageStruct.Content
-						} else {
-							//content = errmsg.TestResultFailed + MessageStruct.Content
-						}
-						//recordService.UpdateRecordById(MessageStruct.RecordId, content)
-					}
-
-				} else {
-					if id == creatId(MessageStruct.Recipient, MessageStruct.Sender) {
-						continue
-					}
-					select {
-					case conn.Send <- message:
-					default:
-						close(conn.Send)
-						delete(Manager.Clients, conn.ID)
-					}
+				if id != creatId(MessageStruct.Recipient, MessageStruct.Sender) {
+					continue
+				}
+				select {
+				case conn.Send <- message:
+				default:
+					close(conn.Send)
+					delete(Manager.Clients, conn.ID)
 				}
-
 			}
 		}
 	}
@@ -106,25 +81,17 @@ func creatId(uid, touid string) string {
 	return uid + "_" + touid
 }
 func (c *Client) Read() {
-	defer func() {
-		Manager.Unregister <- c
-		err := c.Socket.Close()
-		if err != nil {
-			fmt.Println(errmsg.SocketCloseError + err.Error())
-			return
-		}
-	}()
+	//defer func() {
+	//	Manager.Unregister <- c
+	//	c.Socket.Close()
+	//}()
 
 	for {
 		c.Socket.PongHandler()
 		_, message, err := c.Socket.ReadMessage()
 		if err != nil {
 			Manager.Unregister <- c
-			err := c.Socket.Close()
-			if err != nil {
-				fmt.Println(errmsg.SocketCloseError + err.Error())
-				return
-			}
+			c.Socket.Close()
 			break
 		}
 		log.Printf("读取到客户端的信息:%s", string(message))
@@ -133,32 +100,20 @@ func (c *Client) Read() {
 }
 
 func (c *Client) Write() {
-	defer func() {
-		err := c.Socket.Close()
-		if err != nil {
-			fmt.Println(errmsg.SocketCloseError + err.Error())
-			return
-		}
-	}()
+	//defer func() {
+	//	c.Socket.Close()
+	//}()
 
 	for {
 		select {
 		case message, ok := <-c.Send:
 			if !ok {
-				err := c.Socket.WriteMessage(websocket.CloseMessage, []byte{})
-				if err != nil {
-					fmt.Println("socket writeMessage error :" + err.Error())
-					return
-				}
+				c.Socket.WriteMessage(websocket.CloseMessage, []byte{})
 				return
 			}
 			log.Printf("发送到到客户端的信息:%s", string(message))
 
-			err := c.Socket.WriteMessage(websocket.TextMessage, message)
-			if err != nil {
-				fmt.Println("socket writeMessage error :" + err.Error())
-				return
-			}
+			c.Socket.WriteMessage(websocket.TextMessage, message)
 		}
 	}
 }

+ 2 - 0
main.go

@@ -8,6 +8,8 @@ import "confrontation-training/initialize"
 //@contact.name Develoven
 //contact.email develoven@163.com
 //contact.url https://www.cnblogs.com/wormworm
+var createNewSSeClient = true
+
 func main() {
 	initialize.Run()
 }