diff --git a/README.md b/README.md index a20b6ec..2474633 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ if you have ZeroMQ v3 installed, run: for ZeroMQ v2 - go get github.com/vbatts/flaming-happiness/noti2 + go get -tags zmq2 github.com/vbatts/flaming-happiness/noti If you're on Fedora, for dependencies, run: diff --git a/noti/main.go b/noti/main.go index bd293fd..bcf023f 100644 --- a/noti/main.go +++ b/noti/main.go @@ -1,43 +1,57 @@ package main import ( - "bytes" "encoding/json" "flag" - zmq "github.com/pebbe/zmq3" - "github.com/vbatts/flaming-happiness/common" "log" + + "github.com/vbatts/flaming-happiness/common" ) func main() { flag.Parse() - if len(ignoreChannels) > 0 { - common.SetIgnores(ignoreChannels) - } + if len(ignoreChannels) > 0 { + common.SetIgnores(ignoreChannels) + } - subscriber, _ := zmq.NewSocket(zmq.SUB) - if len(flag.Args()) == 1 { - subscriber.Connect(flag.Args()[0]) - if !quiet { - log.Printf("Connected to [%s]", flag.Args()[0]) - } - } else { + if len(flag.Args()) != 1 { log.Fatalf("provide the zmq_notify publisher! like tcp://example.com:2428") } - subscriber.SetSubscribe("") + + subscriber, err := NewSubscriber(flag.Args()[0]) + if err != nil { + log.Fatalf("ERROR: %s", err) + } + if err = subscriber.Connect(); err != nil { + log.Fatalf("ERROR: %s", err) + } + if !quiet { + log.Printf("Connected to [%s]", flag.Args()[0]) + } + if err = subscriber.SetSubscribe(""); err != nil { + log.Fatalf("ERROR: %s", err) + } for { - msg, err := subscriber.RecvMessage(0) + msg, err := subscriber.RecvMessageBytes(0) if err != nil { + log.Fatalf("ERROR: %s", err) break } noti_msg := common.IrcNotify{} - json.Unmarshal(bytes.NewBufferString(msg[0]).Bytes(), ¬i_msg) + json.Unmarshal(msg[0], ¬i_msg) go common.Display(noti_msg, linger, quiet) } } +type Subscriber interface { + Connect() error + SetSubscribe(string) error + RecvMessage(flag int) (msg []string, err error) + RecvMessageBytes(flag int) (msg [][]byte, err error) +} + var ( linger int64 = 5 quiet bool = false diff --git a/noti/sub_zmq2.go b/noti/sub_zmq2.go new file mode 100644 index 0000000..d70fe00 --- /dev/null +++ b/noti/sub_zmq2.go @@ -0,0 +1,31 @@ +// +build zmq2 + +package main + +import "github.com/pebbe/zmq2" + +func NewSubscriber(endpoint string) (Subscriber, error) { + sub, err := zmq2.NewSocket(zmq2.SUB) + if err != nil { + return nil, err + } + return v2Subscriber{Socket: sub}, nil +} + +type v2Subscriber struct { + Socket *zmq2.Socket + endpoint string +} + +func (v2b v2Subscriber) Connect() error { + return v2b.Socket.Connect(v2b.endpoint) +} +func (v2b v2Subscriber) SetSubscribe(topic string) error { + return v2b.Socket.SetSubscribe(topic) +} +func (v2b v2Subscriber) RecvMessage(flag int) (msg []string, err error) { + return v2b.Socket.RecvMessage(zmq2.Flag(flag)) +} +func (v2b v2Subscriber) RecvMessageBytes(flag int) (msg [][]byte, err error) { + return v2b.Socket.RecvMessageBytes(zmq2.Flag(flag)) +} diff --git a/noti/sub_zmq3.go b/noti/sub_zmq3.go new file mode 100644 index 0000000..a22c493 --- /dev/null +++ b/noti/sub_zmq3.go @@ -0,0 +1,31 @@ +// +build !zmq2 + +package main + +import "github.com/pebbe/zmq3" + +func NewSubscriber(endpoint string) (Subscriber, error) { + sub, err := zmq3.NewSocket(zmq3.SUB) + if err != nil { + return nil, err + } + return v3Subscriber{Socket: sub}, nil +} + +type v3Subscriber struct { + Socket *zmq3.Socket + endpoint string +} + +func (v3b v3Subscriber) Connect() error { + return v3b.Socket.Connect(v3b.endpoint) +} +func (v3b v3Subscriber) SetSubscribe(topic string) error { + return v3b.Socket.SetSubscribe(topic) +} +func (v3b v3Subscriber) RecvMessage(flag int) (msg []string, err error) { + return v3b.Socket.RecvMessage(zmq3.Flag(flag)) +} +func (v3b v3Subscriber) RecvMessageBytes(flag int) (msg [][]byte, err error) { + return v3b.Socket.RecvMessageBytes(zmq3.Flag(flag)) +} diff --git a/noti2/main.go b/noti2/main.go deleted file mode 100644 index b832a22..0000000 --- a/noti2/main.go +++ /dev/null @@ -1,54 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "flag" - zmq "github.com/pebbe/zmq2" - "github.com/vbatts/flaming-happiness/common" - "log" -) - -func main() { - flag.Parse() - - if len(ignoreChannels) > 0 { - common.SetIgnores(ignoreChannels) - } - - subscriber, _ := zmq.NewSocket(zmq.SUB) - if len(flag.Args()) == 1 { - subscriber.Connect(flag.Args()[0]) - if !quiet { - log.Printf("Connected to [%s]", flag.Args()[0]) - } - } else { - log.Fatalf("provide the zmq_notify publisher! like tcp://example.com:2428") - } - subscriber.SetSubscribe("") - - for { - msg, err := subscriber.RecvMessage(0) - if err != nil { - break - } - noti_msg := common.IrcNotify{} - json.Unmarshal(bytes.NewBufferString(msg[0]).Bytes(), ¬i_msg) - go common.Display(noti_msg, linger, quiet) - } -} - -var ( - linger int64 = 5 - quiet bool = false - ignoreChannels string -) - -func init() { - flag.Int64Var(&linger, "linger", - linger, "time to let the notification linger") - flag.BoolVar(&quiet, "quiet", - false, "less output") - flag.StringVar(&ignoreChannels, "ignore", - "", "comma seperated list of pattern of channels to ignore") -}