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.

90 lines
1.8 KiB

  1. package utils
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "os"
  6. "zinx/ziface"
  7. )
  8. /*
  9. 存储一切有关Zinx框架的全局参数供其他模块使用
  10. 一些参数也可以通过 用户根据 zinx.json来配置
  11. */
  12. type GlobalObj struct {
  13. /*
  14. Server
  15. */
  16. TcpServer ziface.IServer //当前Zinx的全局Server对象
  17. Host string //当前服务器主机IP
  18. TcpPort int //当前服务器主机监听端口号
  19. Name string //当前服务器名称
  20. /*
  21. Zinx
  22. */
  23. Version string //当前Zinx版本号
  24. MaxPacketSize uint32 //都需数据包的最大值
  25. MaxConn int //当前服务器主机允许的最大链接个数
  26. /*
  27. config file path
  28. */
  29. ConfFilePath string
  30. }
  31. /*
  32. 定义一个全局的对象
  33. */
  34. var GlobalObject *GlobalObj
  35. //判断一个文件是否存在
  36. func PathExists(path string) (bool, error) {
  37. _, err := os.Stat(path)
  38. if err == nil {
  39. return true, nil
  40. }
  41. if os.IsNotExist(err) {
  42. return false, nil
  43. }
  44. return false, err
  45. }
  46. //读取用户的配置文件
  47. func (g *GlobalObj) Reload() {
  48. if confFileExists, _ := PathExists(g.ConfFilePath) ; confFileExists != true {
  49. //fmt.Println("Config File ", g.ConfFilePath , " is not exist!!")
  50. return
  51. }
  52. data, err := ioutil.ReadFile(g.ConfFilePath)
  53. if err != nil {
  54. panic(err)
  55. }
  56. //将json数据解析到struct中
  57. //fmt.Printf("json :%s\n", data)
  58. err = json.Unmarshal(data, &GlobalObject)
  59. if err != nil {
  60. panic(err)
  61. }
  62. }
  63. /*
  64. 提供init方法默认加载
  65. */
  66. func init() {
  67. //初始化GlobalObject变量,设置一些默认值
  68. GlobalObject = &GlobalObj{
  69. Name: "ZinxServerApp",
  70. Version: "V0.4",
  71. TcpPort: 7777,
  72. Host: "0.0.0.0",
  73. MaxConn: 12000,
  74. MaxPacketSize: 4096,
  75. ConfFilePath: "conf/zinx.json",
  76. }
  77. //从配置文件中加载一些用户配置的参数
  78. GlobalObject.Reload()
  79. }