go-common/app/job/live/xroom-feed/internal/service/service.go
2019-04-22 18:49:16 +08:00

81 lines
1.9 KiB
Go

package service
import (
"context"
"sync/atomic"
"time"
"go-common/library/log"
"go-common/library/net/rpc/liverpc"
"go-common/library/net/rpc/warden"
xtime "go-common/library/time"
"go-common/app/job/live/xroom-feed/internal/dao"
daoAnchor "go-common/app/service/live/dao-anchor/api/grpc/v1"
roomClient "go-common/app/service/live/room/api/liverpc"
"go-common/library/conf/paladin"
)
// Service service.
type Service struct {
ac *paladin.Map
dao *dao.Dao
daoAnchor daoAnchor.DaoAnchorClient
roomService *roomClient.Client
ruleConf atomic.Value
indexBlackList atomic.Value
}
// New new a service and return.
func New() (s *Service) {
var ac = new(paladin.TOML)
if err := paladin.Watch("application.toml", ac); err != nil {
panic(err)
}
s = &Service{
ac: ac,
dao: dao.New(),
}
wdConf := new(warden.ClientConfig)
wdConf.Timeout = xtime.Duration(time.Second * 10)
err := s.ac.Get("daoAnchorClient").UnmarshalTOML(wdConf)
if err != nil {
log.Error("[service]get daoAnchorClient warden error:%+v", err)
wdConf.Dial = xtime.Duration(time.Millisecond * 100)
wdConf.Timeout = xtime.Duration(time.Second * 10)
}
conn, err := daoAnchor.NewClient(wdConf) // 目前传空,如果需要配置
if err != nil {
panic(err)
}
s.daoAnchor = conn
roomClientConf := new(liverpc.ClientConfig)
rerr := s.ac.Get("roomClient").UnmarshalTOML(roomClientConf)
if rerr != nil {
log.Error("[service]get roomClient conf error:%+v", rerr)
roomClientConf.ConnTimeout = xtime.Duration(time.Millisecond * 50)
roomClientConf.AppID = "live.room"
}
s.roomService = roomClient.New(roomClientConf)
s.loadConfFromDb()
s.loadBlackList()
go s.reloadConfFromDb()
go s.reloadRecList()
go s.blackListProc()
return s
}
// Ping ping the resource.
func (s *Service) Ping(ctx context.Context) (err error) {
return s.dao.Ping(ctx)
}
// Close close the resource.
func (s *Service) Close() {
s.dao.Close()
}