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.
36 lines
704 B
36 lines
704 B
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 |
|
}
|
|
|