Skip to content

Commit e5e1e11

Browse files
committed
incremental websockets progress
2 parents b63adca + 8daab08 commit e5e1e11

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

project.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
[ring "1.3.1"]
1414
[enlive "1.1.5"]
1515
[com.cemerick/friend "0.2.0"]
16+
[digest "1.4.4"]
1617

1718
;; clojurescript
1819
[org.clojure/clojurescript "0.0-2280"]

src/chatb0x/websockets.clj

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
(ns chatb0x.websockets
22
(:require [org.httpkit.server :refer [with-channel on-close on-receive send!]]
33
[chatb0x.user :refer :all]
4-
[cheshire.core :refer [generate-string]]))
4+
[cheshire.core :refer [generate-string]]
5+
[digest :refer [md5]]
6+
[clojure.string :as str]))
7+
8+
(defn calc-gravatar [email]
9+
(if email
10+
(str "http://www.gravatar.com/avatar/"
11+
(-> email
12+
(str/trim)
13+
(str/lower-case)
14+
(md5)))
15+
(str "http://www.gravatar.com/avatar/")))
516

617
;; BRADS FUNCTIONS FOR DATA
718
;; get-assigned-agents, get-unassigned-agents, get-free-agents
@@ -31,14 +42,18 @@
3142
(:visitor data)))
3243

3344
(defn ds-agents-add-visitor [agent visitor]
34-
(update-in @ds-agents [agent] #(assoc % visitor visitor)))
45+
(println agent visitor)
46+
(swap! ds-agents assoc-in [agent visitor] visitor)
47+
;;(update-in @ds-agents [agent] #(assoc % visitor visitor))
48+
)
49+
3550
(defn ds-visitors-add [visitor agent]
3651
(swap! ds-visitors assoc visitor agent))
3752

3853
(defn get-text [data] (:message data))
3954

4055
(defn remove-agent [client]
41-
(let [visitors (get @ds-agents client)] ;; COULD BE BAD!!!! is it dead when removed from ds in next lines of code?
56+
(let [visitors (get @ds-agents client)]
4257
(swap! ds-clients dissoc client) ;; Cleanup: remove agent from ds-clients
4358
(doseq [visitor visitors]
4459
(swap! ds-clients dissoc visitor) ;; Cleanup: remove visitors from ds-clients
@@ -47,7 +62,7 @@
4762

4863
(defn remove-visitor [client]
4964
(swap! ds-clients dissoc client) ;; Cleanup: remove agent from ds-clients
50-
(update-in @ds-agents [(get-agent client)] #(dissoc % client))
65+
(swap! ds-agents update-in [(get-agent client)] dissoc client)
5166
(swap! ds-visitors dissoc client)) ;; Cleanup: remove agent from ds-visitors
5267

5368
(defn close-cleanup-ds [client]
@@ -61,8 +76,10 @@
6176
;; Agent visitor handling
6277
(defn send-msg2 [client1 client2 msg]
6378
(do (if client1
79+
(println "Sending client1: " msg)
6480
(send! client1 msg false))
6581
(if client2
82+
(println "Sending client2" msg)
6683
(send! client2 msg false))))
6784

6885
(defn msg-init [client1 client2]
@@ -74,8 +91,8 @@
7491
(let [agent (get-agent sender)
7592
visitor (get-visitor data)
7693
text (get-text data)]
77-
(send-msg2 agent visitor (generate-string ;; TODO FIX :agent :visitor !!!
78-
{:agent "agent-baz" :visitor "visitor-bar" :message text}))))
94+
(println "In msg-text")
95+
(send-msg2 agent visitor (generate-string {:ch-visitor (:ch-visitor data) :message text}))))
7996

8097
(defn msg-close [client]
8198
(let [agent (get-agent client)
@@ -99,20 +116,20 @@
99116
(println req)
100117
(if (contains? (get-in req [:session :cemerick.friend/identity :authentications nil :roles]) :chatb0x.user/agent)
101118
(do (println "Agent connected: " channel) ;; Agent
102-
(swap! ds-clients assoc channel {:name nil :email nil :room nil}) ;; Add to ds-clients
119+
(swap! ds-clients assoc channel {:name nil :gravatar-url (calc-gravatar (get-in req [:session :cemerick.friend/identity :authentications nil :username])) :room nil}) ;; Add to ds-clients
103120
(swap! ds-agents assoc channel {}))
104121
(let [ch-agent (get-free-agent) ;; Visitor
105122
ch-visitor channel
106-
vis-email (get-in req [:session :cemerick.friend/identity :authentications nil :username])
107-
agent-email "[email protected]"]
123+
gravatar-url (calc-gravatar (get-in req [:session :cemerick.friend/identity :authentications nil :username]))]
108124
(if (= ch-agent nil)
109125
(println "ERROR EVENTUALLY!!! no agents on, ignoring visitor!")
110126
(do (println "Visitor connected: " channel)
111-
(swap! ds-clients assoc ch-visitor {:name nil :email vis-email :room nil}) ;; Add to ds-clients
127+
(swap! ds-clients assoc ch-visitor {:name nil :gravatar-url gravatar-url :room nil}) ;; Add to ds-clients
112128
(ds-agents-add-visitor ch-agent ch-visitor)
113129
(ds-visitors-add ch-visitor ch-agent)
114-
(send! ch-agent (generate-string {:visitor (str ch-visitor) :vis-email vis-email}) false)
115-
(send! ch-visitor (generate-string {:agent-email agent-email}) false)))))
130+
(send! ch-agent (generate-string {:ch-visitor (str ch-visitor) :gravatar-url gravatar-url}) false)
131+
;; (send! ch-visitor (generate-string {:gravatar-url gravatar-url}) false)
132+
))))
116133
;; RECEIVE
117134
(on-receive channel (fn [data]
118135
(println "on-receive channel:" channel " data:" data)

0 commit comments

Comments
 (0)