|
|
package batch
import ( "encoding/json" "fmt"
"github.com/vocdoni/go-dvote/db" "github.com/vocdoni/go-dvote/types" )
var rdb *db.LevelDbStorage var bdb *db.LevelDbStorage var BatchSignal chan bool var BatchSize int var err error
func Setup(l *db.LevelDbStorage) { rdb = l.WithPrefix([]byte("relay_")) bdb = l.WithPrefix([]byte("batch_")) }
func Recieve(messages <-chan types.Message) { var message types.Message var payload []byte var e types.Envelope var b types.Ballot for { message = <-messages payload = message.Data
err = json.Unmarshal(payload, &e) if err != nil { //log error
}
err = json.Unmarshal(e.Ballot, &b) if err != nil { //log error
}
err = Add(b) if err != nil { //log error
}
fmt.Println("Got > " + string(payload)) } }
//add (queue for counting)
func Add(ballot types.Ballot) error { //this is probably adding []
//err := bdb.Put(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p)))
var b []byte var n []byte var err error b, err = json.Marshal(ballot) n, err = json.Marshal(ballot.Nullifier) err = bdb.Put(n, b) if err != nil { return err }
//this actually needs to see if it was added
if bdb.Count() >= BatchSize { BatchSignal <- true } return nil }
//create (return batch)
//k is []byte 'batch_' + nullifier
//v is []byte package
//returns slice of nullifiers, batch json
func Fetch() ([]string, []string) { var n []string var b []string iter := bdb.Iter() for iter.Next() { k := iter.Key() v := iter.Value() err := iter.Error() if err != nil { panic(err) } n = append(n, string(k[6:])) b = append(b, string(v)) } iter.Release() // jn, err := json.Marshal(n)
// if err != nil {
// panic(err)
// }
// jb, err := json.Marshal(b)
// if err != nil {
// panic(err)
// }
return n, b }
//move from bdb to rdb once pinned
func Compact(n []string) { for _, k := range n { //fmt.Println(k)
v, err := bdb.Get([]byte(k)) if err != nil { fmt.Println(err.Error()) } rdb.Put([]byte(k), v) bdb.Delete([]byte(k)) } }
|