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.
77 lines
1.9 KiB
77 lines
1.9 KiB
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 |
|
} |
|
} |
|
}
|
|
|