arnaucube
arnaucube/go-dvotePublic Self-hosted repository
pubsub messagaing working w/ generator
imw isaac@iwilder.net
Tue, 22 Jan 2019 16:44:45 +0100
commit

90de87f2436493ab8462d74a960b3022fcab3bc2

parent

fda66aa1af6b62fe40a9f348a04d3979b7e538d8

6 files changed, 54 insertions(+), 26 deletions(-)

jump to
M cmd/generator/generator.go → cmd/generator/generator.go

@@ -8,10 +8,11 @@ "fmt"

"math/rand" "encoding/json" "encoding/base64" - "net/http" - "bytes" - "io/ioutil" +// "net/http" +// "bytes" +// "io/ioutil" "github.com/vocdoni/dvote-relay/types" + "github.com/vocdoni/dvote-relay/data" ) func makeBallot() string {

@@ -75,28 +76,16 @@ interval := os.Args[1]

i, _ := strconv.Atoi(interval) timer := time.NewTicker(time.Millisecond * time.Duration(i)) rand.Seed(time.Now().UnixNano()) - url := "http://localhost:8090/submit" - fmt.Println("URL:>", url) + topic := "vocdoni_pubsub_testing" + fmt.Println("PubSub Topic:>", topic) + for { select { case <- timer.C: - fmt.Println(makeEnvelope(makeBallot())) - var jsonStr = []byte(makeEnvelope(makeBallot())) - req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) - req.Header.Set("X-Custom-Header", "myvalue") - req.Header.Set("Content-Type", "application/json") - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - panic(err) - } - defer resp.Body.Close() - fmt.Println("response Status:", resp.Status) - fmt.Println("response Headers:", resp.Header) - body, _ := ioutil.ReadAll(resp.Body) - fmt.Println("response Body:", string(body)) + var jsonStr = makeEnvelope(makeBallot()) + fmt.Println(jsonStr) + data.PsPublish(topic, jsonStr) default: continue }
M cmd/relay/relay.go → cmd/relay/relay.go

@@ -37,8 +37,10 @@

batch.BatchSignal = batchSignal batch.BatchSize = batchSize + topic := "vocdoni_pubsub_testing" + fmt.Println("Entering main loop") - go net.Listen("8090") + go net.Sub(topic) for { select { case <- batchTimer.C:

@@ -55,7 +57,6 @@ bb := buf.Bytes()

cid := data.Publish(bb) data.Pin(cid) fmt.Printf("Batch published at: %s \n", cid) - // add to ipfs // add to chain // announce to pubsub //fmt.Println("Nullifiers:")
M data/data.go → data/data.go

@@ -53,11 +53,11 @@ }

return sub } -func PsPublish(topic, data string) { +func PsPublish(topic, data string) error { sh := shell.NewShell("localhost:5001") err := sh.PubSubPublish(topic, data) if err != nil { - fmt.Fprintf(os.Stderr, "error: %s", err) - os.Exit(1) + return err } + return nil }
M go.mod → go.mod

@@ -6,6 +6,7 @@ github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d // indirect

github.com/gogo/protobuf v1.2.0 // indirect github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect github.com/gxed/hashland v0.0.0-20180221191214-d9f6b97f8db2 // indirect + github.com/ipfs/go-ipfs v0.4.18 // indirect github.com/ipfs/go-ipfs-api v1.3.5 github.com/ipfs/go-ipfs-cmdkit v1.1.3 // indirect github.com/libp2p/go-flow-metrics v0.2.0 // indirect
M go.sum → go.sum

@@ -20,6 +20,8 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=

github.com/gxed/hashland v0.0.0-20180221191214-d9f6b97f8db2 h1:neM/RzmgBKxsJ3ioEZnIQmgQQq/sn6xDqYOEYnH3RYM= github.com/gxed/hashland v0.0.0-20180221191214-d9f6b97f8db2/go.mod h1:YUhWml1NaWLTNBl4NPptkB8MadfaIhgq+a2TRc+Mw4Q= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ipfs/go-ipfs v0.4.18 h1:QBpaJj4emf63RWnqi/PFRQrwGvanlbNqPHHHfVz8IiU= +github.com/ipfs/go-ipfs v0.4.18/go.mod h1:iXzbK+Wa6eePj3jQg/uY6Uoq5iOwY+GToD/bgaRadto= github.com/ipfs/go-ipfs-api v1.3.5 h1:NvOdNXkN1S9XiaRlpPV8SUOBKcRVlpUhoHgbDteMs60= github.com/ipfs/go-ipfs-api v1.3.5/go.mod h1:YWGjU+7Bdls1CpvsKsV6EsQ/KMyQqSpBru2hme/5WQg= github.com/ipfs/go-ipfs-cmdkit v1.1.3 h1:4sbEnLjYmh8gJOCUiqtKp0EIboSYTFrxftc7S+U3gK4=
M net/net.go → net/net.go

@@ -7,7 +7,9 @@ "net/http"

"io" "github.com/vocdoni/dvote-relay/batch" "github.com/vocdoni/dvote-relay/types" + "github.com/vocdoni/dvote-relay/data" ) + func parse(rw http.ResponseWriter, request *http.Request) {

@@ -49,6 +51,39 @@ if err != nil {

panic(err) } io.WriteString(rw, string(j)) +} + +func Sub(topic string) error { + subscription := data.PsSubscribe(topic) + fmt.Println("Subscribed > " + topic) + for { + msg, err := subscription.Next() + if err != nil { + return err + } + + payload := msg.Data() + + var e types.Envelope + var b types.Ballot + + err = json.Unmarshal(payload, &e) + if err != nil { + return err + } + + err = json.Unmarshal(e.Ballot, &b) + if err != nil { + return err + } + + err = batch.Add(b) + if err != nil { + return err + } + + fmt.Println("Got > " + string(payload)) + } } func Listen(port string) {