|
|
package main
import ( "bytes" "encoding/gob" "flag" "fmt" "os" "time"
"github.com/vocdoni/go-dvote/batch" "github.com/vocdoni/go-dvote/data" "github.com/vocdoni/go-dvote/db" "github.com/vocdoni/go-dvote/net" "github.com/vocdoni/go-dvote/types" )
var dbPath = "~/.dvote/relay.db" var batchSeconds = 10 //seconds
var batchSize = 3 //packets
var err error var batchTimer *time.Ticker var batchSignal chan bool var signal bool var transportType net.TransportID
func main() {
db, err := db.NewLevelDbStorage(dbPath, false) if err != nil { panic(err) } defer db.Close()
batch.Setup(db)
//gather transport type flag
var transportIDString string flag.StringVar(&transportIDString, "transport", "PubSub", "Transport must be one of: PubSub, HTTP") flag.Parse() transportType = net.TransportIDFromString(transportIDString)
batchTimer = time.NewTicker(time.Second * time.Duration(batchSeconds)) batchSignal = make(chan bool)
batch.BatchSignal = batchSignal batch.BatchSize = batchSize
fmt.Println("Entering main loop") transport, err := net.Init(transportType) listenerOutput := make(chan types.Message, 10) listenerErrors := make(chan error) if err != nil { os.Exit(1) } go transport.Listen(listenerOutput, listenerErrors) go batch.Recieve(listenerOutput) for { select { case <-batchTimer.C: fmt.Println("Timer triggered") // fmt.Println(batch.Create())
//replace with chain link
case signal := <-batchSignal: if signal == true { fmt.Println("Signal triggered") ns, bs := batch.Fetch() buf := &bytes.Buffer{} gob.NewEncoder(buf).Encode(bs) bb := buf.Bytes() cid := data.Publish(bb) data.Pin(cid) fmt.Printf("Batch published at: %s \n", cid) // add to chain
// announce to pubsub
//fmt.Println("Nullifiers:")
//fmt.Println(n)
//fmt.Println("Batch:")
//fmt.Println(b)
batch.Compact(ns) } case listenError := <-listenerErrors: fmt.Println(listenError) default: continue } } }
|