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.

119 lines
2.7 KiB

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