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.
138 lines
3.6 KiB
138 lines
3.6 KiB
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() |
|
} |
|
}
|
|
|