[nio-cvs] r80 - in branches/home/psmith/restructure/src: io utils
psmith at common-lisp.net
psmith at common-lisp.net
Sat Feb 10 01:06:30 UTC 2007
Author: psmith
Date: Fri Feb 9 20:06:30 2007
New Revision: 80
Added:
branches/home/psmith/restructure/src/io/nodes.lisp
Modified:
branches/home/psmith/restructure/src/io/nio.asd
branches/home/psmith/restructure/src/utils/nio-utils-package.lisp
Log:
start of nodes
Modified: branches/home/psmith/restructure/src/io/nio.asd
==============================================================================
--- branches/home/psmith/restructure/src/io/nio.asd (original)
+++ branches/home/psmith/restructure/src/io/nio.asd Fri Feb 9 20:06:30 2007
@@ -11,6 +11,7 @@
(:file "async-socket" :depends-on ("async-fd"))
(:file "nio-server" :depends-on ("async-socket"))
(:file "ip-authorisation" :depends-on ("nio-package"))
+ (:file "nodes" :depends-on ("nio-package"))
)
:depends-on (:cffi :event-notification :nio-buffer :nio-compat :nio-utils))
Added: branches/home/psmith/restructure/src/io/nodes.lisp
==============================================================================
--- (empty file)
+++ branches/home/psmith/restructure/src/io/nodes.lisp Fri Feb 9 20:06:30 2007
@@ -0,0 +1,80 @@
+#|
+Copyright (c) 2007
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|#
+(in-package :nio)
+
+(declaim (optimize (debug 3) (speed 3) (space 0)))
+
+;;concept of a remote socket
+(defclass node()
+ ((host :initarg :host
+ :reader host)
+ (port :initarg :port
+ :reader port)
+ (last-connect-attempt :initform nil
+ :accessor last-connect-attempt
+ :documentation "Time we last attempted a connection")
+ (retry-delay :initform 600
+ :accessor retry-delay
+ :documentation "The delay to wait after the last-connection-attempt before trying to connect again")
+ (active-conn :initform nil
+ :accessor active-conn
+ :documentation "If we are connected to this remote socket this is set to the SM")))
+
+(defun node(host port)
+ (make-instance 'node :host host :port port))
+
+;(node-from-socket-repn "192.168.1.1:1234")
+(defun node-from-socket-repn(socket)
+ (let ((colon-idx (search ":" socket)))
+ (if colon-idx
+ (node (subseq socket 0 colon-idx) (subseq socket (+ colon-idx 1)))
+ (error 'parse-error))))
+
+
+(defmethod print-object ((a-node node) stream)
+ (with-slots (host port last-connect-attempt retry-delay active-conn) a-node
+ (format stream "#<NODE :HOST ~A :port ~A :last-connect-attempt ~A :retry-delay ~A :active-conn ~A>" host port last-connect-attempt retry-delay active-conn)))
+
+
+(defparameter *nodes-list* nil
+ "List of nodes to connect to")
+
+(defun load-nodes (filename)
+ (with-open-file (stream filename)
+ (loop for line = (read-line stream nil nil) do
+ (push (node-from-socket-repn line) *nodes-list*))))
+
+
+;;returns floating point (high-res) next allowed connect time
+(defun get-next-allowed-connect-time(node)
+ (if (null (last-connect-attempt node))
+ (get-universal-high-res)
+ (+ (last-connect-attempt node) (retry-delay node))))
+
+(defun update-last-connect-attempt(node)
+ (setf (last-connect-attempt node) (get-universal-high-res)))
+
Modified: branches/home/psmith/restructure/src/utils/nio-utils-package.lisp
==============================================================================
--- branches/home/psmith/restructure/src/utils/nio-utils-package.lisp (original)
+++ branches/home/psmith/restructure/src/utils/nio-utils-package.lisp Fri Feb 9 20:06:30 2007
@@ -29,5 +29,5 @@
(:export
;;utils
- format-log
+ format-log get-universal-high-res
))
More information about the Nio-cvs
mailing list