Author: psmith Date: Fri Jan 5 23:42:00 2007 New Revision: 27
Added: branches/home/psmith/restructure/TODO branches/home/psmith/restructure/run-http.lisp - copied unchanged from r25, branches/home/psmith/restructure/run.lisp branches/home/psmith/restructure/run-yarpc.lisp - copied, changed from r25, branches/home/psmith/restructure/run.lisp branches/home/psmith/restructure/run.sh (contents, props changed) branches/home/psmith/restructure/src/protocol/yarpc/ branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc.asd branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Removed: branches/home/psmith/restructure/run.lisp Modified: branches/home/psmith/restructure/patches/cffi_0.9.2-mem_rw.diff branches/home/psmith/restructure/src/buffer/buffer.lisp branches/home/psmith/restructure/src/buffer/nio-buffer-package.lisp Log: Added first steps of YetAnotherRPC protocol
Added: branches/home/psmith/restructure/TODO ============================================================================== --- (empty file) +++ branches/home/psmith/restructure/TODO Fri Jan 5 23:42:00 2007 @@ -0,0 +1,14 @@ +Do eagain queue + +Look into possibility of using chunga for chunked encoding on top of +nio-buffer for http. + +Reinstate nio-httpd with new structure (dependency on above). + +Simple API: Consider buffered-state-machine layer which just buffers +everything and assumes we have enough memory, which will allow classic +coding style for people who dont need direct memory / low level control. + +Create UDP server + +Create RPC server / client
Modified: branches/home/psmith/restructure/patches/cffi_0.9.2-mem_rw.diff ============================================================================== --- branches/home/psmith/restructure/patches/cffi_0.9.2-mem_rw.diff (original) +++ branches/home/psmith/restructure/patches/cffi_0.9.2-mem_rw.diff Fri Jan 5 23:42:00 2007 @@ -18,7 +18,7 @@
(defun mem-write-vector (vector ptr type &optional (count (length vector)) (offset 0)) (loop for i below count for off from offset by (%foreign-type-size type)
-> do (setf (%mem-ref ptr type off) (aref vector i)) +> do (%mem-set (aref vector i) ptr type off)
finally (return i)))
Copied: branches/home/psmith/restructure/run-yarpc.lisp (from r25, branches/home/psmith/restructure/run.lisp) ============================================================================== --- branches/home/psmith/restructure/run.lisp (original) +++ branches/home/psmith/restructure/run-yarpc.lisp Fri Jan 5 23:42:00 2007 @@ -1,4 +1,4 @@ (push :nio-debug *features*) (require :asdf) -(require :nio-http) -(nio:start-server 'identity 'identity 'nio-http:http-state-machine :host "127.0.0.1") +(require :nio-yarpc) +(nio:start-server 'identity 'identity 'nio-yarpc:yarpc-state-machine :host "127.0.0.1")
Added: branches/home/psmith/restructure/run.sh ============================================================================== --- (empty file) +++ branches/home/psmith/restructure/run.sh Fri Jan 5 23:42:00 2007 @@ -0,0 +1,7 @@ +#!/bin/bash +# +# run.sh <http|yarpc> +# + +export LANG=en_US.UTF-8 +sbcl --load run-$1.lisp
Modified: branches/home/psmith/restructure/src/buffer/buffer.lisp ============================================================================== --- branches/home/psmith/restructure/src/buffer/buffer.lisp (original) +++ branches/home/psmith/restructure/src/buffer/buffer.lisp Fri Jan 5 23:42:00 2007 @@ -129,9 +129,9 @@
;;TODO ;;mem-write-vector (vector ptr type &optional (count (length vector)) (offset 0)) -(defmethod bytebuffer-write-string((byte-buffer byte-buffer) str &optional (index 0)) +(defmethod bytebuffer-write-string((byte-buffer byte-buffer) str &optional (index 0) (external-format :ascii)) :documentation "Returns number of bytes written to bytebuffer" - (bytebuffer-write-vector byte-buffer (sb-ext:string-to-octets str :external-format :ascii))) + (bytebuffer-write-vector byte-buffer (sb-ext:string-to-octets str :external-format external-format)))
;;TODO rename (defmethod bytebuffer-write-vector((byte-buffer byte-buffer) vec &optional (index 0))
Modified: branches/home/psmith/restructure/src/buffer/nio-buffer-package.lisp ============================================================================== --- branches/home/psmith/restructure/src/buffer/nio-buffer-package.lisp (original) +++ branches/home/psmith/restructure/src/buffer/nio-buffer-package.lisp Fri Jan 5 23:42:00 2007 @@ -27,5 +27,5 @@ (defpackage :nio-buffer (:use :cl :cffi) (:export - byte-buffer free-buffer remaining inc-position get-string buffer-buf bytebuffer-write-vector flip map-to-foreign + byte-buffer free-buffer remaining inc-position get-string buffer-buf bytebuffer-write-vector bytebuffer-write-string flip map-to-foreign ))
Added: branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp ============================================================================== --- (empty file) +++ branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp Fri Jan 5 23:42:00 2007 @@ -0,0 +1,33 @@ +#| +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. +|# +(defpackage :nio-yarpc (:use :cl :nio :nio-buffer) + + (:export + + ;; yarpc-state-machine + yarpc-state-machine test-rpc + ))
Added: branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc.asd ============================================================================== --- (empty file) +++ branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc.asd Fri Jan 5 23:42:00 2007 @@ -0,0 +1,11 @@ +;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- + +(in-package :asdf) + +(defsystem :nio-yarpc + + :components ((:file "nio-yarpc-package") + (:file "yarpc-state-machine" :depends-on ("nio-yarpc-package")) + ) + + :depends-on (:nio)) \ No newline at end of file
Added: branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp ============================================================================== --- (empty file) +++ branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Fri Jan 5 23:42:00 2007 @@ -0,0 +1,63 @@ +#| +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-yarpc) + +(declaim (optimize (debug 3) (speed 3) (space 0))) + +;; YetAnotherRPC state machine +;; +;; A server that processes remote procedure calls and returns results +;; +;; Test with: +;; > telnet 127.0.0.1 16323 +;; Trying 127.0.0.1... +;; Connected to 127.0.0.1. +;; Escape character is '^]'. +;; (test-rpc "who" 2 's) +;; response - who 2 'S ∑ + +(defclass yarpc-state-machine (async-fd)()) + +(defmethod print-object ((sm yarpc-state-machine) stream) + (format stream "#<YARPC-STATE-MACHINE ~A >" (call-next-method sm nil))) + +(defmethod process-read((sm yarpc-state-machine)) + (with-slots (foreign-read-buffer foreign-write-buffer) sm + (let ((fn-result (execute-call (sb-ext:octets-to-string (get-string foreign-read-buffer) :external-format :ascii)))) + (format t "process-read - function result: ~A~%" fn-result) + (nio-buffer:bytebuffer-write-string foreign-write-buffer fn-result 0 :utf-8) + (close-sm sm)))) + + +(defun execute-call (call-string) + (let* ((*package* (find-package :nio-yarpc)) + (rpc-call-list (read-from-string call-string ))) + (apply (first rpc-call-list) (rest rpc-call-list)))) + + +(defun test-rpc(a b c) + (format nil "response - ~A ~A ~A ~A~%" a b c (code-char #x2211)))