// package serv_public -- сервер запросов на публикацию package serv_public import ( "context" "fmt" "log" "p78git.ddns.net/svi/gobus/pkg/alias" "p78git.ddns.net/svi/gobus/pkg/net/netapi" "p78git.ddns.net/svi/gobus/pkg/types" ) // ServPublic -- отвечает на запросы публикации type ServPublic struct { serv types.IService dictTopic types.IDictTopic } // NewServPublic -- возвращает новый публикатор func NewServPublic(serv types.IService) (*ServPublic, error) { log.Printf("NewServPublic()\n") if serv == nil { return nil, fmt.Errorf("NewServPublic(): IService==nil") } sf := &ServPublic{ serv: serv, dictTopic: serv.DictTopic(), } return sf, nil } // Public -- публикация сообщения в топик func (sf *ServPublic) Public(ctx context.Context, req *netapi.PublicRequest) (*netapi.DefaultResponse, error) { topic := sf.dictTopic.Get(alias.TopicName(req.Topic)) if topic == nil { sf.dictTopic.Add(alias.TopicName(req.Topic)) topic = sf.dictTopic.Get(alias.TopicName(req.Topic)) } msg := &netapi.TopicMsg{ Source: req.Source, Topic: req.Topic, Msg: req.Msg, } topic.Set(msg) return &netapi.DefaultResponse{}, nil }