Author: psmith Date: Thu Jan 18 21:07:22 2007 New Revision: 45
Modified: branches/home/psmith/restructure/TODO branches/home/psmith/restructure/run-yarpc.lisp branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Log: Allowed yarpc server to do RPC calls inline if configured so
Modified: branches/home/psmith/restructure/TODO ============================================================================== --- branches/home/psmith/restructure/TODO (original) +++ branches/home/psmith/restructure/TODO Thu Jan 18 21:07:22 2007 @@ -12,3 +12,7 @@ Create UDP server
Create RPC server / client + +Non blocking connects + +Allow large packets
Modified: branches/home/psmith/restructure/run-yarpc.lisp ============================================================================== --- branches/home/psmith/restructure/run-yarpc.lisp (original) +++ branches/home/psmith/restructure/run-yarpc.lisp Thu Jan 18 21:07:22 2007 @@ -1,11 +1,11 @@ +;Runs a multithreaded system with an IO thread dealing with IO only and a 'job' thread taking and executing jobs + ;(push :nio-debug *features*) (require :asdf) (require :nio-yarpc)
+(setf nio-yarpc:+process-jobs-inline+ nil) (sb-thread:make-thread #'(lambda()(nio:start-server 'identity 'identity 'nio-yarpc:yarpc-state-machine :host "127.0.0.1")) :name "nio-server") (loop ;;block waiting for jobs - (format t "~A Server toplevel waiting for job~%" (nio-compat:get-readable-time)) - (destructuring-bind (job result-queue) (nio-compat:take nio-yarpc:job-queue) - (format t "~A Server received job ~A~%" (nio-compat:get-readable-time) job) - (nio-compat:add result-queue (nio-yarpc:execute-call job)))) + (nio-yarpc:run-job))
Modified: branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp ============================================================================== --- branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp (original) +++ branches/home/psmith/restructure/src/protocol/yarpc/nio-yarpc-package.lisp Thu Jan 18 21:07:22 2007 @@ -32,7 +32,7 @@ yarpc-state-machine-factory get-packet-factory
;; yarpc-state-machine - yarpc-state-machine job-queue + yarpc-state-machine job-queue run-job +process-jobs-inline+ ;to be moved test-rpc test-rpc-list test-rpc-string execute-call
Modified: branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp ============================================================================== --- branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp (original) +++ branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Thu Jan 18 21:07:22 2007 @@ -1,4 +1,4 @@ -#| +#| Copyright (c) 2007 All rights reserved.
@@ -52,6 +52,19 @@ (defconstant STATE-INITIALISED 0) (defconstant STATE-SEND-RESPONSE 1)
+ +(defparameter +process-jobs-inline+ t + "Set this to make the NIO thread process the RPC calls - warning the procedure should not block!") + + + +(defun run-job(&key (wait-on-job-pdw t)) + (format t "~A Server toplevel waiting for job~%" (nio-compat:get-readable-time)) + (destructuring-bind (job result-queue) (nio-compat:take nio-yarpc:job-queue :blocking-call wait-on-job-pdw) + (format t "~A Server received job ~A~%" (nio-compat:get-readable-time) job) + (nio-compat:add result-queue (nio-yarpc:execute-call job)))) + + (defmethod process-outgoing-packet((sm yarpc-state-machine)) (format t "yarpc-state-machine: process-outgoing-packet called, polling the results-queue ~%") (let ((result (nio-compat:take (result-queue sm) :blocking-call nil))) @@ -63,7 +76,8 @@ (defmethod process-incoming-packet ((sm yarpc-state-machine) (call call-method-packet)) (assert (eql (state sm) STATE-INITIALISED)) (format t "yarpc-state-machine:process-incoming-packet called :sm ~A :packet ~A~%" sm call) - (nio-compat:add job-queue (list (call-string call) (result-queue sm)))) + (nio-compat:add job-queue (list (call-string call) (result-queue sm))) + (when +process-jobs-inline+ (run-job :wait-on-job-pdw nil)))