Refactored to make testable.
Added tests.
This commit is contained in:
+21
-15
@@ -14,7 +14,8 @@
|
||||
:reader request)))
|
||||
|
||||
(defclass result ()
|
||||
((message :initarg :message)
|
||||
((message :initarg :message
|
||||
:reader message)
|
||||
(msg-id :initarg :msg-id
|
||||
:reader msg-id)))
|
||||
|
||||
@@ -70,9 +71,9 @@
|
||||
|
||||
(defun dispatch-parse-message (message sender)
|
||||
(if-let ((api-version (cdr (assoc :VERSION message)))
|
||||
(service (symbolize (cdr (assoc :SERVICE message))))
|
||||
(service (cdr (assoc :SERVICE message)))
|
||||
(msg-id (cdr (assoc :MSGID message))))
|
||||
(parse-message sender service api-version (cdr (assoc :PAYLOAD message)) msg-id)
|
||||
(parse-message sender (symbolize service) api-version (cdr (assoc :PAYLOAD message)) msg-id)
|
||||
(make-error :msg (format nil "missing api_version, msgid, or service name in request in message")
|
||||
:msg-id msg-id)))
|
||||
|
||||
@@ -98,22 +99,27 @@
|
||||
forms
|
||||
:initial-value init)))))
|
||||
|
||||
(defun handle-xmpp-message (sender body)
|
||||
(render-result
|
||||
(handler-case
|
||||
(success-> body
|
||||
(decode-message)
|
||||
(dispatch-parse-message sender)
|
||||
(handle-message))
|
||||
(error (e)
|
||||
(format *error-output* "failed handling message from ~A: ~A"
|
||||
sender e)
|
||||
(make-error :msg "an unknown error occurred handling request")))))
|
||||
|
||||
(defmethod xmpp:handle ((conn xmpp:connection) (message xmpp:message))
|
||||
(let ((sender (xmpp:from message)))
|
||||
(format *standard-output* "message received from ~A" sender)
|
||||
(xmpp:message conn
|
||||
(xmpp:from message)
|
||||
(render-result
|
||||
(handler-case
|
||||
(success-> message
|
||||
(xmpp:body)
|
||||
(decode-message)
|
||||
(dispatch-parse-message sender)
|
||||
(handle-message))
|
||||
(error (e)
|
||||
(format *error-output* "failed handling message from ~A: ~A"
|
||||
sender e)
|
||||
(make-error :msg "an unknown error occurred handling request")))))))
|
||||
sender
|
||||
(handle-xmpp-message sender (xmpp:body message)))))
|
||||
|
||||
(defun start-listening (backplane)
|
||||
(xmpp:receive-stanza-loop backplane))
|
||||
|
||||
(let ((backplane nil))
|
||||
(defun backplane-connect (xmpp-host xmpp-username xmpp-password)
|
||||
|
||||
Reference in New Issue
Block a user