Revision: 44183 http://brlcad.svn.sourceforge.net/brlcad/?rev=44183&view=rev Author: erikgreenwald Date: 2011-04-04 14:52:00 +0000 (Mon, 04 Apr 2011)
Log Message: ----------- add geombotreqmsg Modified Paths: -------------- geomcore/trunk/src/interfaces/cl/gsclient.lisp geomcore/trunk/src/interfaces/cl/gsnet.lisp geomcore/trunk/src/interfaces/cl/gsserver.lisp Modified: geomcore/trunk/src/interfaces/cl/gsclient.lisp =================================================================== --- geomcore/trunk/src/interfaces/cl/gsclient.lisp 2011-04-04 14:45:12 UTC (rev 44182) +++ geomcore/trunk/src/interfaces/cl/gsclient.lisp 2011-04-04 14:52:00 UTC (rev 44183) @@ -12,13 +12,13 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; this should probably check to make sure things are ok -(defun getgeom (s st uri) - (gsnet:writemsg s (make-instance 'gsnet:geomreqmsg :uri uri)) +(defun getgeom (s st uri &key (bot '())) + (gsnet:writemsg s (make-instance (if bot 'gsnet:geombotreqmsg 'gsnet:geomreqmsg) :uri uri)) (loop for i from 0 to (length (gsnet::manifest (gsnet:readmsg s))) do (write-sequence (gsnet::chunk (gsnet:readmsg s)) st))) -(defun getgeomfile (s file uri) +(defun getgeomfile (s file uri &key (bot '())) (with-open-file (out file :element-type '(unsigned-byte 8) :direction :output) - (getgeom s out uri))) + (getgeom s out uri :bot bot))) (defun ping (s) (gsnet:writemsg s (make-instance 'gsnet:pingmsg)) Modified: geomcore/trunk/src/interfaces/cl/gsnet.lisp =================================================================== --- geomcore/trunk/src/interfaces/cl/gsnet.lisp 2011-04-04 14:45:12 UTC (rev 44182) +++ geomcore/trunk/src/interfaces/cl/gsnet.lisp 2011-04-04 14:52:00 UTC (rev 44183) @@ -4,7 +4,7 @@ (defpackage :gsnet (:use :cl :sb-unix) (:export :connect :writemsg :readmsg - :session :message :pingmsg :pongmsg :nodenamemsg :loginmsg :logoutmsg :rualivemsg :imalivemsg :okmsg :failmsg :geomreqmsg :geommanifestmsg :geomchunkmsg + :session :message :pingmsg :pongmsg :nodenamemsg :loginmsg :logoutmsg :rualivemsg :imalivemsg :okmsg :failmsg :geomreqmsg :geombotreqmsg :geommanifestmsg :geomchunkmsg :manifest :remotenode :sessionuuid :socket :strm :usec)) @@ -28,6 +28,7 @@ (defconstant +gsnsr+ #x0300) ; New Session Request (defconstant +gsinfo+ #x0305) ; Session Information (defconstant +gsgr+ #x0400) ; Geometry Request +(defconstant +gsgbr+ #x0401) ; Geometry BoT Request (defconstant +gsgm+ #x0405) ; Geometry Manifest (defconstant +gsgc+ #x0410) ; Geometry Chunk @@ -90,6 +91,7 @@ ((= type +gsrualive+) (writemsg s (make-instance 'imalivemsg)) t) ; automatically respond to rualive ((= type +gsimalive+) (make-instance 'imalivemsg)) ((= type +gsgr+) (make-instance 'geomreqmsg :uri (readgsstring (strm s)))) + ((= type +gsgbr+) (make-instance 'geombotreqmsg :uri (readgsstring (strm s)))) ((= type +gsgm+) (make-instance 'geommanifestmsg :manifest (loop for i from 1 to (readuint32 (strm s)) collect (readgsstring (strm s))))) ((= type +gsgc+) (make-instance 'geomchunkmsg :chunk (let ((arr (make-array (+ (readuint32 (strm s)) 1) :element-type '(unsigned-byte 8)))) @@ -153,6 +155,10 @@ (defmethod writemsg :before (s (m geomreqmsg)) (setf (msgtype m) +gsgr+) (setf (len m) (+ (length (uri m)) 4))) (defmethod writemsg :after (s (m geomreqmsg)) (writegsstring (strm s) (uri m))) +(defclass geombotreqmsg (message) ((uri :accessor uri :initarg :uri :initform ""))) +(defmethod writemsg :before (s (m geombotreqmsg)) (setf (msgtype m) +gsgr+) (setf (len m) (+ (length (uri m)) 4))) +(defmethod writemsg :after (s (m geombotreqmsg)) (writegsstring (strm s) (uri m))) + (defclass geommanifestmsg (message) ((manifest :accessor manifest :initarg :manifest))) (defmethod writemsg :before (s (m geommanifestmsg)) (setf (msgtype m) +gsgm+) (setf (len m) (apply #'+ 4 (mapcar (lambda (x) (+ (length x) 4)) (manifest m))))) (defmethod writemsg :after (s (m geommanifestmsg)) (writeuint32 (strm s) (length (manifest m))) (loop for i in (manifest m) do (writegsstring (strm s) i))) Modified: geomcore/trunk/src/interfaces/cl/gsserver.lisp =================================================================== --- geomcore/trunk/src/interfaces/cl/gsserver.lisp 2011-04-04 14:45:12 UTC (rev 44182) +++ geomcore/trunk/src/interfaces/cl/gsserver.lisp 2011-04-04 14:52:00 UTC (rev 44183) @@ -21,6 +21,9 @@ (read-sequence arr stream) (gsnet:writemsg s (make-instance 'gsnet:geomchunkmsg :chunk arr :reuuid reuuid))))) +(defun send-bot-geom (s reuuid filename) + (gsnet:writemsg s (make-instance 'gsnet:failmsg))) + (defun handle-connection (st) (let ((s (make-instance 'gsnet:session :stream st))) @@ -40,6 +43,7 @@ (let ((m (gsnet:readmsg s))) (cond ((equalp (type-of m) 'gsnet:geomreqmsg) (send-geom s (gsnet::uuid m) (gsnet::uri m))) + ((equalp (type-of m) 'gsnet:geombotreqmsg) (send-bot-geom s (gsnet::uuid m) (gsnet::uri m))) ((equalp m t) '()) ((equalp m '()) (return-from handle-connection)) (t (format t "Unhandled thing ~a~%" (type-of m)))))))) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Create and publish websites with WebMatrix Use the most popular FREE web apps or write code yourself; WebMatrix provides all the features you need to develop and publish your website. http://p.sf.net/sfu/ms-webmatrix-sf _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits