From 3d21ed495a6ce7236dbcbb90b51dbd2da75d137c Mon Sep 17 00:00:00 2001 From: Haki Date: Fri, 26 Jul 2019 17:44:34 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=B8=8B=E8=BD=BD=20=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E8=B7=AF=E7=94=B1&http=E8=AF=B7=E6=B1=82OPTI?= =?UTF-8?q?ONS=E6=96=B9=E6=B3=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysservice/httpserverervice.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sysservice/httpserverervice.go b/sysservice/httpserverervice.go index bea52c5..d07eaa1 100644 --- a/sysservice/httpserverervice.go +++ b/sysservice/httpserverervice.go @@ -129,6 +129,24 @@ func (slf *HttpServerService) staticServer(w http.ResponseWriter, r *http.Reques w.WriteHeader(status) w.Write([]byte(msg)) } + + // 在这儿处理例外路由接口 + var errRet error + for _, filter := range slf.httpfiltrateList { + ret := filter(r.URL.Path, w, r) + if ret == nil { + errRet = nil + break + } else { + errRet = ret + } + } + + if errRet != nil { + w.Write([]byte(errRet.Error())) + return + } + nowpath, _ := os.Getwd() upath := r.URL.Path destLocalPath := nowpath + upath @@ -172,7 +190,7 @@ func (slf *HttpServerService) staticServer(w http.ResponseWriter, r *http.Reques defer localfd.Close() io.Copy(localfd, resourceFile) - writeResp(http.StatusOK, localpath) + writeResp(http.StatusOK, upath+fileName) } } @@ -187,6 +205,10 @@ func (slf *HttpServerService) httpHandler(w http.ResponseWriter, r *http.Request //writeError(http.StatusMethodNotAllowed, "rpc: POST method required, received "+r.Method) //return } + if r.Method == "OPTIONS" { + return + } + defer r.Body.Close() msg, err := ioutil.ReadAll(r.Body) if err != nil { From 34abb27947eda4b4955d3a5ea2d1a8ee4fd4681c Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Sat, 27 Jul 2019 15:55:59 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/.vscode/launch.json | 21 +++++++++++++++++++++ Test/.vscode/settings.json | 3 +++ Test/config/cluster.json | 16 ++++------------ Test/main.go | 2 +- Test/workspace.code-workspace | 10 ++++++++++ 5 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 Test/.vscode/launch.json create mode 100644 Test/.vscode/settings.json create mode 100644 Test/workspace.code-workspace diff --git a/Test/.vscode/launch.json b/Test/.vscode/launch.json new file mode 100644 index 0000000..87a1481 --- /dev/null +++ b/Test/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + + "configurations": [ + { + "name": "N_All", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceRoot}/main.go", + "env": { + "GOPATH":"${workspaceRoot}/../../../../../" + }, + "args": ["NodeId=1"], + "output": "./OriginServer.exe" + } + ] +} \ No newline at end of file diff --git a/Test/.vscode/settings.json b/Test/.vscode/settings.json new file mode 100644 index 0000000..ef5cde8 --- /dev/null +++ b/Test/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "go.gopath": "${workspaceRoot}/../../../../../" +} diff --git a/Test/config/cluster.json b/Test/config/cluster.json index b383ca6..0c3da33 100644 --- a/Test/config/cluster.json +++ b/Test/config/cluster.json @@ -1,25 +1,17 @@ { "PublicServiceList":["logiclog"], +"//":" Auto or Manual", +"ClusterPattern":"Auto", +"MasterNodeId":1, "NodeList":[ { "NodeID":1, "NodeName":"N_Node1", - "ServerAddr":"127.0.0.1:8080", - + "ServerAddr":"127.0.0.1:10000", "ServiceList":["CTestService1","CTestService2","HttpServerService","WSServerService","CWebSockService"], "ClusterNode":["N_Node2"] -}, - - -{ - "NodeID":2, - "NodeName":"N_Node2", - "ServerAddr":"127.0.0.1:8081", - "ServiceList":["TestService1","collectTickLogService"], - "ClusterNode":[] } - ] diff --git a/Test/main.go b/Test/main.go index 3046e9c..bd29294 100644 --- a/Test/main.go +++ b/Test/main.go @@ -81,7 +81,7 @@ func (slf *CTestService2) RPC_Add(arg *InputData, ret *int) error { } func main() { - node := originnode.NewOrginNode() + node := originnode.NewOriginNode() if node == nil { return } diff --git a/Test/workspace.code-workspace b/Test/workspace.code-workspace new file mode 100644 index 0000000..1283249 --- /dev/null +++ b/Test/workspace.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "http.systemCertificates": false + } +} \ No newline at end of file From 468c609481326d9d97d063ccf6d6f17ce1d0a43a Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Sat, 27 Jul 2019 17:34:05 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmodule/DBModule.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sysmodule/DBModule.go b/sysmodule/DBModule.go index 2e9f04a..6224c81 100644 --- a/sysmodule/DBModule.go +++ b/sysmodule/DBModule.go @@ -23,13 +23,13 @@ const ( // DBModule ... type DBModule struct { service.BaseModule - db *sql.DB - url string - username string - password string - dbname string - maxconn int - PrintTime time.Duration + db *sql.DB + url string + username string + password string + dbname string + maxconn int + PrintTime time.Duration syncExecuteFun chan SyncFun syncCoroutineNum int } @@ -373,7 +373,7 @@ func (slf *DBModule) QueryEx(query string, args ...interface{}) (*DataSetList, e TimeFuncPass := time.Since(TimeFuncStart) if slf.IsPrintTimeLog(TimeFuncPass) { - service.GetLogger().Printf(service.LEVER_INFO, "DBModule QueryEx Time %s , Query :%s , args :%+v",TimeFuncPass,query,args) + service.GetLogger().Printf(service.LEVER_INFO, "DBModule QueryEx Time %s , Query :%s , args :%+v", TimeFuncPass, query, args) } if err != nil { service.GetLogger().Printf(service.LEVER_ERROR, "Query:%s(%v)", query, err) @@ -514,7 +514,7 @@ func (slf *DBModule) RunExecuteDBCoroutine() { func (slf *DataSetList) UnMarshal(args ...interface{}) error { if len(slf.dataSetList) != len(args) { - return errors.New("Data set len(%d) is not equal to args!") + return errors.New(fmt.Sprintf("Data set len(%d,%d) is not equal to args!", len(slf.dataSetList), len(args))) } for _, out := range args { From 7bbfc9e21db0d11ffc5a16ae1f9e6535dffffcc3 Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Sat, 27 Jul 2019 18:41:38 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E9=98=B2=E6=AD=A2SQL=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmodule/DBModule.go | 67 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/sysmodule/DBModule.go b/sysmodule/DBModule.go index 6224c81..5b9a3ad 100644 --- a/sysmodule/DBModule.go +++ b/sysmodule/DBModule.go @@ -241,14 +241,12 @@ func (slf *DBResult) mapSingle2interface(m map[string]string, v reflect.Value) e return nil } - -func (slf *DBModule) SetQuerySlowTime(Time time.Duration){ +func (slf *DBModule) SetQuerySlowTime(Time time.Duration) { slf.PrintTime = Time } - -func (slf *DBModule) IsPrintTimeLog(Time time.Duration)bool{ - if slf.PrintTime != 0 && Time >= slf.PrintTime{ +func (slf *DBModule) IsPrintTimeLog(Time time.Duration) bool { + if slf.PrintTime != 0 && Time >= slf.PrintTime { return true } return false @@ -337,8 +335,52 @@ func (slf *SyncQueryDBResultEx) Get(timeoutMs int) (*DataSetList, error) { return nil, fmt.Errorf("Getting the return result timeout [%d]ms", timeoutMs) } +func (slf *DBModule) CheckArgs(args ...interface{}) error { + for _, val := range args { + if reflect.TypeOf(val).Kind() == reflect.String { + retVal := val.(string) + if strings.Contains(retVal, "-") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(retVal, "&") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(retVal, "=") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(retVal, "%") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(retVal, "'") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(strings.ToLower(retVal), "delete ") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(strings.ToLower(retVal), "truncate ") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(strings.ToLower(retVal), " or ") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + if strings.Contains(strings.ToLower(retVal), "from ") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } + } + } + + return nil +} + // Query ... func (slf *DBModule) Query(query string, args ...interface{}) DBResult { + if slf.CheckArgs(args) != nil { + ret := DBResult{} + service.GetLogger().Printf(service.LEVER_ERROR, "CheckArgs is error :%s", query) + ret.Err = fmt.Errorf("CheckArgs is error!") + return ret + } + if slf.db == nil { ret := DBResult{} service.GetLogger().Printf(service.LEVER_ERROR, "cannot connect database:%s", query) @@ -363,6 +405,11 @@ func (slf *DBModule) QueryEx(query string, args ...interface{}) (*DataSetList, e datasetList.tag = "json" datasetList.blur = true + if slf.CheckArgs(args) != nil { + service.GetLogger().Printf(service.LEVER_ERROR, "CheckArgs is error :%s", query) + return &datasetList, fmt.Errorf("CheckArgs is error!") + } + if slf.db == nil { service.GetLogger().Printf(service.LEVER_ERROR, "cannot connect database:%s", query) return &datasetList, fmt.Errorf("cannot connect database!") @@ -372,7 +419,7 @@ func (slf *DBModule) QueryEx(query string, args ...interface{}) (*DataSetList, e rows, err := slf.db.Query(query, args...) TimeFuncPass := time.Since(TimeFuncStart) - if slf.IsPrintTimeLog(TimeFuncPass) { + if slf.IsPrintTimeLog(TimeFuncPass) { service.GetLogger().Printf(service.LEVER_INFO, "DBModule QueryEx Time %s , Query :%s , args :%+v", TimeFuncPass, query, args) } if err != nil { @@ -454,11 +501,17 @@ func (slf *DBModule) Exec(query string, args ...interface{}) (*DBResultEx, error return ret, fmt.Errorf("cannot connect database!") } + if slf.CheckArgs(args) != nil { + service.GetLogger().Printf(service.LEVER_ERROR, "CheckArgs is error :%s", query) + //return ret, fmt.Errorf("cannot connect database!") + return ret, fmt.Errorf("CheckArgs is error!") + } + TimeFuncStart := time.Now() res, err := slf.db.Exec(query, args...) TimeFuncPass := time.Since(TimeFuncStart) if slf.IsPrintTimeLog(TimeFuncPass) { - service.GetLogger().Printf(service.LEVER_INFO, "DBModule QueryEx Time %s , Query :%s , args :%+v",TimeFuncPass,query,args) + service.GetLogger().Printf(service.LEVER_INFO, "DBModule QueryEx Time %s , Query :%s , args :%+v", TimeFuncPass, query, args) } if err != nil { service.GetLogger().Printf(service.LEVER_ERROR, "Exec:%s(%v)", query, err) From 716a8e0946bd4543efa7795b1039e200e96142b1 Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Sat, 27 Jul 2019 18:49:00 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmodule/DBModule.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sysmodule/DBModule.go b/sysmodule/DBModule.go index 5b9a3ad..94b75b9 100644 --- a/sysmodule/DBModule.go +++ b/sysmodule/DBModule.go @@ -342,6 +342,9 @@ func (slf *DBModule) CheckArgs(args ...interface{}) error { if strings.Contains(retVal, "-") == true { return fmt.Errorf("CheckArgs is error arg is %+v", retVal) } + if strings.Contains(retVal, "#") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } if strings.Contains(retVal, "&") == true { return fmt.Errorf("CheckArgs is error arg is %+v", retVal) } @@ -366,6 +369,9 @@ func (slf *DBModule) CheckArgs(args ...interface{}) error { if strings.Contains(strings.ToLower(retVal), "from ") == true { return fmt.Errorf("CheckArgs is error arg is %+v", retVal) } + if strings.Contains(strings.ToLower(retVal), "set ") == true { + return fmt.Errorf("CheckArgs is error arg is %+v", retVal) + } } } From 05c5f0a935e150ea6adcbe91f3aa8866b0e266de Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Mon, 29 Jul 2019 20:50:24 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=AE=BE=E4=B8=BA30=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc/client.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpc/client.go b/rpc/client.go index 9a6137f..7865491 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -347,9 +347,9 @@ func (client *Client) Call(serviceMethod string, args interface{}, reply interfa select { case call := <-client.Go(serviceMethod, args, reply, make(chan *Call, 1), false).Done: return call.Error - case <-time.After(15 * time.Second): + case <-time.After(30 * time.Second): } //call := <-client.Go(serviceMethod, args, reply, make(chan *Call, 1)).Done - return errors.New(fmt.Sprintf("Call RPC %s is time out 10s", serviceMethod)) + return errors.New(fmt.Sprintf("Call RPC %s is time out 30s", serviceMethod)) } From 9871b93e1023f5d0e37b04a7d5e5770d46e5486b Mon Sep 17 00:00:00 2001 From: Haki Date: Tue, 30 Jul 2019 10:12:28 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E9=9D=99=E6=80=81=E8=B5=84=E6=BA=90get?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81=E8=BF=87=E6=BB=A4=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysservice/httpserverervice.go | 36 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/sysservice/httpserverervice.go b/sysservice/httpserverervice.go index d07eaa1..2725a05 100644 --- a/sysservice/httpserverervice.go +++ b/sysservice/httpserverervice.go @@ -130,23 +130,6 @@ func (slf *HttpServerService) staticServer(w http.ResponseWriter, r *http.Reques w.Write([]byte(msg)) } - // 在这儿处理例外路由接口 - var errRet error - for _, filter := range slf.httpfiltrateList { - ret := filter(r.URL.Path, w, r) - if ret == nil { - errRet = nil - break - } else { - errRet = ret - } - } - - if errRet != nil { - w.Write([]byte(errRet.Error())) - return - } - nowpath, _ := os.Getwd() upath := r.URL.Path destLocalPath := nowpath + upath @@ -163,6 +146,24 @@ func (slf *HttpServerService) staticServer(w http.ResponseWriter, r *http.Reques } //上传资源 case "POST": + + // 在这儿处理例外路由接口 + var errRet error + for _, filter := range slf.httpfiltrateList { + ret := filter(r.URL.Path, w, r) + if ret == nil { + errRet = nil + break + } else { + errRet = ret + } + } + + if errRet != nil { + w.Write([]byte(errRet.Error())) + return + } + r.ParseMultipartForm(32 << 20) // max memory is set to 32MB resourceFile, resourceFileHeader, err := r.FormFile("file") if err != nil { @@ -190,6 +191,7 @@ func (slf *HttpServerService) staticServer(w http.ResponseWriter, r *http.Reques defer localfd.Close() io.Copy(localfd, resourceFile) + writeResp(http.StatusOK, upath+fileName) } From 718e485dc71b07b5498ec1131bed7c8caef5a567 Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Tue, 30 Jul 2019 19:43:49 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=8C=87=E9=92=88?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/Module.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/service/Module.go b/service/Module.go index 44dc33f..018a7b2 100644 --- a/service/Module.go +++ b/service/Module.go @@ -151,7 +151,18 @@ func (slf *BaseModule) releaseModule(moduleId uint32) bool { } func (slf *BaseModule) ReleaseModule(moduleId uint32) bool { - locker := slf.GetRoot().getBaseModule().getLocker() + pRoot := slf.GetRoot() + if pRoot == nil { + return false + } + + baseModule := pRoot.getBaseModule() + if baseModule == nil { + return false + } + + //locker := slf.GetRoot().getBaseModule().getLocker() + locker := baseModule.getLocker() locker.Lock() slf.releaseModule(moduleId) locker.Unlock() From c11f8a07e478ba333379093172182a32b542ede4 Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Wed, 31 Jul 2019 11:44:03 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=88=A4=E6=96=ADModule=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E8=A2=AB=E9=87=8A=E6=94=BE=E6=97=B6=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E6=AC=A1=E9=87=8A=E6=94=BE=E4=BC=9A=E5=87=BA=E7=8E=B0=E7=A9=BA?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/Module.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/service/Module.go b/service/Module.go index 018a7b2..045afef 100644 --- a/service/Module.go +++ b/service/Module.go @@ -163,6 +163,10 @@ func (slf *BaseModule) ReleaseModule(moduleId uint32) bool { //locker := slf.GetRoot().getBaseModule().getLocker() locker := baseModule.getLocker() + if locker == nil { + return false + } + locker.Lock() slf.releaseModule(moduleId) locker.Unlock() From af40e3d45a4883680f065e2ba658b5532b3a7e1c Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Wed, 31 Jul 2019 17:41:32 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=B9=A6=E6=B3=95=E5=A4=A7=E8=B5=9B?= =?UTF-8?q?=E5=BE=97=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/教程.docx | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/教程.docx diff --git a/doc/教程.docx b/doc/教程.docx new file mode 100644 index 0000000..e69de29