first commit.

way too late.
This commit is contained in:
didier amyot committed 2015-01-31 10:19:31 -08:00
commit dbbfaf99b6
15 files changed
+757

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
package nanomsgsubscriber
import (
"encoding/json"
"errors"
"log"
"github.com/didiercrunch/doorman/shared"
"github.com/gdamore/mangos"
"github.com/gdamore/mangos/protocol/sub"
"github.com/gdamore/mangos/transport/ipc"
"github.com/gdamore/mangos/transport/tcp"
"gopkg.in/mgo.v2/bson"
)
type NanoMsgSubscriber struct {
Url string
}
func (s *NanoMsgSubscriber) callUpdateHandlerFunction(f shared.UpdateHandlerFunc, data []byte) error {
wu := &shared.DoormanUpdater{}
if err := json.Unmarshal(data, wu); err != nil {
return err
} else {
return f(wu)
}
}
func (s *NanoMsgSubscriber) Subscribe(abtestId bson.ObjectId, update shared.UpdateHandlerFunc) error {
var sock mangos.Socket
var err error
var msg []byte
if sock, err = sub.NewSocket(); err != nil {
return errors.New("can't get new sub socket: " + err.Error())
}
sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
if err = sock.Dial(s.Url); err != nil {
return errors.New("can't dial on sub socket: " + err.Error())
}
// Empty byte array effectively subscribes to everything
if err = sock.SetOption(mangos.OptionSubscribe, []byte("")); err != nil {
return errors.New("cannot subscribe: " + err.Error())
}
go func(s *NanoMsgSubscriber, sock mangos.Socket) {
for {
if msg, err = sock.Recv(); err != nil {
err := errors.New("Cannot recv: " + err.Error())
log.Println(err)
} else if err := s.callUpdateHandlerFunction(update, msg); err != nil {
log.Println("cannot update abtest with received data: ", err)
}
}
}(s, sock)
return nil
}
@@ -0,0 +1,27 @@
package nanomsgsubscriber
import (
"encoding/json"
"testing"
"github.com/didiercrunch/doorman/shared"
)
func TestCallUpdateHandlerFunction(t *testing.T) {
f := func(m *shared.DoormanUpdater) error {
if m.Id != "foo" {
t.Error("bad doorman id", m.Id)
}
return nil
}
data, err := json.Marshal(&shared.DoormanUpdater{Id: "foo"})
if err != nil {
t.Error(err)
return
}
if new(NanoMsgSubscriber).callUpdateHandlerFunction(f, data); err != nil {
t.Error(err)
}
}