// package topic_live_time -- время жизни топика // // После истечения времени -- топик будет уничтожен package topic_live_time import ( "fmt" "sync" "p78git.ddns.net/svi/gobus/pkg/alias" ) // TopicLiveTime -- время жизни топика type TopicLiveTime struct { val alias.TopicLiveTime // Фактическое оставшееся время топика в секундах block sync.RWMutex } // NewTopicLiveTime -- возвращает новое время жизни топика func NewTopicLiveTime(val alias.TopicLiveTime) (*TopicLiveTime, error) { if val < 10 { return nil, fmt.Errorf("NewTopicLiveTime(): val(%v)<10", val) } sf := &TopicLiveTime{ val: val, } return sf, nil } // Get -- возвращает хранимое значение func (sf *TopicLiveTime) Get() alias.TopicLiveTime { sf.block.RLock() defer sf.block.RUnlock() return sf.val } // Down -- уменьшает значение времени лайф-тайма на заданное число секунд func (sf *TopicLiveTime) Down(val alias.TopicLiveTime) bool { sf.block.Lock() defer sf.block.Unlock() sf.val -= val return sf.val <= 0 }