game2006go/server/gamesapi/service/sapi_forward.go
aozhiwei a82677e4df 1
2024-07-24 18:21:25 +08:00

102 lines
1.8 KiB
Go

package service
import (
"q5"
"sync"
"mt"
"sync/atomic"
)
type sApiForward struct {
userCache []*SApiForwardLockCache
}
type SApiForwardLockCache struct {
lock *sync.Mutex
userHash *map[string]*SApiForwardLock
}
type SApiForwardLock struct {
accountId string
lockTimes int32
lock *sync.Mutex
}
func (this *sApiForward) init() {
q5.NewSlice(&this.userCache, 1024, 1024)
for i := 0; i < len(this.userCache); i++ {
p := new(SApiForwardLockCache)
p.lock = new(sync.Mutex)
p.userHash = new(map[string]*SApiForwardLock)
this.userCache[i] = p
}
}
func (this *sApiForward) unInit() {
}
func (this *sApiForward) AcquireLock(accountId string) *SApiForwardLock {
crc32 := q5.Crc32(accountId)
c := this.userCache[int64(crc32) % int64(len(this.userCache))]
u := this.getOrCreate(c, accountId)
if atomic.AddInt32(&u.lockTimes, 1) > mt.Table.Config.GetMaxConcurrentNum() {
atomic.AddInt32(&u.lockTimes, -1)
return nil
}
u.lock.Lock()
return u
}
func (this *sApiForward) ReleaseLock(l *SApiForwardLock) {
l.lock.Unlock()
atomic.AddInt32(&l.lockTimes, -1)
}
func (this *sApiForward) IncInvalidSessionTimes() {
}
func (this *sApiForward) IncTotalTimes() {
}
func (this *sApiForward) IncGetTimes() {
}
func (this *sApiForward) IncPostTimes() {
}
func (this *sApiForward) IncCreateErrTimes() {
}
func (this *sApiForward) IncDoErrTimes() {
}
func (this *sApiForward) IncOkTimes() {
}
func (this *sApiForward) IncReadRspErrTimes() {
}
func (this *sApiForward) UpdateCostTime(costTime int64) {
}
func (this *sApiForward) getOrCreate(c *SApiForwardLockCache, accountId string) *SApiForwardLock {
c.lock.Lock()
defer c.lock.Lock()
if u, ok := (*c.userHash)[accountId]; ok {
return u
} else {
u = new(SApiForwardLock)
u.accountId = accountId
return u
}
}