Durable subscriber in CL

;;; -*- Mode:Lisp; Syntax:ANSI-Common-Lisp; -*-
;;;
;;; Durable subscriber in Common Lisp
;;;
;;; Kamil Shakirov <moc.liamg|08slimak#moc.liamg|08slimak>
;;;

(defpackage #:zguide.durasub
(:nicknames #:durasub)
(:use #:cl #:zhelpers)
(:export #:main))

(in-package :zguide.durasub)

(defun main ()
(zmq:with-context (context 1)
;; Connect our subscriber socket
(zmq:with-socket (subscriber context zmq:sub)
(zmq:setsockopt subscriber zmq:identity "Hello")
(zmq:setsockopt subscriber zmq:subscribe "")
(zmq:connect subscriber "tcp://localhost:5565")

;; Synchronize with publisher
(zmq:with-socket (sync context zmq:push)
(zmq:connect sync "tcp://localhost:5564")
(send-text sync "")

;; Get updates, expect random Ctrl-C death
(loop
(let ((string (recv-text subscriber)))
(message "~A~%" string)

(when (string= string "END")
(return)))))))

(cleanup))