You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.4 KiB
152 lines
4.4 KiB
package channel |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/interface/main/app-card/model/card/live" |
|
"go-common/app/interface/main/app-card/model/card/operate" |
|
"go-common/app/interface/main/app-channel/conf" |
|
accdao "go-common/app/interface/main/app-channel/dao/account" |
|
actdao "go-common/app/interface/main/app-channel/dao/activity" |
|
arcdao "go-common/app/interface/main/app-channel/dao/archive" |
|
artdao "go-common/app/interface/main/app-channel/dao/article" |
|
audiodao "go-common/app/interface/main/app-channel/dao/audio" |
|
adtdao "go-common/app/interface/main/app-channel/dao/audit" |
|
bgmdao "go-common/app/interface/main/app-channel/dao/bangumi" |
|
carddao "go-common/app/interface/main/app-channel/dao/card" |
|
convergedao "go-common/app/interface/main/app-channel/dao/converge" |
|
gamedao "go-common/app/interface/main/app-channel/dao/game" |
|
livdao "go-common/app/interface/main/app-channel/dao/live" |
|
locdao "go-common/app/interface/main/app-channel/dao/location" |
|
rgdao "go-common/app/interface/main/app-channel/dao/region" |
|
reldao "go-common/app/interface/main/app-channel/dao/relation" |
|
shopdao "go-common/app/interface/main/app-channel/dao/shopping" |
|
specialdao "go-common/app/interface/main/app-channel/dao/special" |
|
tabdao "go-common/app/interface/main/app-channel/dao/tab" |
|
tagdao "go-common/app/interface/main/app-channel/dao/tag" |
|
"go-common/app/interface/main/app-channel/model/card" |
|
"go-common/app/interface/main/app-channel/model/channel" |
|
"go-common/app/interface/main/app-channel/model/tab" |
|
) |
|
|
|
// Service channel |
|
type Service struct { |
|
c *conf.Config |
|
// dao |
|
acc *accdao.Dao |
|
arc *arcdao.Dao |
|
act *actdao.Dao |
|
art *artdao.Dao |
|
adt *adtdao.Dao |
|
bgm *bgmdao.Dao |
|
audio *audiodao.Dao |
|
rel *reldao.Dao |
|
sp *shopdao.Dao |
|
tg *tagdao.Dao |
|
cd *carddao.Dao |
|
ce *convergedao.Dao |
|
g *gamedao.Dao |
|
sl *specialdao.Dao |
|
rg *rgdao.Dao |
|
lv *livdao.Dao |
|
loc *locdao.Dao |
|
tab *tabdao.Dao |
|
// tick |
|
tick time.Duration |
|
// cache |
|
cardCache map[int64][]*card.Card |
|
cardPlatCache map[string][]*card.CardPlat |
|
upCardCache map[int64]*operate.Follow |
|
convergeCardCache map[int64]*operate.Converge |
|
gameDownloadCache map[int64]*operate.Download |
|
specialCardCache map[int64]*operate.Special |
|
liveCardCache map[int64][]*live.Card |
|
cardSetCache map[int64]*operate.CardSet |
|
menuCache map[int64][]*tab.Menu |
|
// new region list cache |
|
cachelist map[string][]*channel.Region |
|
limitCache map[int64][]*channel.RegionLimit |
|
configCache map[int64][]*channel.RegionConfig |
|
// audit cache |
|
auditCache map[string]map[int]struct{} // audit mobi_app builds |
|
// infoc |
|
logCh chan interface{} |
|
} |
|
|
|
// New channel |
|
func New(c *conf.Config) (s *Service) { |
|
s = &Service{ |
|
c: c, |
|
arc: arcdao.New(c), |
|
acc: accdao.New(c), |
|
adt: adtdao.New(c), |
|
art: artdao.New(c), |
|
act: actdao.New(c), |
|
bgm: bgmdao.New(c), |
|
sp: shopdao.New(c), |
|
tg: tagdao.New(c), |
|
cd: carddao.New(c), |
|
ce: convergedao.New(c), |
|
g: gamedao.New(c), |
|
sl: specialdao.New(c), |
|
rg: rgdao.New(c), |
|
audio: audiodao.New(c), |
|
lv: livdao.New(c), |
|
rel: reldao.New(c), |
|
loc: locdao.New(c), |
|
tab: tabdao.New(c), |
|
// tick |
|
tick: time.Duration(c.Tick), |
|
// cache |
|
cardCache: map[int64][]*card.Card{}, |
|
cardPlatCache: map[string][]*card.CardPlat{}, |
|
upCardCache: map[int64]*operate.Follow{}, |
|
convergeCardCache: map[int64]*operate.Converge{}, |
|
gameDownloadCache: map[int64]*operate.Download{}, |
|
specialCardCache: map[int64]*operate.Special{}, |
|
cachelist: map[string][]*channel.Region{}, |
|
limitCache: map[int64][]*channel.RegionLimit{}, |
|
configCache: map[int64][]*channel.RegionConfig{}, |
|
liveCardCache: map[int64][]*live.Card{}, |
|
cardSetCache: map[int64]*operate.CardSet{}, |
|
menuCache: map[int64][]*tab.Menu{}, |
|
// audit cache |
|
auditCache: map[string]map[int]struct{}{}, |
|
// infoc |
|
logCh: make(chan interface{}, 1024), |
|
} |
|
s.loadCache() |
|
go s.loadCacheproc() |
|
go s.infocproc() |
|
return |
|
} |
|
|
|
func (s *Service) loadCacheproc() { |
|
for { |
|
time.Sleep(s.tick) |
|
s.loadCache() |
|
} |
|
} |
|
|
|
func (s *Service) loadCache() { |
|
now := time.Now() |
|
s.loadAuditCache() |
|
s.loadRegionlist() |
|
// card |
|
s.loadCardCache(now) |
|
s.loadConvergeCache() |
|
s.loadSpecialCache() |
|
s.loadLiveCardCache() |
|
s.loadGameDownloadCache() |
|
s.loadCardSetCache() |
|
s.loadMenusCache(now) |
|
} |
|
|
|
// Ping is check server ping. |
|
func (s *Service) Ping(c context.Context) (err error) { |
|
if err = s.cd.PingDB(c); err != nil { |
|
return |
|
} |
|
return |
|
}
|
|
|