log_topic.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // package log_topic -- элемент лога шины топика.
  2. package log_topic
  3. import (
  4. "fmt"
  5. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  6. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  8. )
  9. // LogTopic -- элемент лога шины.
  10. type LogTopic struct {
  11. topic *mKd.Topic // Топик, куда публиковать лог
  12. client mKs.IBusClient // С помощью чего публиковать лог
  13. }
  14. // NewLogTopic -- возвращает новый элемент лога.
  15. func NewLogTopic(topic *mKd.Topic, client mKs.IBusClient) mL0.IResult[*LogTopic] {
  16. mL0.Hassert(topic != nil, "NewLogTopic(): topic==nil")
  17. if client == nil {
  18. err := fmt.Errorf("NewLogTopic(): IBusClient==nil")
  19. return mL0.NewErr[*LogTopic](err)
  20. }
  21. sf := &LogTopic{
  22. topic: topic,
  23. client: client,
  24. }
  25. return mL0.NewRes(sf)
  26. }
  27. // Pub -- публикует сообщение в топик.
  28. func (sf *LogTopic) Pub(binMsg []byte) mL0.IResult[bool] {
  29. res := sf.client.Publish(sf.topic, binMsg)
  30. if res.IsErr() {
  31. err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
  32. return mL0.NewErr[bool](err)
  33. }
  34. return res
  35. }