Skip to content

Instantly share code, notes, and snippets.

@goldeneggg
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goldeneggg/164b687d8d7f7cd9083f to your computer and use it in GitHub Desktop.
Save goldeneggg/164b687d8d7f7cd9083f to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"os"
"time"
"github.com/gdamore/mangos"
"github.com/gdamore/mangos/protocol/pub"
"github.com/gdamore/mangos/protocol/sub"
"github.com/gdamore/mangos/transport/ipc"
"github.com/gdamore/mangos/transport/tcp"
)
func die(format string, v ...interface{}) {
fmt.Fprintln(os.Stderr, fmt.Sprintf(format, v...))
os.Exit(1)
}
func date() string {
return time.Now().Format(time.ANSIC)
}
func server(url string) {
var sock mangos.Socket
var err error
// server is pub
if sock, err = pub.NewSocket(); err != nil {
die("can't get new pub socket: %s", err)
}
sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
// server is listen mode
if err = sock.Listen(url); err != nil {
die("can't listen on pub socket: %s", err.Error())
}
for {
d := date()
fmt.Printf("SERVER: PUBLISHING DATE: %s\n", d)
// send
if err = sock.Send([]byte(d)); err != nil {
die("Failed publishing: %s", err.Error())
}
time.Sleep(time.Second)
}
}
func client(url, name string) {
var sock mangos.Socket
var err error
var msg []byte
// client is sub
if sock, err = sub.NewSocket(); err != nil {
die("can't get new sub socket: %s", err)
}
sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
// client is dial mode (= connect to other)
if err = sock.Dial(url); err != nil {
die("can't dial on sub socket: %s", err.Error())
}
// Empty byte array effectively subscribes to everything
err = sock.SetOption(mangos.OptionSubscribe, []byte(""))
if err != nil {
die("cannot subscribe: %s", err.Error())
}
for {
// receive
if msg, err = sock.Recv(); err != nil {
die("Cannot recv: %s", err.Error())
}
fmt.Printf("CLIENT(%s): RECEIVED %s\n", name, string(msg))
}
}
func main() {
// handler for return
var sts int
defer func() { os.Exit(sts) }()
// main contents...
if len(os.Args) > 2 && os.Args[1] == "server" {
server(os.Args[2])
return
}
if len(os.Args) > 3 && os.Args[1] == "client" {
client(os.Args[2], os.Args[3])
return
}
fmt.Fprintf(os.Stderr, "Usage: pubsub server|client <URL> <ARG>\n")
sts = 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment