Revision: 44185
          http://brlcad.svn.sourceforge.net/brlcad/?rev=44185&view=rev
Author:   erikgreenwald
Date:     2011-04-04 17:03:41 +0000 (Mon, 04 Apr 2011)

Log Message:
-----------
Enable multi-threading. New 'stop' function. Hoist session loop. Use specified 
dir for geometry instead of cwd.

Modified Paths:
--------------
    geomcore/trunk/src/interfaces/cl/gsserver.lisp

Modified: geomcore/trunk/src/interfaces/cl/gsserver.lisp
===================================================================
--- geomcore/trunk/src/interfaces/cl/gsserver.lisp      2011-04-04 15:23:59 UTC 
(rev 44184)
+++ geomcore/trunk/src/interfaces/cl/gsserver.lisp      2011-04-04 17:03:41 UTC 
(rev 44185)
@@ -3,10 +3,11 @@
 
 (defpackage :gsserver
   (:use :cl :sb-unix)
-  (:export :run))
+  (:export :run :stop))
 
 (in-package :gsserver)
 
+(defparameter +dbdir+ "/usr/brlcad/share/db/")
 (defparameter +nodename+ "Spokelse")
 
 (defun authenticate (s user pass)
@@ -16,7 +17,7 @@
 
 (defun send-geom (s reuuid filename)
   (gsnet:writemsg s (make-instance 'gsnet:geommanifestmsg :manifest (list 
filename)))
-  (with-open-file (stream filename :element-type '(unsigned-byte 8) 
:if-does-not-exist :error)
+  (with-open-file (stream (concatenate +dbdir+ filename) :element-type 
'(unsigned-byte 8) :if-does-not-exist :error)
     (let ((arr (make-array (file-length stream) :element-type '(unsigned-byte 
8))))
       (read-sequence arr stream)
       (gsnet:writemsg s (make-instance 'gsnet:geomchunkmsg :chunk arr :reuuid 
reuuid)))))
@@ -24,15 +25,14 @@
 (defun send-bot-geom (s reuuid filename)
   (gsnet:writemsg s (make-instance 'gsnet:failmsg)))
 
-(defun connection-loop (s)
-  (loop do
-       (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 connection-loop '()))
-          (t (format t "Unhandled thing ~a~%" (type-of m)))))))
+(defun handle-packet (s m)
+  (format t "~a~%" (type-of m))
+  (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) m)
+    ((equalp m '()) m)
+    (t (format t "Unhandled thing ~a~%" (type-of m)))))
 
 (defun handle-connection (st)
   (let ((s (make-instance 'gsnet:session :stream st)))
@@ -49,12 +49,18 @@
     (gsnet:writemsg s (make-instance 'gsnet::infomsg :sessionuuid 
(gsnet::sessionuuid s)))
     
     ;;; main loop
-    (connection-loop s)))
+    (loop while (handle-packet s (gsnet:readmsg s)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;  public interface  ;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(defun run (&key (listenhost #(127 0 0 1)) (port 5309))
+  (usocket:socket-server listenhost port #'handle-connection  '() 
:element-type 'unsigned-byte :multi-threading t :in-new-thread t))
 
-(defun run (&key (listenhost #(127 0 0 1)) (port 5309))
-  (usocket:socket-server listenhost port #'handle-connection  '() 
:element-type 'unsigned-byte))
+(defun stop ()
+  (map 'nil (lambda (th) 
+        (cond 
+          ((equalp (sb-thread:thread-name th) "USOCKET Client") 
(sb-thread:terminate-thread th))
+          ((equalp (sb-thread:thread-name th) "USOCKET Server") 
(sb-thread:terminate-thread th))))
+       (sb-thread:list-all-threads)))


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

Reply via email to