37 lines
704 B
Go
37 lines
704 B
Go
|
package service
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"go-common/app/infra/notify/model"
|
||
|
"go-common/app/infra/notify/notify"
|
||
|
"go-common/library/ecode"
|
||
|
)
|
||
|
|
||
|
// Pub pub message.
|
||
|
func (s *Service) Pub(c context.Context, arg *model.ArgPub) (err error) {
|
||
|
pc, ok := s.pubConfs[key(arg.Group, arg.Topic)]
|
||
|
if !ok {
|
||
|
err = ecode.AccessDenied
|
||
|
return
|
||
|
}
|
||
|
s.plock.RLock()
|
||
|
pub, ok := s.pubs[key(arg.Group, arg.Topic)]
|
||
|
s.plock.RUnlock()
|
||
|
if !ok {
|
||
|
pub, err = notify.NewPub(pc, s.c)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
s.plock.Lock()
|
||
|
s.pubs[key(arg.Group, arg.Topic)] = pub
|
||
|
s.plock.Unlock()
|
||
|
}
|
||
|
if !pub.Auth(arg.AppSecret) {
|
||
|
err = ecode.AccessDenied
|
||
|
return
|
||
|
}
|
||
|
err = pub.Send([]byte(arg.Key), []byte(arg.Msg))
|
||
|
return
|
||
|
}
|