main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package main
  2. import (
  3. "encoding/json"
  4. "git.wanbits.io/joe/franklin/comp"
  5. pb "git.wanbits.io/joe/franklin/protos"
  6. "git.wanbits.io/joe/kettle/htp"
  7. "git.wanbits.io/joe/kettle/log"
  8. "git.wanbits.io/joe/kettle/utl"
  9. "git.wanbits.io/joe/nnet/cpn"
  10. "github.com/coreos/etcd/clientv3"
  11. "github.com/gin-gonic/gin"
  12. "go.uber.org/zap"
  13. "net/http"
  14. "syscall"
  15. "time"
  16. )
  17. func main() {
  18. var err error
  19. comp.InitEnv("agent.toml", "agent.toml")
  20. // load conf
  21. g_conf, err = comp.LoadConf(comp.GConfile)
  22. utl.ErrPanic(err)
  23. // connect etcd
  24. // connect redis
  25. // connect mq
  26. // connect evbus
  27. comp.InitAll(g_conf)
  28. // connect to login
  29. loginconf, err := comp.GEtcdc.Get(comp.PathLogin(g_conf))
  30. utl.ErrPanic(err)
  31. if len(loginconf.Kvs) <= 0 {
  32. utl.ErrPanic(utl.ErrContainerEmpty)
  33. }
  34. var loginConf pb.LoginConfConf
  35. err = json.Unmarshal(loginconf.Kvs[0].Value, &loginConf)
  36. utl.ErrPanic(err)
  37. g_rabbitProto = NewRabbitCProtocol()
  38. g_rabbit = cpn.NewWsClient(&hubConfC, g_rabbitProto, g_rabbitProto, cpn.WithReconn(3*time.Second))
  39. err = g_rabbit.NewConnection(loginConf.Addrs[0], g_conf.Id)
  40. utl.UnUsed(err)
  41. // connect to lobbies
  42. lobJs, err := comp.GEtcdc.Get(comp.PathLobbies(g_conf), clientv3.WithPrefix())
  43. utl.ErrPanic(err)
  44. lobProto := ALProtocol{}
  45. g_taj = cpn.NewTcpClient(&hubConfC, &lobProto, &lobProto, cpn.WithReconn(3*time.Second))
  46. var lobConf pb.AppConfConf
  47. for _, conf := range lobJs.Kvs {
  48. err = json.Unmarshal(conf.Value, &lobConf)
  49. utl.ErrPanic(err)
  50. err = g_taj.NewConnection(lobConf.Addr, lobConf.Id)
  51. utl.UnUsed(err)
  52. }
  53. // connect to logics
  54. lgcJs, err := comp.GEtcdc.Get(comp.PathLogics(g_conf), clientv3.WithPrefix())
  55. utl.ErrPanic(err)
  56. lgcProto := ALProtocol{}
  57. g_logics = cpn.NewTcpClient(&hubConfC, &lgcProto, &lgcProto, cpn.WithReconn(3*time.Second))
  58. var lgcConf pb.AppConfConf
  59. for _, conf := range lgcJs.Kvs {
  60. err = json.Unmarshal(conf.Value, &lgcConf)
  61. utl.ErrPanic(err)
  62. err = g_logics.NewConnection(lgcConf.Addr, lobConf.Id)
  63. utl.UnUsed(err)
  64. }
  65. // start rpc
  66. comp.GRpc = htp.NewGinServer(g_conf.RpcAddr, htp.WithCors(true))
  67. err = comp.GRpc.Start(func(e *gin.Engine) {
  68. e.POST("/rpc", do_dispatch)
  69. })
  70. utl.ErrPanic(err)
  71. // register self
  72. // watch etcd
  73. //comp.GEtcdc.WatchPrefix()
  74. // start listener
  75. g_serverProto = &CSProtocol{}
  76. g_server = cpn.NewWsServer(&hubConfS, g_serverProto, g_serverProto, g_conf.Addr, "/franklin", nil)
  77. go func() {
  78. if err = g_server.Start(); err != nil && err != http.ErrServerClosed {
  79. utl.ErrPanic(err)
  80. }
  81. }()
  82. // wait signal
  83. sig := utl.WaitForSignals(syscall.SIGINT)
  84. log.Debug("received signal", zap.String("sig", sig.String()))
  85. _ = g_server.Stop()
  86. _ = comp.GRpc.Stop()
  87. _ = g_logics.Stop()
  88. _ = g_taj.Stop()
  89. _ = g_rabbit.Stop()
  90. comp.GMq.Close()
  91. comp.GEtcdc.Close()
  92. _ = comp.GRds.Close()
  93. comp.GEv.Close()
  94. log.Sync()
  95. }