123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- package service
- import (
- "encoding/json"
- "gadmin/config"
- "gadmin/internal/admin/forms"
- "gadmin/internal/gorm/model"
- "gadmin/internal/gorm/query"
- "gadmin/utility/serializer"
- "strconv"
- "strings"
- "github.com/gin-gonic/gin"
- "github.com/sirupsen/logrus"
- "github.com/spf13/cast"
- clientv3 "go.etcd.io/etcd/client/v3"
- )
- var DrainageServer = &sDrainageServer{
- key: "covenant/servers/loginparams/defaultGates", // 引流服务器key
- newerServersKey: "covenant/servers/loginparams/newerServers", // 新服务器key
- maxOpendServerIdKey: "covenant/servers/loginparams/maxOpendServerId", // 最大开放服务器ID
- whiteListKey: "covenant/servers/loginparams/serverWhiteList", // 登录白名单
- maxDeployServerId: "covenant/servers/loginparams/maxDeployServerId", // 最大部署服务器
- }
- type sDrainageServer struct {
- key string
- newerServersKey string
- maxOpendServerIdKey string
- whiteListKey string
- maxDeployServerId string
- }
- func (s *sDrainageServer) Get(ctx *gin.Context, req forms.GetDrainageServerReq) serializer.Response {
- logrus.Warnf("sDrainageServer Get")
- kv := clientv3.NewKV(config.Etcd)
- getResp, err := kv.Get(ctx, s.key)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(getResp.Kvs) == 0 {
- return serializer.Suc([]int32{})
- }
- var serverIds []int32
- if err = json.Unmarshal(getResp.Kvs[0].Value, &serverIds); err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- return serializer.Suc(serverIds)
- }
- func (s *sDrainageServer) Edit(ctx *gin.Context, req forms.EditDrainageServerReq) serializer.Response {
- marshal, err := json.Marshal(req.ServerIds)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Warnf("sDrainageServer ServerIds:%v", string(marshal))
- kv := clientv3.NewKV(config.Etcd)
- putResp, err := kv.Put(ctx, s.key, string(marshal), clientv3.WithPrevKV())
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Warnf("Revision:%v", putResp.Header.Revision)
- if putResp.PrevKv != nil {
- logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
- logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
- logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
- }
- return serializer.Suc(nil)
- }
- // 服务器显示控制参数设置
- func (s *sDrainageServer) EditDisplay(ctx *gin.Context, req forms.EditDisplayServerReq) serializer.Response {
- marshal, err := json.Marshal(req.ServerIds)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if string(marshal) == `[""]` || string(marshal) == "null" {
- marshal = []byte("[]")
- }
- logrus.Warnf("sDrainageServer EditDisplay ServerIds:%v", string(marshal))
- // 新服务器
- kv := clientv3.NewKV(config.Etcd)
- putResp, err := kv.Put(ctx, s.newerServersKey, string(marshal), clientv3.WithPrevKV())
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Warnf("Revision newerServersKey:%v", putResp.Header.Revision)
- if putResp.PrevKv != nil {
- logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
- logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
- logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
- }
- // 最大开放服务器ID
- putResp, err = kv.Put(ctx, s.maxOpendServerIdKey, cast.ToString(req.MaxOpendServerId), clientv3.WithPrevKV())
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Warnf("Revision maxOpendServerIdKey:%v, MaxOpendServerId:%v", putResp.Header.Revision, cast.ToString(req.MaxOpendServerId))
- if putResp.PrevKv != nil {
- logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
- logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
- logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
- }
- // 最大部署服务器ID
- putResp, err = kv.Put(ctx, s.maxDeployServerId, cast.ToString(req.MaxDeployServerId), clientv3.WithPrevKV())
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Warnf("Revision maxDeployServerId:%v, MaxDeployServerId:%v", putResp.Header.Revision, cast.ToString(req.MaxDeployServerId))
- if putResp.PrevKv != nil {
- logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
- logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
- logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
- }
- return serializer.Suc(nil)
- }
- // 服务器显示控制参数获取
- func (s *sDrainageServer) GetDisplay(ctx *gin.Context, req forms.GetDisplayServerReq) serializer.Response {
- var (
- serverIds []int32
- maxOpendServerId int32
- maxDeployServerId int32
- )
- // 新服
- kv := clientv3.NewKV(config.Etcd)
- getResp, err := kv.Get(ctx, s.newerServersKey)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(getResp.Kvs) > 0 {
- if err = json.Unmarshal(getResp.Kvs[0].Value, &serverIds); err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- }
- // 最大开放
- getResp, err = kv.Get(ctx, s.maxOpendServerIdKey)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(getResp.Kvs) > 0 {
- maxOpendServerId = cast.ToInt32(string(getResp.Kvs[0].Value))
- }
- // 最大部署
- getResp, err = kv.Get(ctx, s.maxDeployServerId)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(getResp.Kvs) > 0 {
- maxDeployServerId = cast.ToInt32(string(getResp.Kvs[0].Value))
- }
- return serializer.Suc(forms.GetDisplayServerRes{
- ServerIds: serverIds,
- MaxOpendServerId: maxOpendServerId,
- MaxDeployServerId: maxDeployServerId,
- })
- }
- func (s *sDrainageServer) GetWhiteList(ctx *gin.Context, req forms.GetWhiteListServerReq) serializer.Response {
- kv := clientv3.NewKV(config.Etcd)
- getResp, err := kv.Get(ctx, s.whiteListKey)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(getResp.Kvs) == 0 {
- return serializer.Suc([]int64{})
- }
- var params map[string][]int64
- if err = json.Unmarshal(getResp.Kvs[0].Value, ¶ms); err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- type result struct {
- ServerIds []int64 `json:"server_ids"`
- PlayerIds string `json:"player_ids"`
- }
- resp := &result{}
- playerIdMap := make(map[int64]struct{})
- //服务器的值都一样 放外边
- var ids []string
- for svrId, playerIds := range params {
- if svrId == "all" {
- resp.ServerIds = append(resp.ServerIds, 0)
- for _, playerId := range playerIds {
- ids = append(ids, strconv.FormatInt(playerId, 10))
- }
- resp.PlayerIds = strings.Join(ids, ",")
- break
- }
- for _, playerId := range playerIds {
- if _, ok := playerIdMap[playerId]; ok {
- continue
- }
- playerIdMap[playerId] = struct{}{}
- ids = append(ids, strconv.FormatInt(playerId, 10))
- }
- parseInt, _ := strconv.ParseInt(svrId, 10, 64)
- resp.ServerIds = append(resp.ServerIds, parseInt)
- }
- resp.PlayerIds = strings.Join(ids, ",")
- logrus.Infof("resp:%+v", resp)
- return serializer.Suc(resp)
- }
- func (s *sDrainageServer) EditWhiteList(ctx *gin.Context, req forms.EditWhiteListServerReq) serializer.Response {
- orgPlayerIds := strings.Split(req.PlayerIds, `,`)
- var playerIds []int64
- if len(orgPlayerIds) > 0 {
- for _, id := range orgPlayerIds {
- if cast.ToInt64(id) > 0 {
- playerIds = append(playerIds, cast.ToInt64(id))
- }
- }
- }
- params := make(map[string][]int64)
- //是否全选游戏服
- for _, svrId := range req.ServerIds {
- if svrId == 0 {
- //清空并设置
- params = make(map[string][]int64)
- params["all"] = make([]int64, 0)
- break
- }
- params[strconv.Itoa(svrId)] = make([]int64, 0)
- }
- //获取server_option
- var lists []*model.ServerOption
- err := query.Use(config.DB).ServerOption.WithContext(ctx).Scan(&lists)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if len(req.ServerIds) == len(lists) {
- params = make(map[string][]int64)
- params["all"] = make([]int64, 0)
- }
- if len(playerIds) != 0 {
- for svrId, _ := range params {
- params[svrId] = playerIds
- }
- }
- marshal, err := json.Marshal(params)
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Infof("marshal:%v", string(marshal))
- kv := clientv3.NewKV(config.Etcd)
- putResp, err := kv.Put(ctx, s.whiteListKey, string(marshal), clientv3.WithPrevKV())
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- logrus.Infof("Revision:%+v", putResp)
- if putResp.PrevKv != nil {
- logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
- logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
- logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
- }
- return serializer.Suc(nil)
- }
|