topic_live_time.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // package topic_live_time -- время жизни топика
  2. //
  3. // После истечения времени -- топик будет уничтожен
  4. package topic_live_time
  5. import (
  6. "fmt"
  7. "sync"
  8. "p78git.ddns.net/svi/gobus/pkg/alias"
  9. )
  10. // TopicLiveTime -- время жизни топика
  11. type TopicLiveTime struct {
  12. val alias.TopicLiveTime // Фактическое оставшееся время топика в секундах
  13. block sync.RWMutex
  14. }
  15. // NewTopicLiveTime -- возвращает новое время жизни топика
  16. func NewTopicLiveTime(val alias.TopicLiveTime) (*TopicLiveTime, error) {
  17. if val < 10 {
  18. return nil, fmt.Errorf("NewTopicLiveTime(): val(%v)<10", val)
  19. }
  20. sf := &TopicLiveTime{
  21. val: val,
  22. }
  23. return sf, nil
  24. }
  25. // Get -- возвращает хранимое значение
  26. func (sf *TopicLiveTime) Get() alias.TopicLiveTime {
  27. sf.block.RLock()
  28. defer sf.block.RUnlock()
  29. return sf.val
  30. }
  31. // Down -- уменьшает значение времени лайф-тайма на заданное число секунд
  32. func (sf *TopicLiveTime) Down(val alias.TopicLiveTime) bool {
  33. sf.block.Lock()
  34. defer sf.block.Unlock()
  35. sf.val -= val
  36. return sf.val <= 0
  37. }