1From e11eae509f944c2f0387d2dbf862dcd5763b84da Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?=E9=9B=86=E5=B7=9D?= <jichuan1@huawei.com>
3Date: Fri, 6 Sep 2024 16:35:20 +0800
4Subject: [PATCH] =?UTF-8?q?feat:=20golang=E6=9C=8D=E5=8A=A1=E6=8F=90?=
5 =?UTF-8?q?=E4=BE=9Bad=E6=8E=A5=E5=8F=A3?=
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10Signed-off-by: 集川 <jichuan1@huawei.com>
11---
12 ide/server/main.go            | 75 ++++++++++++++++++++++++++++++++---
13 ide/server/server-config.json |  4 ++
14 ide/server/server-config.txt  |  1 -
15 ide/webpack.config.js         |  4 +-
16 4 files changed, 75 insertions(+), 9 deletions(-)
17 create mode 100644 ide/server/server-config.json
18 delete mode 100644 ide/server/server-config.txt
19
20diff --git a/ide/server/main.go b/ide/server/main.go
21index 80a242fb..5de296ef 100644
22--- a/ide/server/main.go
23+++ b/ide/server/main.go
24@@ -45,6 +45,7 @@ import (
25 	"runtime"
26 	"strconv"
27 	"strings"
28+	"sync"
29 	"time"
30 )
31 
32@@ -52,6 +53,7 @@ const HttpPort = 9000
33 
34 var exPath string
35 var serveInfo string
36+var msgPublishData MsgPublishData
37 var hdcPublicKey string
38 var hdcPrivateKey *rsa.PrivateKey
39 
40@@ -178,6 +180,7 @@ func main() {
41 		mux.HandleFunc("/application/hdcPublicKey", getHdcPublicKey)
42 		mux.HandleFunc("/application/encryptHdcMsg", encryptHdcMsg)
43 		mux.HandleFunc("/application/signatureHdcMsg", signatureHdcMsg)
44+		mux.HandleFunc("/application/messagePublish", getMsgPublish)
45 		fs := http.FileServer(http.Dir(exPath + "/"))
46 		mux.Handle("/application/", http.StripPrefix("/application/", cors(fs, version)))
47 		go func() {
48@@ -299,14 +302,74 @@ func signatureHdcMsg(w http.ResponseWriter, r *http.Request) {
49 	}
50 }
51 
52-func readReqServerConfig() string {
53-	readServerConfig, serverConfigErr := os.ReadFile(exPath + "/server-config.txt")
54-	if serverConfigErr != nil {
55-		serveInfo = ""
56+func parseMsgPublishFile() {
57+	msgPublishData.Mux.RLock()
58+	defer msgPublishData.Mux.RUnlock()
59+	exist, err := PathExists(msgPublishData.FilePath)
60+	if err != nil || !exist {
61+		return
62+	}
63+	buf, err := os.ReadFile(msgPublishData.FilePath)
64+	if err != nil {
65+		fmt.Println("read fail", err)
66+		return
67+	}
68+	msgPublishData.Msg = string(buf)
69+}
70+
71+func getMsgPublish(w http.ResponseWriter, r *http.Request) {
72+	w.Header().Set("Access-Control-Allow-Origin", "*")
73+	w.Header().Set("Content-Type", "text/json")
74+	msgPublishData.Mux.Lock()
75+	data := msgPublishData.Msg
76+	msgPublishData.Mux.Unlock()
77+	if len(data) == 0 {
78+		resp(&w)(false, -1, "msg failed", nil)
79 	} else {
80-		serveInfo = string(readServerConfig)
81+		resp(&w)(true, 0, "success", map[string]interface{}{
82+			"data": data,
83+		})
84+	}
85+}
86+
87+type ServerConfig struct {
88+	ServeInfo      string `json:"ServeInfo"`
89+	MsgPublishFile string `json:"MsgPublishFile"`
90+}
91+
92+type MsgPublishData struct {
93+	FilePath string
94+	Msg      string
95+	Mux      sync.RWMutex
96+}
97+
98+func loopUpdateMsgPublishData() {
99+	loopTime := 30 * time.Second
100+	timer := time.NewTimer(loopTime)
101+	for {
102+		select {
103+		case <-timer.C:
104+			parseMsgPublishFile()
105+		}
106+		timer.Reset(loopTime)
107+	}
108+}
109+
110+func readReqServerConfig() {
111+	serverConfigBuffer, err := os.ReadFile(exPath + "/server-config.json")
112+	if err != nil {
113+		return
114+	}
115+	var sc ServerConfig
116+	err = json.Unmarshal(serverConfigBuffer, &sc)
117+	if err != nil {
118+		return
119 	}
120-	return serveInfo
121+	serveInfo = sc.ServeInfo
122+	msgPublishData.Mux.RLock()
123+	msgPublishData.FilePath = sc.MsgPublishFile
124+	msgPublishData.Mux.RUnlock()
125+	go loopUpdateMsgPublishData()
126 }
127 
128 func mapToJson(m map[string]interface{}) (string, error) {
129diff --git a/ide/server/server-config.json b/ide/server/server-config.json
130new file mode 100644
131index 00000000..637b4034
132--- /dev/null
133+++ b/ide/server/server-config.json
134@@ -0,0 +1,4 @@
135+{
136+    "ServeInfo": "127.0.0.1:9100/statistics",
137+    "MsgPublishFile": ""
138+}
139\ No newline at end of file
140diff --git a/ide/server/server-config.txt b/ide/server/server-config.txt
141deleted file mode 100644
142index fde29681..00000000
143--- a/ide/server/server-config.txt
144+++ /dev/null
145@@ -1 +0,0 @@
146-127.0.0.1:9100/statistics
147\ No newline at end of file
148diff --git a/ide/webpack.config.js b/ide/webpack.config.js
149index f7702c1c..55397917 100644
150--- a/ide/webpack.config.js
151+++ b/ide/webpack.config.js
152@@ -168,8 +168,8 @@ const config = {
153           to: 'wasm.json',
154         },
155         {
156-          from: './server/server-config.txt',
157-          to: 'server-config.txt',
158+          from: './server/server-config.json',
159+          to: 'server-config.json',
160         },
161       ],
162     }),
163-- 
1642.34.1
165
166