139 lines
3.6 KiB
Go
139 lines
3.6 KiB
Go
package space
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
"time"
|
|
|
|
"go-common/app/interface/main/app-interface/conf"
|
|
accdao "go-common/app/interface/main/app-interface/dao/account"
|
|
arcdao "go-common/app/interface/main/app-interface/dao/archive"
|
|
artdao "go-common/app/interface/main/app-interface/dao/article"
|
|
audiodao "go-common/app/interface/main/app-interface/dao/audio"
|
|
bgmdao "go-common/app/interface/main/app-interface/dao/bangumi"
|
|
bplusdao "go-common/app/interface/main/app-interface/dao/bplus"
|
|
coindao "go-common/app/interface/main/app-interface/dao/coin"
|
|
commdao "go-common/app/interface/main/app-interface/dao/community"
|
|
elecdao "go-common/app/interface/main/app-interface/dao/elec"
|
|
favdao "go-common/app/interface/main/app-interface/dao/favorite"
|
|
livedao "go-common/app/interface/main/app-interface/dao/live"
|
|
memberdao "go-common/app/interface/main/app-interface/dao/member"
|
|
paydao "go-common/app/interface/main/app-interface/dao/pay"
|
|
reldao "go-common/app/interface/main/app-interface/dao/relation"
|
|
srchdao "go-common/app/interface/main/app-interface/dao/search"
|
|
shopdao "go-common/app/interface/main/app-interface/dao/shop"
|
|
spcdao "go-common/app/interface/main/app-interface/dao/space"
|
|
tagdao "go-common/app/interface/main/app-interface/dao/tag"
|
|
thumbupdao "go-common/app/interface/main/app-interface/dao/thumbup"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
// Service is space service
|
|
type Service struct {
|
|
c *conf.Config
|
|
arcDao *arcdao.Dao
|
|
spcDao *spcdao.Dao
|
|
accDao *accdao.Dao
|
|
coinDao *coindao.Dao
|
|
commDao *commdao.Dao
|
|
srchDao *srchdao.Dao
|
|
favDao *favdao.Dao
|
|
bgmDao *bgmdao.Dao
|
|
tagDao *tagdao.Dao
|
|
liveDao *livedao.Dao
|
|
elecDao *elecdao.Dao
|
|
artDao *artdao.Dao
|
|
audioDao *audiodao.Dao
|
|
relDao *reldao.Dao
|
|
bplusDao *bplusdao.Dao
|
|
shopDao *shopdao.Dao
|
|
thumbupDao *thumbupdao.Dao
|
|
payDao *paydao.Dao
|
|
memberDao *memberdao.Dao
|
|
// chan
|
|
mCh chan func()
|
|
tick time.Duration
|
|
BlackList map[int64]struct{}
|
|
}
|
|
|
|
// New new space
|
|
func New(c *conf.Config) (s *Service) {
|
|
s = &Service{
|
|
c: c,
|
|
arcDao: arcdao.New(c),
|
|
spcDao: spcdao.New(c),
|
|
accDao: accdao.New(c),
|
|
coinDao: coindao.New(c),
|
|
commDao: commdao.New(c),
|
|
srchDao: srchdao.New(c),
|
|
favDao: favdao.New(c),
|
|
bgmDao: bgmdao.New(c),
|
|
tagDao: tagdao.New(c),
|
|
liveDao: livedao.New(c),
|
|
elecDao: elecdao.New(c),
|
|
artDao: artdao.New(c),
|
|
audioDao: audiodao.New(c),
|
|
relDao: reldao.New(c),
|
|
bplusDao: bplusdao.New(c),
|
|
shopDao: shopdao.New(c),
|
|
thumbupDao: thumbupdao.New(c),
|
|
payDao: paydao.New(c),
|
|
memberDao: memberdao.New(c),
|
|
// mc proc
|
|
mCh: make(chan func(), 1024),
|
|
tick: time.Duration(c.Tick),
|
|
BlackList: make(map[int64]struct{}),
|
|
}
|
|
// video db
|
|
for i := 0; i < runtime.NumCPU(); i++ {
|
|
go s.cacheproc()
|
|
}
|
|
if c != nil && c.Space != nil {
|
|
for _, mid := range c.Space.ForbidMid {
|
|
s.BlackList[mid] = struct{}{}
|
|
}
|
|
}
|
|
s.loadBlacklist()
|
|
go s.blacklistproc()
|
|
return
|
|
}
|
|
|
|
// addCache add archive to mc or redis
|
|
func (s *Service) addCache(f func()) {
|
|
select {
|
|
case s.mCh <- f:
|
|
default:
|
|
log.Warn("cacheproc chan full")
|
|
}
|
|
}
|
|
|
|
// cacheproc write memcache and stat redis use goroutine
|
|
func (s *Service) cacheproc() {
|
|
for {
|
|
f := <-s.mCh
|
|
f()
|
|
}
|
|
}
|
|
|
|
// Ping check server ok
|
|
func (s *Service) Ping(c context.Context) (err error) {
|
|
return
|
|
}
|
|
|
|
// loadBlacklist
|
|
func (s *Service) loadBlacklist() {
|
|
list, err := s.spcDao.Blacklist(context.Background())
|
|
if err != nil {
|
|
log.Error("%+v", err)
|
|
return
|
|
}
|
|
s.BlackList = list
|
|
}
|
|
|
|
func (s *Service) blacklistproc() {
|
|
for {
|
|
time.Sleep(s.tick)
|
|
s.loadBlacklist()
|
|
}
|
|
}
|