package main import ( "fmt" "git.swzry.com/zry/go-zSshRpcServer/easyophdl" "git.swzry.com/zry/go-zSshRpcServer/server" "github.com/bitly/go-simplejson" "net" ) func main() { conf, err := zsshrpc_server.NewDefaultZSshRpcServerCfg("hostkey.key") if err != nil { fmt.Println("Error: ", err) return } passwdMgr := zsshrpc_server.NewSimplePasswordMgr() passwdMgr.AddUserWithStringPassword("admin", "114514") conf.UsePasswordAuth(passwdMgr.PasswordCheckCallback) conf.UseLogger(func(level int, msg string, err error) { level_string := "[NIL]" switch level { case zsshrpc_server.SvrLogLevel_DEBUG: level_string = "[DBG]" break case zsshrpc_server.SvrLogLevel_INFO: level_string = "[INF]" break case zsshrpc_server.SvrLogLevel_WARNING: level_string = "[WRN]" break case zsshrpc_server.SvrLogLevel_ERROR: level_string = "[ERR]" break } if err != nil { fmt.Println("", level_string, msg, ":", err) } else { fmt.Println("", level_string, msg) } }) hdl := easyophdl.NewEasyOperationHandler() hdl.EnableDebug() hdl.EnableUriSuggestWhenNotFound() hdl.UseLogger(func(level int, msg string, err error) { level_string := "[NIL]" switch level { case zsshrpc_server.SvrLogLevel_DEBUG: level_string = "[DBG]" break case zsshrpc_server.SvrLogLevel_INFO: level_string = "[INF]" break case zsshrpc_server.SvrLogLevel_WARNING: level_string = "[WRN]" break case zsshrpc_server.SvrLogLevel_ERROR: level_string = "[ERR]" break } if err != nil { fmt.Println("", level_string, msg, ":", err) } else { fmt.Println("", level_string, msg) } }) conf.SetHandler(hdl) server := zsshrpc_server.NewZSshRpcServer(conf) bindaddr, err := net.ResolveTCPAddr("tcp4", "0.0.0.0:19180") if err != nil { fmt.Println("Failed Bind Address: ", err) return } server.ListenTCP("tcp4", bindaddr) fmt.Printf("Listening At %v\n", bindaddr.String()) hdl.AddHandler("/info", zsshrpc_server.RpcMethod_GET, func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) { response.UseSimpleJson() response.SimplePut("hello", "gensokyo") sj := simplejson.New() sj.Set("client_ver", request.GetClientVersion()) sj.Set("username", request.GetUserName()) sj.Set("remote_addr", request.GetRemoteAddr()) }) reqinfo := func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) { request.ProcGJson() response.UseSimpleJson() response.SimplePut("uri", request.RawRequest.URI) response.SimplePut("method", request.GetMethodName()) response.SimplePut("arg1", request.GJsonGet("arg1").Value()) response.SimplePut("arg2", request.GJsonGet("arg2").Value()) response.SimplePut("arg3", request.GJsonGet("arg3").Value()) response.SimplePut("arg4", request.GJsonGet("arg4").Value()) } hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_CALL, reqinfo) hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_ADD, reqinfo) hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_DEL, reqinfo) hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_GET, reqinfo) hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_SET, reqinfo) hdl.AddHandler("/test1", zsshrpc_server.RpcMethod_GET, reqinfo) hdl.AddHandler("/test1", zsshrpc_server.RpcMethod_SET, reqinfo) hdl.AddHandler("/rjtest1", zsshrpc_server.RpcMethod_SET, func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) { type testtype struct { arg1 int `json:"num"` arg2 string `json:"val"` } var test testtype if request.ProcRegularJson(test) { var out testtype out.arg1 = test.arg1 + 114 out.arg2 = test.arg2 + "514" response.UseRegularJson(out) } }) wch := make(chan int) <-wch }