;;; -*- Mode:Lisp; Syntax:ANSI-Common-Lisp; -*-
;;;
;;; Weather update server in Common Lisp
;;; Binds PUB socket to tcp://*:5556
;;; Publishes random weather updates
;;;
;;; Kamil Shakirov <moc.liamg|08slimak#moc.liamg|08slimak>
;;;
(defpackage #:zguide.wuserver
(:nicknames #:wuserver)
(:use #:cl #:zhelpers)
(:export #:main))
(in-package :zguide.wuserver)
(defun main ()
;; Prepare our context and socket
(zmq:with-context (context 1)
(zmq:with-socket (publisher context zmq:pub)
(zmq:bind publisher "tcp://*:5556")
(zmq:bind publisher "ipc://weather.ipc")
(loop
;; Get values that will fool the boss
(let ((zipcode (within 100000))
(temperature (- (within 215) 80))
(relhumidity (+ (within 50) 10)))
;; Send message to all subscribers
(let ((message
(make-instance 'zmq:msg
:data (format nil "~5,'0D ~D ~D"
zipcode
temperature
relhumidity))))
;; Send message to all subscribers
(zmq:send publisher message))))))
(cleanup))