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