summaryrefslogtreecommitdiffstats
path: root/src/mqtt-client.rkt
blob: dfe0a1fe9009451ac4500a67c931bca907ed6a03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#lang racket/base

(require racket/place)
(require racket/match)
(require mqtt-client)
(require (file "utils.rkt"))

(provide main)

(define (main c)
  (displayln "MQTT WORKER")
  (match (place-channel-get c)
    [(list host username password client-name topic-name)
     (mqtt/with-client (host client-name)
       (mqtt/with-connection (#:keep-alive-interval 20
                              #:clean-session       #t
                              #:username            username
                              #:password            password)


         (mqtt/with-qos ('qos-1)
           (mqtt/subscribe topic-name)
           (let loop ()
             (mqtt/with-message-recv (topic payload)
               (displayln (format "Message \"~a\" recieved on topic \"~a\"" payload topic))
               (let* ((payload (bytes->string/utf-8 payload))
                      (payload=? (lambda (what)
                                   (string=? payload
                                             what))))
                 (when (or (payload=? "toggle")
                           (payload=? "toggle-blinker"))
                   (place-channel-put c (string->symbol payload)))))
             (loop)))))]))