main.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package main
  2. import (
  3. "fmt"
  4. "git.swzry.com/zry/go-zSshRpcServer/easyophdl"
  5. "git.swzry.com/zry/go-zSshRpcServer/server"
  6. "github.com/bitly/go-simplejson"
  7. "net"
  8. )
  9. func main() {
  10. conf, err := zsshrpc_server.NewDefaultZSshRpcServerCfg("hostkey.key")
  11. if err != nil {
  12. fmt.Println("Error: ", err)
  13. return
  14. }
  15. passwdMgr := zsshrpc_server.NewSimplePasswordMgr()
  16. passwdMgr.AddUserWithStringPassword("admin", "114514")
  17. conf.UsePasswordAuth(passwdMgr.PasswordCheckCallback)
  18. conf.UseLogger(func(level int, msg string, err error) {
  19. level_string := "[NIL]"
  20. switch level {
  21. case zsshrpc_server.SvrLogLevel_DEBUG:
  22. level_string = "[DBG]"
  23. break
  24. case zsshrpc_server.SvrLogLevel_INFO:
  25. level_string = "[INF]"
  26. break
  27. case zsshrpc_server.SvrLogLevel_WARNING:
  28. level_string = "[WRN]"
  29. break
  30. case zsshrpc_server.SvrLogLevel_ERROR:
  31. level_string = "[ERR]"
  32. break
  33. }
  34. if err != nil {
  35. fmt.Println("<FrontEnd>", level_string, msg, ":", err)
  36. } else {
  37. fmt.Println("<FrontEnd>", level_string, msg)
  38. }
  39. })
  40. hdl := easyophdl.NewEasyOperationHandler()
  41. hdl.EnableDebug()
  42. hdl.EnableUriSuggestWhenNotFound()
  43. hdl.UseLogger(func(level int, msg string, err error) {
  44. level_string := "[NIL]"
  45. switch level {
  46. case zsshrpc_server.SvrLogLevel_DEBUG:
  47. level_string = "[DBG]"
  48. break
  49. case zsshrpc_server.SvrLogLevel_INFO:
  50. level_string = "[INF]"
  51. break
  52. case zsshrpc_server.SvrLogLevel_WARNING:
  53. level_string = "[WRN]"
  54. break
  55. case zsshrpc_server.SvrLogLevel_ERROR:
  56. level_string = "[ERR]"
  57. break
  58. }
  59. if err != nil {
  60. fmt.Println("<BackEnd>", level_string, msg, ":", err)
  61. } else {
  62. fmt.Println("<BackEnd>", level_string, msg)
  63. }
  64. })
  65. conf.SetHandler(hdl)
  66. server := zsshrpc_server.NewZSshRpcServer(conf)
  67. bindaddr, err := net.ResolveTCPAddr("tcp4", "0.0.0.0:19180")
  68. if err != nil {
  69. fmt.Println("Failed Bind Address: ", err)
  70. return
  71. }
  72. server.ListenTCP("tcp4", bindaddr)
  73. fmt.Printf("Listening At %v\n", bindaddr.String())
  74. hdl.AddHandler("/info", zsshrpc_server.RpcMethod_GET, func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) {
  75. response.UseSimpleJson()
  76. response.SimplePut("hello", "gensokyo")
  77. sj := simplejson.New()
  78. sj.Set("client_ver", request.GetClientVersion())
  79. sj.Set("username", request.GetUserName())
  80. sj.Set("remote_addr", request.GetRemoteAddr())
  81. })
  82. reqinfo := func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) {
  83. request.ProcGJson()
  84. response.UseSimpleJson()
  85. response.SimplePut("uri", request.RawRequest.URI)
  86. response.SimplePut("method", request.GetMethodName())
  87. response.SimplePut("arg1", request.GJsonGet("arg1").Value())
  88. response.SimplePut("arg2", request.GJsonGet("arg2").Value())
  89. response.SimplePut("arg3", request.GJsonGet("arg3").Value())
  90. response.SimplePut("arg4", request.GJsonGet("arg4").Value())
  91. }
  92. hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_CALL, reqinfo)
  93. hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_ADD, reqinfo)
  94. hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_DEL, reqinfo)
  95. hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_GET, reqinfo)
  96. hdl.AddHandler("/reqinfo", zsshrpc_server.RpcMethod_SET, reqinfo)
  97. hdl.AddHandler("/test1", zsshrpc_server.RpcMethod_GET, reqinfo)
  98. hdl.AddHandler("/test1", zsshrpc_server.RpcMethod_SET, reqinfo)
  99. hdl.AddHandler("/rjtest1", zsshrpc_server.RpcMethod_SET, func(request *easyophdl.EasyOpHdlRequest, response *easyophdl.EasyOpHdlResponse) {
  100. type testtype struct {
  101. arg1 int `json:"num"`
  102. arg2 string `json:"val"`
  103. }
  104. var test testtype
  105. if request.ProcRegularJson(test) {
  106. var out testtype
  107. out.arg1 = test.arg1 + 114
  108. out.arg2 = test.arg2 + "514"
  109. response.UseRegularJson(out)
  110. }
  111. })
  112. wch := make(chan int)
  113. <-wch
  114. }