diff --git a/util/balancequeue/queue.go b/util/balancequeue/queue.go deleted file mode 100644 index b31465a..0000000 --- a/util/balancequeue/queue.go +++ /dev/null @@ -1,136 +0,0 @@ -package balancequeue - -import ( - "fmt" - "strings" -) - -// 平衡队列 - -type Element interface { - BalanceQueueHandler() -} - -type elementWrapper struct { - F func() -} - -func (e *elementWrapper) BalanceQueueHandler() { - e.F() -} - -func ElementWrapper(f func()) Element { - return &elementWrapper{F: f} -} - -type group struct { - Array []Element - queuePos int -} - -type groupArray struct { - queue []*group -} - -type BalanceQueue struct { - index int // 循环索引 - groups []*group // 固定的分组,长度不变,每次Update触发一个分组 - tables []*groupArray - pool map[Element]*group -} - -// New 创建一个平衡队列 -// groupNumber 分组数量 -func New(groupNumber int) *BalanceQueue { - ret := &BalanceQueue{ - groups: make([]*group, groupNumber), - tables: make([]*groupArray, 10), // 本身会自动扩容,初始值不是很重要 - pool: make(map[Element]*group), - } - - for i := 0; i < len(ret.tables); i++ { - ret.tables[i] = &groupArray{} - } - // 初始化平衡数组,所有平衡队列容量为0 - for i := 0; i < len(ret.groups); i++ { - ret.groups[i] = &group{queuePos: i} - ret.tables[0].queue = append(ret.tables[0].queue, ret.groups[i]) - } - return ret -} - -func (q *BalanceQueue) String() string { - buf := strings.Builder{} - buf.WriteString("BalanceQueue:\n") - buf.WriteString(fmt.Sprintf("分组数量: %v\n", len(q.groups))) - for k, v := range q.tables { - buf.WriteString(fmt.Sprintf("元素数量%v: 组数量%v ==>", k, len(v.queue))) - for _, vv := range v.queue { - buf.WriteString(fmt.Sprintf("%v ", len(vv.Array))) - } - buf.WriteString("\n") - } - return buf.String() -} - -func (q *BalanceQueue) Update() { - if q.index == len(q.groups) { - q.index = 0 - } - for _, v := range q.groups[q.index].Array { - v.BalanceQueueHandler() - } - q.index++ -} - -func (q *BalanceQueue) Push(e Element) { - if e == nil { - return - } - - if _, ok := q.pool[e]; ok { - return - } - - for k, v := range q.tables { - size := len(v.queue) - if size == 0 { - continue - } - - arr := v.queue[size-1] - if k+1 >= len(q.tables) { - q.tables = append(q.tables, &groupArray{}) - } - q.tables[k+1].queue = append(q.tables[k+1].queue, arr) - q.tables[k].queue = v.queue[:size-1] - arr.queuePos = len(q.tables[k+1].queue) - 1 - arr.Array = append(arr.Array, e) - q.pool[e] = arr - return - } - return -} - -func (q *BalanceQueue) Pop(e Element) { - group, ok := q.pool[e] - if !ok { - return - } - delete(q.pool, e) - count := len(group.Array) - for i := 0; i < count; i++ { - if group.Array[i] == e { - group.Array[i] = group.Array[count-1] - group.Array = group.Array[:count-1] - bqPos := group.queuePos - queCount := len(q.tables[count].queue) - q.tables[count].queue[bqPos] = q.tables[count].queue[queCount-1] - q.tables[count].queue[bqPos].queuePos = bqPos - q.tables[count].queue = q.tables[count].queue[:queCount-1] - q.tables[count-1].queue = append(q.tables[count-1].queue, group) - group.queuePos = len(q.tables[count-1].queue) - 1 - return - } - } -} diff --git a/util/balancequeue/queue_test.go b/util/balancequeue/queue_test.go deleted file mode 100644 index 927fa16..0000000 --- a/util/balancequeue/queue_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package balancequeue - -import ( - "fmt" - "math/rand" - "testing" - "time" -) - -type A struct { - Name string -} - -func (a *A) BalanceQueueHandler() { - -} - -func TestOne(t *testing.T) { - q := New(5) - - var es []Element - go func() { - for { - q.Update() - fmt.Println(q) - time.Sleep(time.Second) - e := &A{Name: fmt.Sprint(time.Now().Unix())} - es = append(es, e) - q.Push(e) - if rand.Intn(10) > 5 && len(es) >= 2 { - for _, v := range es[:2] { - q.Pop(v) - } - es = es[2:] - } - } - }() - - time.Sleep(time.Minute) -} diff --git a/util/viperx/viper.go b/util/viperx/viper.go deleted file mode 100644 index 73519eb..0000000 --- a/util/viperx/viper.go +++ /dev/null @@ -1,29 +0,0 @@ -package viperx - -import ( - "fmt" - - "github.com/spf13/viper" -) - -var paths = []string{ - ".", - "./etc", - "./config", -} - -func GetViper(name, filetype string) *viper.Viper { - vp := viper.New() - // 配置文件 - vp.SetConfigName(name) - vp.SetConfigType(filetype) - for _, v := range paths { - vp.AddConfigPath(v) - } - - err := vp.ReadInConfig() - if err != nil { - panic(fmt.Errorf("fatal error config file: %w", err)) - } - return vp -} diff --git a/worldsrv/dbsaver.go b/worldsrv/dbsaver.go index d79f3ee..4c1b056 100644 --- a/worldsrv/dbsaver.go +++ b/worldsrv/dbsaver.go @@ -3,9 +3,8 @@ package main import ( "time" + "mongo.games.com/goserver/core/container/balancequeue" "mongo.games.com/goserver/core/module" - - "mongo.games.com/game/util/balancequeue" ) var DbSaveInst = &DbSaver{ diff --git a/worldsrv/playercache.go b/worldsrv/playercache.go index 4fb0c5b..2a186d4 100644 --- a/worldsrv/playercache.go +++ b/worldsrv/playercache.go @@ -6,11 +6,11 @@ import ( "mongo.games.com/goserver/core" "mongo.games.com/goserver/core/basic" + "mongo.games.com/goserver/core/container/balancequeue" "mongo.games.com/goserver/core/module" "mongo.games.com/goserver/core/task" "mongo.games.com/game/model" - "mongo.games.com/game/util/balancequeue" "mongo.games.com/game/worldsrv/internal" )