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