@@ -0,0 +1,100 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user