diff options
Diffstat (limited to 'src/mqtt-client.rkt')
| -rw-r--r-- | src/mqtt-client.rkt | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mqtt-client.rkt b/src/mqtt-client.rkt new file mode 100644 index 0000000..dfe0a1f --- /dev/null +++ b/src/mqtt-client.rkt | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #lang racket/base | ||
| 2 | |||
| 3 | (require racket/place) | ||
| 4 | (require racket/match) | ||
| 5 | (require mqtt-client) | ||
| 6 | (require (file "utils.rkt")) | ||
| 7 | |||
| 8 | (provide main) | ||
| 9 | |||
| 10 | (define (main c) | ||
| 11 | (displayln "MQTT WORKER") | ||
| 12 | (match (place-channel-get c) | ||
| 13 | [(list host username password client-name topic-name) | ||
| 14 | (mqtt/with-client (host client-name) | ||
| 15 | (mqtt/with-connection (#:keep-alive-interval 20 | ||
| 16 | #:clean-session #t | ||
| 17 | #:username username | ||
| 18 | #:password password) | ||
| 19 | |||
| 20 | |||
| 21 | (mqtt/with-qos ('qos-1) | ||
| 22 | (mqtt/subscribe topic-name) | ||
| 23 | (let loop () | ||
| 24 | (mqtt/with-message-recv (topic payload) | ||
| 25 | (displayln (format "Message \"~a\" recieved on topic \"~a\"" payload topic)) | ||
| 26 | (let* ((payload (bytes->string/utf-8 payload)) | ||
| 27 | (payload=? (lambda (what) | ||
| 28 | (string=? payload | ||
| 29 | what)))) | ||
| 30 | (when (or (payload=? "toggle") | ||
| 31 | (payload=? "toggle-blinker")) | ||
| 32 | (place-channel-put c (string->symbol payload))))) | ||
| 33 | (loop)))))])) | ||
| 34 | |||
