+(define-method (websocket-queue-or-send (websocket <websocket>) message data)
+ (catch #t ; expect: wrong-type-arg (open port), system-error
+ (lambda _
+ (let* ((frames (make-fragmented-frames data))
+ (frames? (pair? (.frames websocket))))
+ (set! (.frames websocket) (append (.frames websocket) frames))
+ (unless frames?
+ (let loop ()
+ (let ((frames (.frames websocket)))
+ (when (pair? frames)
+ (write-frame (car frames) (.socket websocket))
+ (set! (.frames websocket) (cdr (.frames websocket)))
+ (loop))
+ ;;(unless (pair? frames) (format (current-error-port) "done\n"))
+ )))))
+ (lambda (key . args)
+ (let ((message (format #f "~a: ~s" key args)))
+ ((.on-error websocket) websocket (format #f "send failed: ~s ~a\n" websocket message))
+ (websocket-close websocket message)))))
+
+(define-method (websocket-send (websocket <websocket>) message data)
+ (websocket-queue-or-send websocket message data)
+ ;;(websocket-direct-send websocket message data)
+ )
+