Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

101 lines
2.7 KiB
Go

package activityclient
import (
"encoding/json"
"sync"
"time"
"91porn-server/app/appg"
"91porn-server/common"
"91porn-server/common/httputil"
"91porn-server/common/log"
)
// HongbaoActivity 与 activity-public-server activityMod.HongbaoActivity 保持一致
type HongbaoActivity struct {
ID string `json:"id"`
Name string `json:"name"`
StartTime time.Time `json:"startTime"`
EndTime time.Time `json:"endTime"`
TriggerTimes []string `json:"triggerTimes"`
SessionDuration int `json:"sessionDuration"`
SessionClickLimit int `json:"sessionClickLimit"`
AppIds []string `json:"appIds"`
Enabled bool `json:"enabled"`
}
// UpcomingSessionItem 进行中/即将开启的场次
type UpcomingSessionItem struct {
SessionId string `json:"sessionId,omitempty"`
StartTime time.Time `json:"startTime"`
EndTime time.Time `json:"endTime"`
Status string `json:"status"` // active=进行中, upcoming=未来即将开启
}
// HongbaoUpcomingResp 拉取响应内容
type HongbaoUpcomingResp struct {
Activity *HongbaoActivity `json:"activity"`
List []UpcomingSessionItem `json:"list"`
}
type hongbaoApiResp struct {
Code int `json:"code"`
Data HongbaoUpcomingResp `json:"data"`
}
var (
cachedHongbao HongbaoUpcomingResp
cachedHongbaoMu sync.RWMutex
)
// GetHongbaoUpcoming 获取缓存的红包场次
func GetHongbaoUpcoming() HongbaoUpcomingResp {
cachedHongbaoMu.RLock()
defer cachedHongbaoMu.RUnlock()
return cachedHongbao
}
// startHongbaoSync 启动定时拉取红包场次(每10秒)
func startHongbaoSync() {
fetchHongbaoUpcoming()
common.Go(func() {
ticker := time.NewTicker(10 * time.Second)
defer ticker.Stop()
for range ticker.C {
fetchHongbaoUpcoming()
}
})
}
// fetchHongbaoUpcoming 调活动服 /api/app/hongbao/upcoming
func fetchHongbaoUpcoming() {
conf := appg.Conf.ActivityServer
if conf.ApiUrl == "" || conf.AppId == "" {
return
}
const path = "/api/app/hongbao/upcoming"
rawQuery := "appId=" + conf.AppId
url := conf.ApiUrl + path + "?" + rawQuery
headers := BuildSvcHeaders(conf.AppId, conf.SecretKey, "GET", path, rawQuery, nil)
_, body, err := httputil.DefaultClientGetBytes(url, headers)
if err != nil {
log.Error("活动服-拉取红包场次失败", log.Any("url", url), log.E(err))
return
}
var resp hongbaoApiResp
if err := json.Unmarshal(body, &resp); err != nil {
log.Error("活动服-解析红包场次失败", log.Any("body", string(body)), log.E(err))
return
}
if resp.Code != 200 {
log.Warn("活动服-红包场次返回非成功状态", log.Any("code", resp.Code))
return
}
cachedHongbaoMu.Lock()
cachedHongbao = resp.Data
cachedHongbaoMu.Unlock()
}