From 52040ea82ae92d2961c8eb4f1e6cc32f230ac3df Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 30 Nov 2017 15:01:08 -0800 Subject: [PATCH] use usocket in osc-examples for portability --- osc-examples.lisp | 105 ++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/osc-examples.lisp b/osc-examples.lisp index a4af1b8..edad7d4 100644 --- a/osc-examples.lisp +++ b/osc-examples.lisp @@ -14,75 +14,78 @@ ;; Commentry ;; ;; These examples are currently sbcl specific, but should be easily ported to -;; work with trivial-sockets, acl-compat or something similar. They should be -;; able to explain enough to get you started. .. +;; work with trivial-sockets, acl-compat or something similar. +;; They should be enough to get you started. ;; ;; eg. listen on port 6667 for incoming messages ;; -;; (osc-listen 6667) +;; (osc-receive-test 6667) ;; -;; eg. listen on port 6667 and send to 10.0.89:6668 -;; note the ip# is formatted as a vector +;; send a test message to localhost port 6668 ;; -;; (osc-reflector 6667 #(10 0 0 89) 6668) +;; (osc-send-test "localhost" 6668) +;; +;; listen on port 6667 and send to 10.0.89:6668 +;; (note the ip# is formatted as a vector) +;; +;; (osc-reflector-test 6667 #(10 0 0 89) 6668) ;; ;;;;;:::;;: ; ; ;::: ; ;; ;; ; ;; ; -(require :sb-bsd-sockets) -(use-package :osc) -(use-package :sb-bsd-sockets) +(eval-when (:compile-toplevel :load-toplevel) + (ql:quickload :osc) + (ql:quickload :usocket) + (use-package :osc) + (use-package :usocket)) -(defun osc-listen (port) +(defun osc-listen-test (port) "a basic test function which attempts to decode an osc message a given port." - (let ((s (make-udp-socket)) + (let ((s (socket-connect nil nil + :local-port port + :protocol :datagram + :element-type '(unsigned-byte 8))) (buffer (make-sequence '(vector (unsigned-byte 8)) 1024))) - (socket-bind s #(0 0 0 0) port) (format t "listening on localhost port ~A~%~%" port) (unwind-protect (loop do - (socket-receive s buffer nil) - (format t "receiveded -=> ~S~%" (osc:decode-bundle buffer))) + (socket-receive s buffer (length buffer)) + (format t "received -=> ~S~%" (osc:decode-bundle buffer))) (when s (socket-close s))))) -(defun osc-reflector (listen-port send-ip send-port) - "reflector.. . listens on a given port and sends out on another - note ip#s need to be in the format #(127 0 0 1) for now.. ." - (let ((in (make-udp-socket)) - (out (make-udp-socket)) - (buffer (make-sequence '(vector (unsigned-byte 8)) 512))) - (socket-bind in #(0 0 0 0) listen-port) - (socket-connect out send-ip send-port) - (let ((stream - (socket-make-stream - out :input t :output t - :element-type '(unsigned-byte 8) :buffering :full))) - (unwind-protect - (loop do - (socket-receive in buffer nil) - (let ((oscuff (osc:decode-bundle buffer))) - (format t "glonked -=> message with ~S~% arg(s)" - (length oscuff)) - (write-stream-t1 stream oscuff))) - (when in (socket-close in)) - (when out (socket-close out)))))) +(defun osc-send-test (host port) + "a basic test function which sends osc test message to a given port/hostname." + (let ((s (socket-connect host port + :protocol :datagram + :element-type '(unsigned-byte 8))) + (b (osc:encode-message "/foo/bar" "baz" 1 2 3 (coerce PI 'single-float)))) + (format t "listening on localhost port ~A~%~%" port) + (unwind-protect + (socket-send s b (length b)) + (when s (socket-close s))))) -(defun make-udp-socket() - (make-instance 'inet-socket :type :datagram :protocol :udp)) +(defun osc-reflector-test (listen-port send-host send-port) + "reflector. listens on a given port and sends out on another." + (let ((in (socket-connect nil nil + :local-port listen-port + :protocol :datagram + :element-type '(unsigned-byte 8))) + (out (socket-connect send-host send-port + :protocol :datagram + :element-type '(unsigned-byte 8))) + (buffer (make-sequence '(vector (unsigned-byte 8)) 1024))) + (unwind-protect + (loop do + (socket-receive in buffer (length buffer)) + (format t "glonked -=> message: ~{~A, ~}~%" + (osc:decode-bundle buffer)) + (let ((mess (apply #'osc:encode-message + (cons "/echo" + (osc:decode-message buffer))))) + (socket-send out mess (length mess)))) + (when in (socket-close in)) + (when out (socket-close out))))) -(defun write-stream-t1 (stream osc-message) - "writes a given message to a stream. keep in mind that when using a - buffered stream any funtion writing to the stream should - call (finish-output stream) after it sends the mesages,. ." - (write-sequence - (osc:encode-message "/bzzp" "got" "it" ) - stream) - (finish-output stream)) - -(defmacro osc-write-to-stream (stream &body args) - `(progn (write-sequence (osc:encode-message ,@args) ,stream) - (finish-output ,stream))) - -;end +;;end