[nio-cvs] r56 - in branches/home/psmith/restructure/src: buffer protocol/yarpc
psmith at common-lisp.net
psmith at common-lisp.net
Mon Jan 29 04:27:18 UTC 2007
Author: psmith
Date: Sun Jan 28 23:27:18 2007
New Revision: 56
Modified:
branches/home/psmith/restructure/src/buffer/buffer.lisp
branches/home/psmith/restructure/src/buffer/nio-buffer-package.lisp
branches/home/psmith/restructure/src/protocol/yarpc/yarpc-packet-factory.lisp
Log:
fixed no compact problem
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 Sun Jan 28 23:27:18 2007
@@ -151,6 +151,13 @@
(setf position 0)
byte-buffer))
+(defmethod compact((byte-buffer byte-buffer))
+ :documentation "copy remaining bytes to the beginning of this buffer and set position to number of bytes copied (ready for a new put"
+ (with-slots (buf position limit) byte-buffer
+ (let ((remaining (remaining byte-buffer)))
+ (%memcpy buf (cffi:make-pointer (+ (cffi:pointer-address buf) position)) remaining)
+ (setf position remaining))))
+
;reads bytes from byte-buffer and returns a vector (unsigned-byte 8)
(defmethod bytebuffer-read-vector((bb byte-buffer) &optional (num-bytes-to-read (remaining bb)))
(let ((vec (make-uint8-seq num-bytes-to-read)))
@@ -281,7 +288,14 @@
(assert (eql (bytebuffer-read-32 mybuf) 2147483649))
(format t "Mybuf (after r/w 32bit): ~A~%" mybuf)
+ (setf (buffer-position mybuf) 11)
+ (compact mybuf)
+ (format t "Mybuf (after compact): ~A~%" mybuf)
+ (assert (eql (buffer-position mybuf) (- 32 11)))
+ (flip mybuf)
+ (format t "Mybuf (flip): ~A~%" mybuf)
+ (assert (eql (bytebuffer-read-32 mybuf) 2147483649))
(free-buffer mybuf)
(format t "Mybuf after free: ~A~%" mybuf)))
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 Sun Jan 28 23:27:18 2007
@@ -31,5 +31,5 @@
bytebuffer-write-vector bytebuffer-write-string
bytebuffer-read-vector bytebuffer-read-string
bytebuffer-read-8 bytebuffer-read-32 bytebuffer-write-8 bytebuffer-write-32 bytebuffer-insert-8 bytebuffer-insert-32
- flip unflip clear buffer-position copy-buffer buffer-capacity
+ flip unflip clear buffer-position copy-buffer buffer-capacity compact
))
Modified: branches/home/psmith/restructure/src/protocol/yarpc/yarpc-packet-factory.lisp
==============================================================================
--- branches/home/psmith/restructure/src/protocol/yarpc/yarpc-packet-factory.lisp (original)
+++ branches/home/psmith/restructure/src/protocol/yarpc/yarpc-packet-factory.lisp Sun Jan 28 23:27:18 2007
@@ -50,11 +50,15 @@
(let ((packet-id (bytebuffer-read-8 buf))
(packet-length (bytebuffer-read-32 buf)))
(if (<= (- packet-length +yarpc-packet-header-size+) (remaining buf)) ;is the whole packet available in the buffer?
- (ecase packet-id
- (0 (progn (format-log t "yarpc-packet-factory:get-packet - got CALL-METHOD-PACKET-ID~%") (call-method-packet (bytebuffer-read-string buf (- packet-length +yarpc-packet-header-size+)))))
- (1 (progn (format-log t "yarpc-packet-factory:get-packet - got METHOD-RESPONSE-PACKET-ID~%") (method-response-packet (bytebuffer-read-string buf (- packet-length +yarpc-packet-header-size+))))))
- (let ((buffer-capacity (buffer-capacity buf)))
+ (let ((ret-packet (ecase packet-id
+ (0 (progn (format-log t "yarpc-packet-factory:get-packet - got CALL-METHOD-PACKET-ID~%") (call-method-packet (bytebuffer-read-string buf (- packet-length +yarpc-packet-header-size+)))))
+ (1 (progn (format-log t "yarpc-packet-factory:get-packet - got METHOD-RESPONSE-PACKET-ID~%") (method-response-packet (bytebuffer-read-string buf (- packet-length +yarpc-packet-header-size+))))))))
+ (compact buf)
+ #+nio-debug (format-log t "yarpc-packet-factory:get-packet - after compact ~%~A~%" buf)
+ #+nio-debug (format-log t "yarpc-packet-factory:get-packet - retuirning packet ~A~%" ret-packet)
+ ret-packet)
;Failed to read a whole packet unflip and check size
+ (let ((buffer-capacity (buffer-capacity buf)))
(unflip buf)
(if (> packet-length buffer-capacity) (error 'buffer-too-small-error :recommended-size packet-length)))))))
More information about the Nio-cvs
mailing list