repub_unix.go 776 Bytes
Newer Older
Jeromy's avatar
Jeromy committed
1 2 3 4 5
package ipns

import "time"

type Republisher struct {
Jeromy's avatar
Jeromy committed
6 7 8 9
	TimeoutLong  time.Duration
	TimeoutShort time.Duration
	Publish      chan struct{}
	node         *Node
Jeromy's avatar
Jeromy committed
10 11
}

Jeromy's avatar
Jeromy committed
12
func NewRepublisher(n *Node, tshort, tlong time.Duration) *Republisher {
Jeromy's avatar
Jeromy committed
13
	return &Republisher{
Jeromy's avatar
Jeromy committed
14 15 16 17
		TimeoutShort: tshort,
		TimeoutLong:  tlong,
		Publish:      make(chan struct{}),
		node:         n,
Jeromy's avatar
Jeromy committed
18 19 20 21 22
	}
}

func (np *Republisher) Run() {
	for _ = range np.Publish {
Jeromy's avatar
Jeromy committed
23 24
		quick := time.After(np.TimeoutShort)
		longer := time.After(np.TimeoutLong)
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38

	wait:
		select {
		case <-quick:
		case <-longer:
		case <-np.Publish:
			quick = time.After(np.TimeoutShort)
			goto wait
		}

		log.Info("Publishing Changes!")
		err := np.node.republishRoot()
		if err != nil {
			log.Critical("republishRoot error: %s", err)
Jeromy's avatar
Jeromy committed
39
		}
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
40

Jeromy's avatar
Jeromy committed
41 42
	}
}