Create & Init Project...
This commit is contained in:
138
app/interface/main/app-interface/service/space/service.go
Normal file
138
app/interface/main/app-interface/service/space/service.go
Normal file
@ -0,0 +1,138 @@
|
||||
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()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user