You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.0 KiB

4 years ago
4 years ago
  1. // Package utils 提供zinx相关工具类函数
  2. // 包括:
  3. // 全局配置
  4. // 配置文件加载
  5. //
  6. // 当前文件描述:
  7. // @Title globalobj.go
  8. // @Description 相关配置文件定义及加载方式
  9. // @Author Aceld - Thu Mar 11 10:32:29 CST 2019
  10. package utils
  11. import (
  12. "encoding/json"
  13. "io/ioutil"
  14. "os"
  15. "github.com/aceld/zinx/ziface"
  16. "github.com/aceld/zinx/zlog"
  17. )
  18. /*
  19. 存储一切有关Zinx框架的全局参数供其他模块使用
  20. 一些参数也可以通过 用户根据 zinx.json来配置
  21. */
  22. type GlobalObj struct {
  23. /*
  24. Server
  25. */
  26. TCPServer ziface.IServer //当前Zinx的全局Server对象
  27. Host string //当前服务器主机IP
  28. TCPPort int //当前服务器主机监听端口号
  29. Name string //当前服务器名称
  30. /*
  31. Zinx
  32. */
  33. Version string //当前Zinx版本号
  34. MaxPacketSize uint32 //都需数据包的最大值
  35. MaxConn int //当前服务器主机允许的最大链接个数
  36. WorkerPoolSize uint32 //业务工作Worker池的数量
  37. MaxWorkerTaskLen uint32 //业务工作Worker对应负责的任务队列最大任务存储数量
  38. MaxMsgChanLen uint32 //SendBuffMsg发送消息的缓冲最大长度
  39. /*
  40. config file path
  41. */
  42. ConfFilePath string
  43. /*
  44. logger
  45. */
  46. LogDir string //日志所在文件夹 默认"./log"
  47. LogFile string //日志文件名称 默认"" --如果没有设置日志文件,打印信息将打印至stderr
  48. LogDebugClose bool //是否关闭Debug日志级别调试信息 默认false -- 默认打开debug信息
  49. }
  50. /*
  51. 定义一个全局的对象
  52. */
  53. var GlobalObject *GlobalObj
  54. //PathExists 判断一个文件是否存在
  55. func PathExists(path string) (bool, error) {
  56. _, err := os.Stat(path)
  57. if err == nil {
  58. return true, nil
  59. }
  60. if os.IsNotExist(err) {
  61. return false, nil
  62. }
  63. return false, err
  64. }
  65. //Reload 读取用户的配置文件
  66. func (g *GlobalObj) Reload() {
  67. if confFileExists, _ := PathExists(g.ConfFilePath); confFileExists != true {
  68. //fmt.Println("Config File ", g.ConfFilePath , " is not exist!!")
  69. return
  70. }
  71. data, err := ioutil.ReadFile(g.ConfFilePath)
  72. if err != nil {
  73. panic(err)
  74. }
  75. //将json数据解析到struct中
  76. err = json.Unmarshal(data, g)
  77. if err != nil {
  78. panic(err)
  79. }
  80. //Logger 设置
  81. if g.LogFile != "" {
  82. zlog.SetLogFile(g.LogDir, g.LogFile)
  83. }
  84. if g.LogDebugClose == true {
  85. zlog.CloseDebug()
  86. }
  87. }
  88. /*
  89. 提供init方法默认加载
  90. */
  91. func init() {
  92. pwd, err := os.Getwd()
  93. if err != nil {
  94. pwd = "."
  95. }
  96. //初始化GlobalObject变量,设置一些默认值
  97. GlobalObject = &GlobalObj{
  98. Name: "ZinxServerApp",
  99. Version: "V0.11",
  100. TCPPort: 8999,
  101. Host: "0.0.0.0",
  102. MaxConn: 12000,
  103. MaxPacketSize: 4096,
  104. ConfFilePath: pwd + "/conf/zinx.json",
  105. WorkerPoolSize: 10,
  106. MaxWorkerTaskLen: 1024,
  107. MaxMsgChanLen: 1024,
  108. LogDir: pwd + "/log",
  109. LogFile: "",
  110. LogDebugClose: false,
  111. }
  112. //NOTE: 从配置文件中加载一些用户配置的参数
  113. GlobalObject.Reload()
  114. }