#lang racket
(require racket/udp
racket/runtime-path
"../osc-to-bytes.rkt"
"../osc-defns.rkt"
"../bytes-to-osc.rkt")
(define-runtime-path here ".")
(define setup-messages (file->value (build-path here "preloads.rktd")))
(define action-messages (file->value (build-path here "actions.rktd")))
(define scsynth-socket 13698)
(define receive-socket 13699)
(define the-socket (udp-open-socket))
(udp-bind! the-socket "127.0.0.1" receive-socket)
(define receive-buffer (make-bytes 10000 0))
(thread
(lambda ()
(let loop ()
(printf "waiting for incoming messages.\n")
(define-values (len hostname src-port)
(udp-receive! the-socket receive-buffer))
(printf "current seconds: ~v\n" (current-seconds))
(printf "len: ~v\nhostname: ~v\nsrc-port: ~v\n" len hostname src-port)
(define received (subbytes receive-buffer 0 len))
(printf "received buffer: ~v\n" received)
(printf "decoded: ~e\n" (bytes->osc-element received))
(loop))))
(define (send-command message)
(udp-send-to the-socket "127.0.0.1" scsynth-socket
(osc-element->bytes message)))
(printf "sending status request: if no status.response seen, the server is not listening.\n")
(send-command (osc-message #"/status" empty))
(printf "hit return to start\n")
(read-line)
(for ([msg setup-messages])
(send-command msg))
(send-command (first action-messages))
(sleep 0.5)
(printf "hit return to stop.\n")
(read-line)
(for ([msg (rest action-messages)])
(send-command msg))
(sleep 0.5)