(require :abcl-contrib)
(require :jss)
(defpackage #:jacl-client
(:use :cl)
(:import-from #:java jinterface-implementation))
(in-package #:jacl-client)
(defun make-listener ()
(jinterface-implementation
"java.net.http.WebSocket$Listener"
"onBinary"
(lambda (ws data last)
(error "onBinary: Unimplemented"))
"onClose"
(lambda (ws code reason)
(error "onClose: Unimplemented"))
"onError"
(lambda (ws err)
(error "onError: Unimplemented"))
"onOpen"
(lambda (ws)
(error "onOpen: Unimplemented"))
"onPing"
(lambda (ws msg)
(error "onPing: Unimplemented"))
"onPong"
(lambda (ws msg)
(error "onPong: Unimplemented"))
"onText"
(lambda (ws data last)
(error "onText: Unimplemented"))))
(defun make-websocket (url)
(let* ((http-client (#"newHttpClient" 'java.net.http.HttpClient))
(ws-builder (#"newWebSocketBuilder" http-client))
(uri (#"create" 'java.net.URI url))
(listener (make-listener)))
(#"buildAsync" ws-builder uri listener)))