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}