Skip to content

Instantly share code, notes, and snippets.

@michelp
Created May 3, 2013 05:49
Show Gist options
  • Select an option

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

Select an option

Save michelp/5507413 to your computer and use it in GitHub Desktop.
(load "zmq/zmq.l")
(import zmq)
(de socker (Name) (glue "" (list "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 read-router () (zmq~recv-multipart *Router) )
(de run-engine ()
(while (= (zmq~zsocket-poll *Router -1) 1)
(let Msg (read-router)
(println Msg)
(zmq~send-multipart
(zmq~zhash-lookup *Peers (car Msg))
(sym (eval (any (cadr Msg)))) )
(println @) ) ) )
(de main @
(pass setup-engine)
(run-engine) )
(de send-sym (Peer S)
(zmq~send-multipart (zmq~zhash-lookup *Peers Peer) (sym S)) )
(de read-sym ()
(any (cadr (read-router))) )
(de send-all (S)
(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