arnaucube
arnaucube/go-dvotePublic Self-hosted repository
go-dvote/cmd/relay/relay.go
cmd/relay/relay.goRaw
 1package main
 2
 3import (
 4	"fmt"
 5	"time"
 6	"encoding/gob"
 7	"bytes"
 8	"os"
 9	"flag"
10
11	"github.com/vocdoni/go-dvote/batch"
12	"github.com/vocdoni/go-dvote/net"
13	"github.com/vocdoni/go-dvote/db"
14	"github.com/vocdoni/go-dvote/data"
15	"github.com/vocdoni/go-dvote/chain"
16)
17
18var dbPath = "~/.dvote/relay.db"
19var batchSeconds = 10 //seconds
20var batchSize = 3 //packets
21
22var err error
23var batchTimer *time.Ticker
24var batchSignal chan bool
25var signal bool
26var transportType net.TransportID
27
28
29func main() {
30
31	db, err := db.NewLevelDbStorage(dbPath, false)
32	if err != nil {
33		panic(err)
34	}
35	defer db.Close()
36
37	batch.Setup(db)
38
39	//gather transport type flag
40	var transportIDString string
41	flag.StringVar(&transportIDString, "transport", "PubSub", "Transport must be one of: PubSub, HTTP")
42	flag.Parse()
43	transportType = net.TransportIDFromString(transportIDString)
44
45
46	batchTimer = time.NewTicker(time.Second * time.Duration(batchSeconds))
47	batchSignal = make(chan bool)
48
49	batch.BatchSignal = batchSignal
50	batch.BatchSize = batchSize
51
52	node, err := chain.Init()
53	node.Start()
54
55	transport, err := net.Init(transportType)
56	if err != nil {
57		os.Exit(1)
58	}
59	fmt.Println("Entering main loop")
60	go transport.Listen()
61	for {
62		select {
63		case <- batchTimer.C:
64			//fmt.Println("Timer triggered")
65//			//fmt.Println(batch.Create())
66			//replace with chain link
67		case signal := <-batchSignal:
68			if signal == true {
69				fmt.Println("Signal triggered")
70				ns, bs := batch.Fetch()
71				buf := &bytes.Buffer{}
72				gob.NewEncoder(buf).Encode(bs)
73				bb := buf.Bytes()
74				cid := data.Publish(bb)
75				data.Pin(cid)
76				fmt.Printf("Batch published at: %s \n", cid)
77				node.LinkBatch([]byte(cid))
78				// add to chain
79				// announce to pubsub
80				//fmt.Println("Nullifiers:")
81				//fmt.Println(n)
82				//fmt.Println("Batch:")
83				//fmt.Println(b)
84				batch.Compact(ns)
85			}
86		default:
87			continue
88		}
89	}
90}