123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package game
- import (
- "encoding/json"
- "errors"
- "fmt"
- "strings"
- "sync"
- "git.jiaxianghudong.com/go/logs"
- "git.jiaxianghudong.com/webs/pkg/rds"
- "github.com/go-redis/redis"
- )
- var RdsXueLiu = "activegamexueliu"
- var ChannelXueLIU = "channel_activegamexueliu"
- var syncMap sync.Map
- var (
- Conf Data // 血流6红中
- ConfMs Data // 血流免输(也叫血流8红中)
- ConfHzvs Data // 血流2v2
- ConfXl4hz Data // 血流4红中
- ConfGb Data // 国标免洗麻将
- ConfGbxz Data // 国标血战麻将
- )
- type Data struct {
- List []*GameXueLiu `json:"list"`
- TextList []string `json:"text_list"`
- mu sync.RWMutex
- }
- type GameXueLiu struct {
- HuType string `json:"hu_type"`
- BeiShu int `json:"bei_shu"`
- FuziData [][]string `json:"fuzi_data"`
- Msg string `json:"msg"`
- FuziShowType []string `json:"fuzi_show_type"`
- }
- func (d *Data) Store(version string) (err error) {
- if len(d.List) != 0 {
- marshal, _ := json.Marshal(d)
- err = rds.Redis.Set(RdsXueLiu+version, marshal, -1).Err()
- PubMessage(ChannelXueLIU, "refresh")
- logs.Infof("更新规则配置,TextList=%+v", d.TextList)
- for k, v := range d.List {
- logs.Infof("%d--list=%+v", k, *v)
- }
- } else {
- return errors.New("没有正确格式")
- }
- return err
- }
- func (d *Data) ReLoad(version string) error {
- Conf.mu.Lock()
- defer Conf.mu.Unlock()
- val := rds.Redis.Get(RdsXueLiu + version).Val()
- if val != "" {
- json.Unmarshal([]byte(val), d)
- }
- syncMap.Store(version, d)
- return nil
- }
- func (d *Data) LoadConf(version string) error {
- Conf.mu.RLock()
- defer Conf.mu.RUnlock()
- if version == "" {
- d.List = Conf.List
- d.TextList = Conf.TextList
- } else {
- load, ok := syncMap.Load(version)
- if ok {
- t := load.(*Data)
- d.List = t.List
- d.TextList = t.TextList
- }
- }
- return nil
- }
- func PubMessage(channel, msg string) {
- rds.Redis.Publish(channel, msg)
- }
- func SubMessage() {
- rds.Redis = rds.Register("redis")
- Conf.ReLoad("")
- ConfMs.ReLoad("xueliums")
- ConfHzvs.ReLoad("hzvs")
- ConfXl4hz.ReLoad("xl4hz")
- ConfGb.ReLoad("xueliugb")
- ConfGbxz.ReLoad("xueliugbxz")
- pubsub := rds.Redis.Subscribe(ChannelXueLIU)
- go func() {
- fmt.Println("配置订阅启动3")
- var receipt interface{}
- var err error
- for {
- receipt, err = pubsub.Receive()
- if err != nil {
- if strings.Contains(err.Error(), "close") {
- fmt.Println("closedd", err)
- return
- }
- }
- switch v := receipt.(type) {
- case *redis.Message: // 单个订阅subscribe
- fmt.Printf("%s: message: %s\n", v.Channel, v.Payload)
- switch v.Payload {
- case "refresh":
- Conf.ReLoad("")
- ConfMs.ReLoad("xueliums")
- ConfHzvs.ReLoad("hzvs")
- ConfXl4hz.ReLoad("xl4hz")
- ConfGb.ReLoad("xueliugb")
- ConfGbxz.ReLoad("xueliugbxz")
- break
- default:
- }
- case error:
- fmt.Println("你好")
- return
- default:
- fmt.Println("pong....")
- }
- }
- }()
- }
|