first commit
This commit is contained in:
+120
@@ -0,0 +1,120 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
"xiawan/wx/clientsdk/baseinfo"
|
||||
|
||||
"github.com/gogf/gf/os/gcache"
|
||||
)
|
||||
|
||||
var cache *gcache.Cache
|
||||
|
||||
// 添加一个持久缓存,用于保存最后的登录状态
|
||||
var lastLoginStatusCache *gcache.Cache
|
||||
|
||||
// 添加短连接状态缓存
|
||||
var shortLinkStatusCache *gcache.Cache
|
||||
|
||||
// ShortLinkStatus 短连接状态结构
|
||||
type ShortLinkStatus struct {
|
||||
IsEnabled bool
|
||||
}
|
||||
|
||||
func init() {
|
||||
cache = gcache.New()
|
||||
lastLoginStatusCache = gcache.New()
|
||||
shortLinkStatusCache = gcache.New()
|
||||
}
|
||||
|
||||
// AddCheckStatusCache 添加扫码状态
|
||||
func AddCheckStatusCache(queryKey string, val *baseinfo.CheckLoginQrCodeResult) {
|
||||
_ = PublishSyncMsgCheckLogin(queryKey, val)
|
||||
|
||||
isContains := cache.Contains(queryKey)
|
||||
if !isContains {
|
||||
cache.Set(queryKey, val, time.Second*200)
|
||||
// 当扫码状态为2(扫码成功)时,持久化保存状态
|
||||
if val.GetState() == 2 {
|
||||
SaveLastLoginStatus(queryKey, val)
|
||||
}
|
||||
return
|
||||
} else {
|
||||
// 不要先删除再添加,这可能导致竞态条件
|
||||
// 先设置新的,再删除旧的(如果需要)
|
||||
tempVal := cache.Get(queryKey)
|
||||
cache.Set(queryKey, val, time.Second*200)
|
||||
|
||||
// 当扫码状态为2(扫码成功)时,持久化保存状态
|
||||
if val.GetState() == 2 {
|
||||
SaveLastLoginStatus(queryKey, val)
|
||||
}
|
||||
|
||||
// 如果旧值和新值相同,不需要进一步处理
|
||||
if tempVal == val {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if val.Ret == -3003 {
|
||||
cache.Set(queryKey, val, time.Second*1000)
|
||||
return
|
||||
}
|
||||
//扫码时间到
|
||||
if val.GetEffectiveTime() == 0 {
|
||||
//checkStatusCache.Remove(queryKey)
|
||||
return
|
||||
}
|
||||
cache.Set(queryKey, val, time.Second*time.Duration(val.GetEffectiveTime()))
|
||||
}
|
||||
|
||||
// GetCheckStatusCache 获取扫码状态
|
||||
func GetCheckStatusCache(queryKey string) *baseinfo.CheckLoginQrCodeResult {
|
||||
isContains := cache.Contains(queryKey)
|
||||
if !isContains {
|
||||
return nil
|
||||
}
|
||||
return cache.Get(queryKey).(*baseinfo.CheckLoginQrCodeResult)
|
||||
}
|
||||
|
||||
// ClearCheckStatusCache 清除指定queryKey的状态缓存
|
||||
func ClearCheckStatusCache(queryKey string) {
|
||||
cache.Remove(queryKey)
|
||||
}
|
||||
|
||||
// 获取
|
||||
func GetCaChe() *gcache.Cache {
|
||||
return cache
|
||||
}
|
||||
|
||||
// SaveLastLoginStatus 持久化保存最后的登录状态
|
||||
func SaveLastLoginStatus(queryKey string, val *baseinfo.CheckLoginQrCodeResult) {
|
||||
// 使用更长的过期时间,确保在整个登录过程中状态可用
|
||||
lastLoginStatusCache.Set(queryKey, val, time.Hour*24)
|
||||
}
|
||||
|
||||
// GetLastLoginStatus 获取最后保存的登录状态
|
||||
func GetLastLoginStatus(queryKey string) *baseinfo.CheckLoginQrCodeResult {
|
||||
isContains := lastLoginStatusCache.Contains(queryKey)
|
||||
if !isContains {
|
||||
return nil
|
||||
}
|
||||
return lastLoginStatusCache.Get(queryKey).(*baseinfo.CheckLoginQrCodeResult)
|
||||
}
|
||||
|
||||
// SaveShortLinkStatus 保存短链接状态
|
||||
func SaveShortLinkStatus(queryKey string, isEnabled bool) {
|
||||
status := &ShortLinkStatus{
|
||||
IsEnabled: isEnabled,
|
||||
}
|
||||
// 使用长期缓存,确保在服务重启后仍能恢复短连接状态
|
||||
shortLinkStatusCache.Set(queryKey, status, time.Hour*24*30) // 保存30天
|
||||
}
|
||||
|
||||
// GetShortLinkStatus 获取短链接状态
|
||||
func GetShortLinkStatus(queryKey string) *ShortLinkStatus {
|
||||
isContains := shortLinkStatusCache.Contains(queryKey)
|
||||
if !isContains {
|
||||
return nil
|
||||
}
|
||||
return shortLinkStatusCache.Get(queryKey).(*ShortLinkStatus)
|
||||
}
|
||||
Reference in New Issue
Block a user