config.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package model
  2. import (
  3. "encoding/xml"
  4. "os"
  5. "rocommon/service"
  6. "rocommon/util"
  7. "roserver/baseserver/model"
  8. "roserver/serverproto"
  9. "runtime/debug"
  10. "strings"
  11. )
  12. func ConfigInit() {
  13. defer func() {
  14. if err := recover(); err != nil {
  15. util.InfoF("Stack---::%v\n%s\n", err, string(debug.Stack()))
  16. panic(nil)
  17. }
  18. }()
  19. sConfig := service.GetServiceConfig()
  20. model.BaseConfigInit(sConfig)
  21. //加载战斗属性xml数据
  22. for index := range serverproto.XmlFileList {
  23. xmlLoad(sConfig.Node.Config+"/xml/", serverproto.XmlFileList[index])
  24. }
  25. //加载屏蔽字符
  26. LoadSensitiveWords()
  27. //自言自语屏蔽字库
  28. model.LoadAdvSensitiveWords()
  29. util.InfoF("xml load success!!!")
  30. //startupTime := time.Unix(int64(service.ServiceStartupTime / 1000), 0)
  31. //util.InfoF("[ServiceStartTime] :%v", startupTime)
  32. }
  33. func xmlLoad(path string, fileName string) {
  34. file, err := os.OpenFile(path+fileName+".xml", os.O_RDONLY, os.ModePerm)
  35. if err != nil {
  36. panic(err)
  37. }
  38. defer file.Close()
  39. xmlReader := xml.NewDecoder(file)
  40. if xmlReader == nil {
  41. panic("xml reader nil file")
  42. }
  43. //加载战斗属性xml数据
  44. if strings.Contains(fileName, "BattleFormulaParamCfg") {
  45. BattleFormulaParamXmlLoad(xmlReader, fileName)
  46. }
  47. }
  48. //BattleFormulaParamCfg.xml
  49. type BattleFormulaParamXml struct {
  50. paramId int32
  51. val float32
  52. desc string
  53. }
  54. var BattleFormulaList = map[int32]*BattleFormulaParamXml{}
  55. func BattleFormulaParamXmlLoad(xmlReader *xml.Decoder, fileName string) {
  56. var formulaXml *BattleFormulaParamXml = nil
  57. for index, err := xmlReader.Token(); err == nil; index, err = xmlReader.Token() {
  58. switch token := index.(type) {
  59. case xml.StartElement:
  60. name := token.Name.Local
  61. if name == "param" {
  62. formulaXml = &BattleFormulaParamXml{}
  63. for idx := range token.Attr {
  64. attrName := token.Attr[idx].Name.Local
  65. if attrName == "id" {
  66. value, _ := model.Str2Num(token.Attr[idx].Value)
  67. formulaXml.paramId = int32(value)
  68. } else if attrName == "value" {
  69. value, _ := model.Str2Float32(token.Attr[idx].Value)
  70. formulaXml.val = value
  71. } else if attrName == "desc" {
  72. formulaXml.desc = token.Attr[idx].Value
  73. }
  74. }
  75. BattleFormulaList[formulaXml.paramId] = formulaXml
  76. }
  77. }
  78. }
  79. }
  80. var SensitiveUtil *util.DFAUtil = nil
  81. func LoadSensitiveWords() {
  82. SensitiveUtil = util.NewDFAUtil(nil)
  83. for _, val := range serverproto.ShieldedWordCfgLoader {
  84. valList := strings.Split(val.Type, ",")
  85. util.DFAInsertWord(SensitiveUtil, valList)
  86. }
  87. serverproto.ShieldedWordCfgLoader = map[int32]*serverproto.ShieldedWordCfg{}
  88. }
  89. func ServerReloadConfig(cfgNameList []string) {
  90. for idx := 0; idx < len(cfgNameList); idx++ {
  91. if cfgNameList[idx] == "AdvertisingScreen" {
  92. model.ReloadAdvSensitiveWords(cfgNameList[idx])
  93. } else {
  94. model.ReloadConfigByName(cfgNameList[idx])
  95. }
  96. }
  97. }