serv_public.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // package serv_public -- сервер запросов на публикацию
  2. package serv_public
  3. import (
  4. "context"
  5. "fmt"
  6. "log"
  7. "p78git.ddns.net/svi/gobus/api/netapi"
  8. "p78git.ddns.net/svi/gobus/pkg/alias"
  9. "p78git.ddns.net/svi/gobus/pkg/types"
  10. )
  11. // ServPublic -- отвечает на запросы публикации
  12. type ServPublic struct {
  13. serv types.IService
  14. dictTopic types.IDictTopic
  15. }
  16. // NewServPublic -- возвращает новый публикатор
  17. func NewServPublic(serv types.IService) (*ServPublic, error) {
  18. log.Printf("NewServPublic()\n")
  19. if serv == nil {
  20. return nil, fmt.Errorf("NewServPublic(): IService==nil")
  21. }
  22. sf := &ServPublic{
  23. serv: serv,
  24. dictTopic: serv.DictTopic(),
  25. }
  26. return sf, nil
  27. }
  28. // Public -- публикация сообщения в топик
  29. func (sf *ServPublic) Public(ctx context.Context, req *netapi.PublicRequest) (*netapi.DefaultResponse, error) {
  30. topic := sf.dictTopic.Get(alias.TopicName(req.Topic))
  31. if topic == nil {
  32. sf.dictTopic.Add(alias.TopicName(req.Topic))
  33. topic = sf.dictTopic.Get(alias.TopicName(req.Topic))
  34. }
  35. msg := &netapi.TopicMsg{
  36. Source: req.Source,
  37. Topic: req.Topic,
  38. Msg: req.Msg,
  39. }
  40. topic.Set(msg)
  41. return &netapi.DefaultResponse{}, nil
  42. }