2 (in-package :lambdamundo
)
4 ;; (unless (find-package :swank)
5 ;; (swank-loader:init))
8 (defparameter *swank-port
* nil
)
9 (defparameter *service-slime
* t
)
13 (defun start-session (port)
14 "Starts a swank session and returns "
15 (let* ((announce-fn #'simple-announce-function
)
16 (external-format (find-external-format-or-lose *coding-system
*))
17 (socket (create-socket *loopback-interface
* port
))
18 (local-port (local-port socket
)))
19 (declare (type function announce-fn
))
20 (funcall announce-fn local-port
)
21 (format *debug-io
* "Swank on port ~A " local-port
)
22 (initialize-multiprocessing
27 (serve-connection socket
:spawn t external-format
))
28 while lambdamundo
::*service-slime
*))
30 (concatenate 'string
"Swank "
31 (princ-to-string port
)))))
34 (defun end-session (port)
35 "Stop server running on PORT."
36 (let* ((socket-description (getf *listener-sockets
* port
))
37 (socket (second socket-description
)))
38 (let ((thread-position
41 (string-equal (first x
)
42 (concatenate 'string
"Swank "
43 (princ-to-string port
))))
46 (kill-nth-thread thread-position
)
48 (remf *listener-sockets
* port
)))))