File tree Expand file tree Collapse file tree 2 files changed +100
-0
lines changed
Expand file tree Collapse file tree 2 files changed +100
-0
lines changed Original file line number Diff line number Diff line change 1+ #! /bin/sh
2+
3+ sbcl --noinform --noprint << EOF
4+
5+ (ql:quickload :cl-bunny.examples)
6+ (ql:quickload :nibbles)
7+
8+ (in-package :cl-bunny.examples)
9+
10+ (defun int64-to-octets(val)
11+ (let ((obuffer (fast-io:make-output-buffer)))
12+ (fast-io:write64-be val obuffer)
13+ (fast-io:finish-output-buffer obuffer)))
14+
15+ (defun start-client (n)
16+ (with-connection ("amqp://")
17+ (with-channel ()
18+ (let ((x (exchange.default))
19+ (server-queue "rpc_queue")
20+ (reply-queue (queue.declare :auto-delete t))
21+ (lock (bt:make-lock))
22+ (condition (bt:make-condition-variable))
23+ (result nil))
24+ (format t " [x] Requesting fib(~a)~%" n)
25+ (bt:with-lock-held (lock)
26+ (subscribe reply-queue (lambda (message)
27+ (bt:with-lock-held (lock)
28+ (setf result (nibbles:sb64ref/be (message-body message) 0))
29+ (bt:condition-notify condition))))
30+ (publish x
31+ (int64-to-octets n)
32+ :routing-key server-queue
33+ :properties (list :correlation-id (format nil "~a~a~a" (random 100) (random 100) (random 100))
34+ :reply-to reply-queue))
35+ (bt:condition-wait condition lock)
36+ (format t " [.] Got ~a~%" result)
37+ result)))))
38+
39+ (start-client 0)
40+ (start-client 1)
41+ (start-client 22)
42+ (start-client 33)
43+ (start-client 44)
44+ (start-client 55)
45+
46+ EOF
Original file line number Diff line number Diff line change 1+ #! /bin/sh
2+
3+ sbcl --noinform --noprint << EOF
4+
5+ (ql:quickload :cl-bunny.examples)
6+ (ql:quickload :nibbles)
7+
8+ (in-package :cl-bunny.examples)
9+
10+ (defun int64-to-octets(val)
11+ (let ((obuffer (fast-io:make-output-buffer)))
12+ (fast-io:write64-be val obuffer)
13+ (fast-io:finish-output-buffer obuffer)))
14+
15+ ;; http://www.cliki.net/fibonacci
16+ (defun fibonacci (n)
17+ "Successive squaring method from SICP"
18+ (check-type n (integer 0 *))
19+ (labels ((fib-aux (a b p q count)
20+ (cond ((= count 0) b)
21+ ((evenp count)
22+ (fib-aux a
23+ b
24+ (+ (* p p) (* q q))
25+ (+ (* q q) (* 2 p q))
26+ (/ count 2)))
27+ (t (fib-aux (+ (* b q) (* a q) (* a p))
28+ (+ (* b p) (* a q))
29+ p
30+ q
31+ (- count 1))))))
32+ (fib-aux 1 0 0 1 n)))
33+
34+ (with-connection ()
35+ (with-channel ()
36+ (let ((x (exchange.default))
37+ (q (queue.declare :name "rpc_queue" :auto-delete t)))
38+ (format t " [x] Awaiting RPC requests~%")
39+ (handler-case
40+ (progn
41+ (subscribe q (lambda (message)
42+ (let* ((n (nibbles:sb64ref/be (message-body message) 0))
43+ (r (fibonacci n)))
44+ (format t " [.] fib(~a)~%" r)
45+ (publish x
46+ (int64-to-octets r)
47+ :routing-key (message-reply-to message)
48+ :properties (list :correlation-id (message-correlation-id message)))))
49+ :type :sync)
50+ (consume))
51+ (sb-sys:interactive-interrupt ()
52+ (sb-ext:exit))))))
53+
54+ EOF
You can’t perform that action at this time.
0 commit comments