From a35153875f213929601a39c47f0823b310210321 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期五, 02 四月 2021 10:37:11 +0800
Subject: [PATCH] MicroFunc添加Context参数
---
micronode.go | 76 +++++++++++++++++++++++--------------
1 files changed, 47 insertions(+), 29 deletions(-)
diff --git a/micronode.go b/micronode.go
index fd0c0d3..b7acf0d 100644
--- a/micronode.go
+++ b/micronode.go
@@ -7,6 +7,7 @@
"errors"
"fmt"
"os"
+ "sync"
"time"
)
@@ -20,6 +21,9 @@
fnLog func(...interface{})
SubCh chan *MsgInfo
+
+ mtx sync.Mutex
+ started bool
}
func NewMicroNode(ctx context.Context,q chan os.Signal, serverId string, reg *RegisterInfo, fnLog func(v ...interface{})) (*MicroNode, error){
@@ -83,41 +87,51 @@
}
func (ms *MicroNode) StartClient() {
- go ms.startHeartbeat()
+ ms.mtx.Lock()
+ defer ms.mtx.Unlock()
+ if !ms.started {
+ ms.started = true
+
+ go ms.startHeartbeat()
+ }
}
func (ms *MicroNode) StartServer(funcMap map[string]MicroFunc) {
- ms.handlers = funcMap
+ ms.mtx.Lock()
+ if !ms.started {
+ ms.started = true
+ ms.mtx.Unlock()
- go ms.startHeartbeat()
+ ms.handlers = funcMap
- for {
- select {
- case <- ms.ctx.Done():
- return
- default:
- msgS, msgR, keyR := ms.handle.GetMsg()
- if msgS != nil {
- //鏀跺埌鍏跺畠杩涚▼鐨勫彂甯冩秷鎭�
- ms.printLog("Recv Sub Message:", string(msgS.Body))
- ms.SubCh <- msgS
+ go ms.startHeartbeat()
+
+ for {
+ select {
+ case <- ms.ctx.Done():
+ return
+ default:
+ msgS, msgR, keyR := ms.handle.GetMsg()
+ if msgS != nil {
+ //鏀跺埌鍏跺畠杩涚▼鐨勫彂甯冩秷鎭�
+ ms.printLog("Recv Sub Message:", string(msgS.Body))
+ ms.SubCh <- msgS
+ }
+ if msgR != nil {
+ //鏀跺埌鍏跺畠杩涚▼鐨勮姹傛秷鎭�
+ go ms.serve(msgR, keyR)
+ }
+
+ time.Sleep(50 * time.Millisecond)
}
- if msgR != nil {
- //鏀跺埌鍏跺畠杩涚▼鐨勮姹傛秷鎭�
- go ms.serve(msgR, keyR)
- }
-
- time.Sleep(50 * time.Millisecond)
}
+
+ //鎺ユ敹璁㈤槄鍒扮殑娑堟伅
+ //go ms.startRecvSubMsg()
+ //浣滀负server鍚姩
+ //ms.serve()
}
-
-
-
-
- //鎺ユ敹璁㈤槄鍒扮殑娑堟伅
- //go ms.startRecvSubMsg()
- //浣滀负server鍚姩
- //ms.serve()
+ ms.mtx.Unlock()
}
//寮�濮嬫帴鏀惰闃呮秷鎭�
@@ -284,8 +298,12 @@
if f,ok := ms.handlers[reqBody.Path];ok {
reqBody.SrcProc = msgR.SrcProc
- ri = f(&reqBody)
- ms.printLog("call funcMap f,reply:", *ri)
+ ctx := Context{
+ ms,
+ ms,
+ }
+ ri = f(&ctx, &reqBody)
+ ms.printLog("call funcMap f,reply.Success:", ri.Success)
} else {
ms.printLog("ms.funcMap not eixst path: ", reqBody.Path)
ri = &Reply{
--
Gitblit v1.8.0