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