1//
2//  Simple request-reply broker.
3//
4
5package main
6
7import (
8	zmq "github.com/pebbe/zmq4"
9)
10
11func main() {
12	//  Prepare our sockets
13	frontend, _ := zmq.NewSocket(zmq.ROUTER)
14	defer frontend.Close()
15	backend, _ := zmq.NewSocket(zmq.DEALER)
16	defer backend.Close()
17	frontend.Bind("tcp://*:5559")
18	backend.Bind("tcp://*:5560")
19
20	//  Initialize poll set
21	poller := zmq.NewPoller()
22	poller.Add(frontend, zmq.POLLIN)
23	poller.Add(backend, zmq.POLLIN)
24
25	//  Switch messages between sockets
26	for {
27		sockets, _ := poller.Poll(-1)
28		for _, socket := range sockets {
29			switch s := socket.Socket; s {
30			case frontend:
31				for {
32					msg, _ := s.Recv(0)
33					if more, _ := s.GetRcvmore(); more {
34						backend.Send(msg, zmq.SNDMORE)
35					} else {
36						backend.Send(msg, 0)
37						break
38					}
39				}
40			case backend:
41				for {
42					msg, _ := s.Recv(0)
43					if more, _ := s.GetRcvmore(); more {
44						frontend.Send(msg, zmq.SNDMORE)
45					} else {
46						frontend.Send(msg, 0)
47						break
48					}
49				}
50			}
51		}
52	}
53}
54