json.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package config
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "os"
  7. "sync"
  8. "time"
  9. slog "bet24.com/log"
  10. "bet24.com/utils"
  11. )
  12. var Server struct {
  13. LogLevel string
  14. FileLevel string
  15. LogPath string
  16. CertFile string
  17. KeyFile string
  18. MaxConnNum int
  19. Login string
  20. Password string
  21. Database string
  22. Datasource string
  23. GameDB string
  24. ChannelUrl string
  25. ChannelPassword string
  26. RedisDB int
  27. LastHour int
  28. ServiceAddr string
  29. //
  30. ServerName string
  31. ServerIP string
  32. ServerPort int
  33. ServerAddr string
  34. MonitorPort int
  35. OfflineSeconds int64
  36. IsChipRoom int
  37. LoseTax int //输家写分
  38. IsPrivateRoom int
  39. VersionID int
  40. }
  41. var RoomConfigName = "quickludo"
  42. // func GetRoomInfo() string {
  43. // d, _ := json.Marshal(Room)
  44. // return string(d)
  45. // }
  46. func init() {
  47. configFile := "quickludo/server.json"
  48. data, err := os.ReadFile(configFile)
  49. if err != nil {
  50. log.Fatalf("read config failed quickludo/server.json %v", err)
  51. }
  52. fmt.Println(string(data))
  53. err = json.Unmarshal(data, &Server)
  54. if err != nil {
  55. log.Fatalf("Unmarshal config failed quickludo/server.json err:%v", err)
  56. return
  57. }
  58. logger, err := slog.New(Server.LogLevel, Server.FileLevel, fmt.Sprintf("%v/%v", Server.LogPath, RoomConfigName), log.LstdFlags)
  59. if err == nil {
  60. slog.Export(logger)
  61. }
  62. originPort := Server.ServerPort
  63. for i := 0; i < 100; i++ {
  64. if utils.CheckPortInUse(Server.ServerPort) {
  65. Server.ServerPort++
  66. continue
  67. }
  68. break
  69. }
  70. if Server.MonitorPort == 0 {
  71. Server.MonitorPort = Server.ServerPort + 100
  72. }
  73. now := time.Now()
  74. Server.LastHour = now.Hour()
  75. if originPort != Server.ServerPort {
  76. // slog.Debug("Port %d in use, change to %d", originPort, Server.ServerPort)
  77. d, _ := json.Marshal(Server)
  78. os.WriteFile(configFile, d, 0644)
  79. }
  80. }
  81. func Run() {
  82. Rooms = new(RoomList)
  83. Rooms.lock = &sync.RWMutex{}
  84. refreshLogFile()
  85. loadRoomConfig()
  86. }
  87. func refreshLogFile() {
  88. time.AfterFunc(5*time.Minute, refreshLogFile)
  89. doRefreshLogFile()
  90. }
  91. func doRefreshLogFile() {
  92. if Server.LogPath != "" {
  93. now := time.Now()
  94. if now.Hour() != Server.LastHour {
  95. Server.LastHour = now.Hour()
  96. slog.RecreateFileLog(fmt.Sprintf("%v/%v", Server.LogPath, RoomConfigName), log.LstdFlags)
  97. }
  98. }
  99. }