ServerBase.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package base
  2. import (
  3. "Server-Core/Server/Base/Log"
  4. service "Server-Core/Server/Base/Service"
  5. "Server-Core/Server/Common"
  6. "bufio"
  7. "flag"
  8. "fmt"
  9. "net"
  10. "os"
  11. "os/signal"
  12. "reflect"
  13. "strconv"
  14. "strings"
  15. "syscall"
  16. "time"
  17. )
  18. var Server *ServerBase
  19. type ServerBase struct {
  20. running bool
  21. Config common.ServerConf
  22. net *Net
  23. Timer *Timer
  24. Execute ServerExecute
  25. kill chan os.Signal
  26. }
  27. // var siteMap1 map[string]string = make(map[string]string)
  28. func NewServer(execute ServerExecute) {
  29. Server = new(ServerBase)
  30. Server.kill = make(chan os.Signal, 1)
  31. signal.Notify(Server.kill, syscall.SIGINT, syscall.SIGTERM)
  32. Server.readServerConfig()
  33. log.AddRotateHook(".././Log", 30, true)
  34. log.Info("系统初始化")
  35. err := service.Init()
  36. if err != nil {
  37. panic(err)
  38. }
  39. log.Info("创建服务管理 Success")
  40. Server.Execute = execute
  41. log.Info("============")
  42. Server.start()
  43. }
  44. func (s *ServerBase) start() {
  45. s.running = true
  46. s.Execute.LogicStart()
  47. s.Execute.OnServerReady()
  48. for s.running {
  49. select {
  50. case <-time.After(16 * time.Millisecond):
  51. service.Run()
  52. case <-s.kill:
  53. s.running = false
  54. log.Info("系统开始关闭")
  55. }
  56. }
  57. s.Execute.LogicEnd()
  58. s.stop()
  59. }
  60. func (s *ServerBase) stop() {
  61. service.UnInit()
  62. }
  63. var ip string = ""
  64. func getIp() string {
  65. addrList, err := net.InterfaceAddrs()
  66. if err != nil {
  67. panic(err)
  68. }
  69. for _, address := range addrList {
  70. if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
  71. if ipNet.IP.To4() != nil {
  72. fmt.Println(ipNet.IP.String())
  73. ip = ipNet.IP.String()
  74. break
  75. }
  76. }
  77. }
  78. return ip
  79. }
  80. func (s *ServerBase) readServerConfig() {
  81. var tag string
  82. cr := reflect.ValueOf(&s.Config).Elem()
  83. flag.StringVar(&tag, "tag", "dev", "--tag=dev")
  84. flag.Parse()
  85. ip = getIp()
  86. if ip == "192.168.1.122" {
  87. file, err := os.Open(fmt.Sprintf("E://ChatGameService2/Bin/Config/%s.conf", tag))
  88. if err != nil {
  89. panic(err)
  90. }
  91. defer file.Close()
  92. sc := bufio.NewScanner(file)
  93. for sc.Scan() {
  94. var str = sc.Text()
  95. var index = strings.Index(str, "=")
  96. if index == -1 {
  97. continue
  98. }
  99. var key = strings.Trim(str[0:index], " ")
  100. var value = strings.Trim(str[index+1:], " ")
  101. a := cr.FieldByName(key)
  102. switch a.Type().String() {
  103. case "string":
  104. value = strings.Trim(value, "\"")
  105. a.Set(reflect.ValueOf(value))
  106. case "bool":
  107. b, _ := strconv.ParseBool(value)
  108. a.Set(reflect.ValueOf(b))
  109. case "int":
  110. i, _ := strconv.Atoi(value)
  111. a.Set(reflect.ValueOf(i))
  112. }
  113. }
  114. } else {
  115. // records := base.LoadCsvCfg("E://ChatGameService2/Bin/Scp/Level.csv").Records
  116. file, err := os.Open(fmt.Sprintf("../Config/%s.conf", tag))
  117. if err != nil {
  118. panic(err)
  119. }
  120. defer file.Close()
  121. sc := bufio.NewScanner(file)
  122. for sc.Scan() {
  123. var str = sc.Text()
  124. var index = strings.Index(str, "=")
  125. if index == -1 {
  126. continue
  127. }
  128. var key = strings.Trim(str[0:index], " ")
  129. var value = strings.Trim(str[index+1:], " ")
  130. a := cr.FieldByName(key)
  131. switch a.Type().String() {
  132. case "string":
  133. value = strings.Trim(value, "\"")
  134. a.Set(reflect.ValueOf(value))
  135. case "bool":
  136. b, _ := strconv.ParseBool(value)
  137. a.Set(reflect.ValueOf(b))
  138. case "int":
  139. i, _ := strconv.Atoi(value)
  140. a.Set(reflect.ValueOf(i))
  141. }
  142. }
  143. }
  144. //file, err := os.Open(fmt.Sprintf("E://ChatGameService2/Bin/Config/%s.conf", tag))
  145. }
  146. func (s *ServerBase) initTimer() {
  147. s.Timer = CreateTimer()
  148. }