Skip to content

Instantly share code, notes, and snippets.

@michelp
Created May 4, 2013 07:42
Show Gist options
  • Select an option

  • Save michelp/5516687 to your computer and use it in GitHub Desktop.

Select an option

Save michelp/5516687 to your computer and use it in GitHub Desktop.
(load "zmq/zmq.l")
(import zmq)
(de socker (Name) (pack "ipc://" Name ".sock"))
(de setup-engine (Local . @)
(setq *Ctx (zmq~zctx-new))
(setq *Router (zmq~zsocket-new *Ctx zmq~ROUTER))
(setq *Peers (zmq~zhash-new))
(zmq~zsocket-bind *Router (socker Local))
(while (args)
(let (Socket (zmq~zsocket-new *Ctx zmq~DEALER)
Name (next)
Epoint (socker Name) )
(zmq~zsocket-set-identity Socket Local)
(zmq~zsocket-connect Socket Epoint)
(zmq~zhash-insert *Peers Name Socket) ) ) )
(de run-engine ()
(while (= (zmq~zsocket-poll *Router -1) 1)
(let (In (zmq~zmsg-recv *Router)
Out (zmq~zmsg-new)
Sender (zmq~zmsg-popstr In) )
(finally (zmq~zmsg-destroy In)
(zmq~zmsg-pushstr Out (sym (eval (any (zmq~zmsg-popstr In)))))
(zmq~zmsg-send Out (zmq~zhash-lookup *Peers Sender)) ) ) ) )
(de main @
(pass setup-engine)
(run-engine) )
(de send-sym (Peer S)
(let Out (zmq~zmsg-new)
(zmq~zmsg-pushstr Out (sym S))
(zmq~zmsg-send Out (zmq~zhash-lookup *Peers Peer)) ) )
(de recv-sym ()
(let In (zmq~zmsg-recv *Router)
(finally (zmq~zmsg-destroy In)
(println (zmq~zmsg-popstr In))
(any (zmq~zmsg-popstr In)) ) ) )
(de test ()
(setq a (pipe (main "a" "b" "c")))
(setq b (pipe (main "b" "a" "c")))
(setup-engine "c" "a" "b") )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment