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	"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)
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}