|
1 | 1 | (ns chatb0x.websockets |
2 | 2 | (:require [org.httpkit.server :refer [with-channel on-close on-receive send!]] |
3 | 3 | [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/"))) |
5 | 16 |
|
6 | 17 | ;; BRADS FUNCTIONS FOR DATA |
7 | 18 | ;; get-assigned-agents, get-unassigned-agents, get-free-agents |
|
31 | 42 | (:visitor data))) |
32 | 43 |
|
33 | 44 | (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 | + |
35 | 50 | (defn ds-visitors-add [visitor agent] |
36 | 51 | (swap! ds-visitors assoc visitor agent)) |
37 | 52 |
|
38 | 53 | (defn get-text [data] (:message data)) |
39 | 54 |
|
40 | 55 | (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)] |
42 | 57 | (swap! ds-clients dissoc client) ;; Cleanup: remove agent from ds-clients |
43 | 58 | (doseq [visitor visitors] |
44 | 59 | (swap! ds-clients dissoc visitor) ;; Cleanup: remove visitors from ds-clients |
|
47 | 62 |
|
48 | 63 | (defn remove-visitor [client] |
49 | 64 | (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) |
51 | 66 | (swap! ds-visitors dissoc client)) ;; Cleanup: remove agent from ds-visitors |
52 | 67 |
|
53 | 68 | (defn close-cleanup-ds [client] |
|
61 | 76 | ;; Agent visitor handling |
62 | 77 | (defn send-msg2 [client1 client2 msg] |
63 | 78 | (do (if client1 |
| 79 | + (println "Sending client1: " msg) |
64 | 80 | (send! client1 msg false)) |
65 | 81 | (if client2 |
| 82 | + (println "Sending client2" msg) |
66 | 83 | (send! client2 msg false)))) |
67 | 84 |
|
68 | 85 | (defn msg-init [client1 client2] |
|
74 | 91 | (let [agent (get-agent sender) |
75 | 92 | visitor (get-visitor data) |
76 | 93 | 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})))) |
79 | 96 |
|
80 | 97 | (defn msg-close [client] |
81 | 98 | (let [agent (get-agent client) |
|
99 | 116 | (println req) |
100 | 117 | (if (contains? (get-in req [:session :cemerick.friend/identity :authentications nil :roles]) :chatb0x.user/agent) |
101 | 118 | (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 |
103 | 120 | (swap! ds-agents assoc channel {})) |
104 | 121 | (let [ch-agent (get-free-agent) ;; Visitor |
105 | 122 | ch-visitor channel |
106 | | - vis-email (get-in req [:session :cemerick.friend/identity :authentications nil :username]) |
107 | | - |
| 123 | + gravatar-url (calc-gravatar (get-in req [:session :cemerick.friend/identity :authentications nil :username]))] |
108 | 124 | (if (= ch-agent nil) |
109 | 125 | (println "ERROR EVENTUALLY!!! no agents on, ignoring visitor!") |
110 | 126 | (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 |
112 | 128 | (ds-agents-add-visitor ch-agent ch-visitor) |
113 | 129 | (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 | + )))) |
116 | 133 | ;; RECEIVE |
117 | 134 | (on-receive channel (fn [data] |
118 | 135 | (println "on-receive channel:" channel " data:" data) |
|
0 commit comments