go-common/app/interface/main/push-archive/service/setting.go

78 lines
1.9 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"time"
"go-common/app/interface/main/push-archive/model"
pb "go-common/app/service/main/push/api/grpc/v1"
"go-common/library/log"
)
// Setting gets user's archive-result setting.
func (s *Service) Setting(c context.Context, mid int64) (st *model.Setting, err error) {
st, err = s.dao.Setting(c, mid)
if err != nil {
return
}
if st == nil {
st = &model.Setting{Type: model.PushTypeSpecial} // 如果用户还未上传配置,则默认为特殊关注
}
return
}
// SetSetting saves user's archive-result setting.
func (s *Service) SetSetting(c context.Context, mid int64, st *model.Setting) (err error) {
err = s.dao.SetSetting(c, mid, st)
if err == nil {
set := &pb.SetSettingRequest{
Mid: mid,
Type: 1,
Value: int32(st.Type),
}
s.settingCh <- set
}
return
}
func (s *Service) setSettingProc() (err error) {
defer func() {
if msg := recover(); msg != nil {
log.Error("setSettingProc got panic(%+v)", msg)
}
}()
for {
time.Sleep(time.Millisecond * 200)
set, open := <-s.settingCh
if !open {
log.Error("setSettingProc settingCh is closed")
return
}
// before send rpc, check db value with new value, if diff, then rpc is later than another update
dbSet, err := s.dao.Setting(context.TODO(), set.Mid)
if err != nil {
log.Error("setSettingProc s.dao.Setting error(%v) set(%+v)", err, set)
s.settingCh <- set
continue
}
if dbSet == nil || dbSet.Type != int(set.Value) {
log.Info("setSettingProc push setting value diff, db(%+v) rpc(%+v)", dbSet, set)
continue
}
// rpc中0-关闭1-开启
var tp int32
if set.Value == model.PushTypeSpecial || set.Value == model.PushTypeAttention {
tp = 1
}
set.Value = tp
if _, err := s.pushRPC.SetSetting(context.TODO(), set); err != nil {
log.Error("s.pushRPC.SetSetting error(%v) set(%+v)", err, set)
s.settingCh <- set
}
}
}