json.go 1.9 KB

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