Changeset 12104


Ignore:
Timestamp:
May 22, 2009, 3:08:25 AM (10 years ago)
Author:
mikel
Message:

Added user preferences to control whether the swank server starts up at launch, and on which port. Added lots of error checking and handling around that whole process.

Location:
trunk/source/cocoa-ide
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/cocoa-ide/ide-contents/Resources/English.lproj/preferences.nib/info.nib

    r11917 r12104  
    88        <integer>4</integer>
    99        <key>IBOpenObjects</key>
    10         <array/>
     10        <array>
     11                <integer>1500949</integer>
     12        </array>
    1113        <key>IBSystem Version</key>
    1214        <string>9G55</string>
  • trunk/source/cocoa-ide/start.lisp

    r12102 r12104  
    8888    (require :swank))
    8989
    90 (defun gui-swank-port ()
    91   ;; TODO: get the port from a user preference and use
    92   ;;       the global as a fallback
    93   *default-gui-swank-port*)
    94 
    9590(defun try-starting-swank ()
    9691  (unless *ccl-swank-active-p*
    97    (handler-case (swank:create-server :port (gui-swank-port) :dont-close t)
    98      (serious-condition (c)
    99        (setf *ccl-swank-active-p* nil)
    100        (format t "~%Error starting swank server: ~A~%" c)
    101        (force-output))
    102      (:no-error (result) (setf *ccl-swank-active-p* t)))))
     92    ;; try to determine the user preferences concerning the swank port number
     93    ;; and whether the swank server should be started. If the user says start
     94    ;; it, and we can determine a valid port for it, start it up
     95    (let* ((defaults (handler-case (#/values (#/sharedUserDefaultsController ns:ns-user-defaults-controller))
     96                       (serious-condition (c)
     97                         (progn (format t "~%ERROR: Unable to get preferences from the Shared User Defaults Controller")
     98                                nil))))
     99           (start-swank-pref (and defaults (#/valueForKey: defaults #@"startSwankServer")))
     100           (start-swank? (cond
     101                           ;; the user default is not initialized
     102                           ((or (null start-swank-pref)
     103                                (%null-ptr-p start-swank-pref)) nil)
     104                           ;; examine the user default
     105                           ((typep start-swank-pref 'ns:ns-number)
     106                            (case (#/intValue start-swank-pref)
     107                              ;; don't start swank
     108                              (0 nil)
     109                              ;; start swank
     110                              (1 t)
     111                              ;; the user default value is incomprehensible
     112                              (otherwise (progn
     113                                           (format t "~%ERROR: Unrecognized value in user preference 'startSwankServer': ~S"
     114                                                   start-swank-pref)
     115                                           nil))))
     116                           ;; the user default value is incomprehensible
     117                           (t (progn
     118                                (format t "~%ERROR: Unrecognized value type in user preference 'startSwankServer': ~S"
     119                                        start-swank-pref)
     120                                nil))))
     121           (swank-port-pref (and defaults (#/valueForKey: defaults #@"swankPort")))
     122           (swank-port (cond
     123                         ;; the user default is not initialized
     124                         ((or (null swank-port-pref)
     125                              (%null-ptr-p swank-port-pref)) nil)
     126                         ;; examine the user default
     127                         ((typep swank-port-pref 'ns:ns-string)
     128                          (handler-case (let* ((port-str (lisp-string-from-nsstring swank-port-pref))
     129                                               (port (parse-integer port-str :junk-allowed nil)))
     130                                          (or port *default-gui-swank-port*))
     131                            ;; parsing the port number failed
     132                            (ccl::parse-integer-not-integer-string (c)
     133                              (setf *ccl-swank-active-p* nil)
     134                              (format t "~%Error starting swank server; the swank-port user preference is not a valid port number: ~S~%"
     135                                      port-str)
     136                              nil)))
     137                         ;; the user default value is incomprehensible
     138                         (t (progn
     139                              (format t "~%ERROR: Unrecognized value type in user preference 'swankPort': ~S"
     140                                      swank-port-pref)
     141                              nil)))))
     142      (if (and start-swank? swank-port)
     143          ;; try to start the swank server
     144          (handler-case (progn
     145                          (swank:create-server :port swank-port :dont-close t)
     146                          (setf *ccl-swank-active-p* t)
     147                          (setf *active-gui-swank-port* swank-port)
     148                          swank-port)
     149            ;; swank server creation failed
     150            (serious-condition (c)
     151              (setf *ccl-swank-active-p* nil)
     152              (setf *active-gui-swank-port* nil)
     153              (format t "~%Error starting swank server: ~A~%" c)
     154              nil))
     155          ;; don't try to start the swank server
     156          (progn
     157            (setf *ccl-swank-active-p* nil)
     158            (setf *active-gui-swank-port* nil)
     159            nil)))
     160    (force-output)))
    103161
    104162(defmethod toplevel-function ((a cocoa-application) init-file)
  • trunk/source/cocoa-ide/swank.lisp

    r12102 r12104  
    22
    33(defparameter *default-gui-swank-port* 4564)
     4(defparameter *active-gui-swank-port* nil)
    45(defparameter *ccl-swank-active-p* nil)
    56
Note: See TracChangeset for help on using the changeset viewer.