| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // 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
- }
|