Browse Source

offline logic design

master
tangmingyou 4 years ago
parent
commit
e4fb4e3314
  1. 25
      cmd/main.go
  2. 9
      data/config.toml
  3. 11
      tool/collect/delay_queue.go

25
cmd/main.go

@ -30,20 +30,37 @@ func main() {
//wait.Add(1) //wait.Add(1)
// //
//times := 100 //times := 100
//counter := atomic.Int32{}
//counter.Store(int32(times))
// //
//q := collect.NewDelayQueue(func(data int, now time.Time) { //q := collect.NewDelayQueue(func(data func(time.Time), now time.Time) {
// fmt.Println(data, now) // // fmt.Println(data, now)
// if data == times-1 { // data(now)
// counter.Add(-1)
// if int(counter.Load()) <= 0 {
// wait.Done() // wait.Done()
// } // }
//
// if counter.Load() == 62 {
// panic("test error!!!")
// }
//}) //})
//for i := 0; i < times; i++ { //for i := 0; i < times; i++ {
// key := q.Add(time.Second*time.Duration(i), i) // key := q.Add(time.Second*time.Duration(i), func(idx int) func(t time.Time) {
// return func(t time.Time) {
// fmt.Println("handler:", idx, t)
// }
// }(i))
// if i%5 == 0 { // if i%5 == 0 {
// go func(k int64, idx int) { // go func(k int64, idx int) {
// <-time.After(time.Second * 3) // <-time.After(time.Second * 3)
// q.Cancel(k) // q.Cancel(k)
// fmt.Println("cancel", idx, k) // fmt.Println("cancel", idx, k)
//
// counter.Add(-1)
// if int(counter.Load()) <= 0 {
// wait.Done()
// }
// }(key, i) // }(key, i)
// } // }
//} //}

9
data/config.toml

@ -23,5 +23,10 @@ dbPath = "data/texas-poker.db"
[game] [game]
# 新用户赠送筹码 # 新用户赠送筹码
GiftChip = 10000 giftChip = 10000
AvatarPath = "data/avatar/" avatarPath = "data/avatar/"
[game.offline] # 玩家掉线配置
# 在房间中
outRoom = 15

11
tool/collect/delay_queue.go

@ -1,7 +1,9 @@
package collect package collect
import ( import (
"fmt"
"github.com/emirpasic/gods/maps/treemap" "github.com/emirpasic/gods/maps/treemap"
"runtime/debug"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -36,7 +38,16 @@ func NewDelayQueue[T any](handler func(data T, now time.Time)) *DelayQueue[T] {
continue continue
} }
for _, data := range values { for _, data := range values {
func() {
defer func() {
if err := recover(); err != nil {
fmt.Printf("consumer handler error: %v \n", err)
// 输出堆栈信息
fmt.Println(string(debug.Stack()))
}
}()
q.handler(data, time.Now()) q.handler(data, time.Now())
}()
} }
} }
}() }()

Loading…
Cancel
Save