Browse code
(init)
Ed Langley authored on 29/10/2020 22:01:15
Showing 3 changed files
Showing 3 changed files
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,16 @@ |
1 |
+;;; -*- Mode:Lisp; Syntax:ANSI-Common-Lisp; Package: ASDF-USER -*- |
|
2 |
+(in-package :asdf-user) |
|
3 |
+ |
|
4 |
+(defsystem :documentation-server |
|
5 |
+ :description "" |
|
6 |
+ :author "Ed L <edward@elangley.org>" |
|
7 |
+ :license "MIT" |
|
8 |
+ :depends-on (#:alexandria |
|
9 |
+ #:uiop |
|
10 |
+ #:fwoar-lisputils |
|
11 |
+ #:serapeum |
|
12 |
+ #:hunchentoot |
|
13 |
+ #:hunchensocket) |
|
14 |
+ :serial t |
|
15 |
+ :components ((:file "package") |
|
16 |
+ (:file "main"))) |
0 | 17 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,32 @@ |
1 |
+(in-package :documentation-server) |
|
2 |
+ |
|
3 |
+(defclass chat-room (hunchensocket:websocket-resource) |
|
4 |
+ ((name :initarg :name :initform (error "Name this room!") :reader name)) |
|
5 |
+ (:default-initargs :client-class 'user)) |
|
6 |
+ |
|
7 |
+(defclass user (hunchensocket:websocket-client) |
|
8 |
+ ((name :initarg :user-agent :reader name :initform (error "Name this user!")))) |
|
9 |
+ |
|
10 |
+ |
|
11 |
+(defvar *chat-room* (list (make-instance 'chat-room :name "/bongo") |
|
12 |
+ (make-instance 'chat-room :name "/fury"))) |
|
13 |
+ |
|
14 |
+(defun find-room (request) |
|
15 |
+ (find (hunchentoot:script-name request) *chat-room* |
|
16 |
+ :test #'string= |
|
17 |
+ :key #'name)) |
|
18 |
+ |
|
19 |
+(defun broadcast (room message &rest args) |
|
20 |
+ (loop for peer in (hunchensocket:clients room) |
|
21 |
+ do (hunchensocket:send-text-message peer (apply #'format nil message args)))) |
|
22 |
+ |
|
23 |
+(defmethod hunchensocket:client-connected ((room chat-room) user) |
|
24 |
+ (broadcast room "user connected ~a" (name user))) |
|
25 |
+ |
|
26 |
+(defmethod hunchensocket:client-disconnected ((room chat-room) user) |
|
27 |
+ (broadcast room "user disconnected ~a" (name user))) |
|
28 |
+ |
|
29 |
+(defmethod hunchensocket:text-message-received ((room chat-room) user message) |
|
30 |
+ (broadcast room "~a says ~a" (name user) message)) |
|
31 |
+ |
|
32 |
+ |