diff --git a/project.clj b/project.clj index 28ea934..ff7d88a 100644 --- a/project.clj +++ b/project.clj @@ -17,7 +17,8 @@ [clj-webdriver "0.6.1" :exclusions [org.clojure/core.cache]] [om "0.7.0"] [sablono "0.2.17"] - [cljs-uuid "0.0.4"]] + [cljs-uuid "0.0.4"] + [net.polyc0l0r/hasch "0.2.3"]] :profiles {:uberjar {:aot :all}} :min-lein-version "2.1.2" :plugins [[lein-cljsbuild "1.0.3"] diff --git a/src/clj/grub/state.clj b/src/clj/grub/state.clj index 0ed189b..a44eb94 100644 --- a/src/clj/grub/state.clj +++ b/src/clj/grub/state.clj @@ -1,7 +1,8 @@ (ns grub.state (:require [grub.sync :as sync] [grub.util :as util] - [clojure.core.async :as a :refer [! chan go]])) + [clojure.core.async :as a :refer [! chan go]] + [hasch.core :as hasch])) (def empty-state {:grubs {} @@ -21,13 +22,13 @@ (when (not= state* server-shadow*) (let [diff (sync/diff-states server-shadow* state*) msg {:diff diff - :hash (hash state*) - :shadow-hash (hash server-shadow*)}] + :hash (hasch/uuid state*) + :shadow-hash (hasch/uuid server-shadow*)}] (println "Sync because:") (println "Server = " state*) (println "Client = " server-shadow*) (println "Diff:" diff) - (println "Send" (hash server-shadow*) "->" (hash state*)) + (println "Send" (hasch/uuid server-shadow*) "->" (hasch/uuid state*)) (a/put! to-client msg) ;; TODO: only reset server shadow if send succeeds (reset! server-shadow state*))))) @@ -41,15 +42,15 @@ (if-let [{:keys [diff hash shadow-hash]} (" hash) - (println "Before shadow:" (clojure.core/hash @server-shadow) @server-shadow) - (if (= (clojure.core/hash @server-shadow) shadow-hash) + (println "Before shadow:" (hasch/uuid @server-shadow) @server-shadow) + (if (= (hasch/uuid @server-shadow) shadow-hash) (println "Before hash check: good") (println "Before hash check: FAIL")) (let [new-shadow (swap! server-shadow #(sync/patch-state % diff)) new-state (swap! state #(sync/patch-state % diff))] ;; TODO: check if hashes match - (println "After shadow:" (clojure.core/hash new-shadow) new-shadow) - (if (= (clojure.core/hash new-shadow) hash) + (println "After shadow:" (hasch/uuid new-shadow) new-shadow) + (if (= (hasch/uuid new-shadow) hash) (println "After hash check: good") (println "After hash check: FAIL")) (>! @to-db diff) diff --git a/src/cljs/grub/state.cljs b/src/cljs/grub/state.cljs index 99b76db..40aa4e6 100644 --- a/src/cljs/grub/state.cljs +++ b/src/cljs/grub/state.cljs @@ -1,6 +1,7 @@ (ns grub.state (:require [grub.sync :as sync] - [cljs.core.async :as a :refer [! chan]]) + [cljs.core.async :as a :refer [! chan]] + [hasch.core :as hasch]) (:require-macros [grub.macros :refer [log logs]] [cljs.core.async.macros :refer [go go-loop]])) @@ -13,12 +14,14 @@ (go-loop [] (when-let [{:keys [diff hash shadow-hash]} (" hash) - (if (= (cljs.core/hash @client-shadow) shadow-hash) + (logs "Before shadow:" (hasch/uuid @client-shadow) @client-shadow) + (if (= (hasch/uuid @client-shadow) shadow-hash) (log "Before hash check: good") (log "Before hash check: FAIL")) (let [new-shadow (swap! client-shadow #(sync/patch-state % diff)) new-state (swap! app-state #(sync/patch-state % diff))] - (if (= (cljs.core/hash new-shadow) hash) + (logs "After shadow:" (hasch/uuid @client-shadow) @client-shadow) + (if (= (hasch/uuid new-shadow) hash) (log "After hash check: good") (log "After hash check: FAIL")) (recur)))) diff --git a/src/cljs/grub/websocket.cljs b/src/cljs/grub/websocket.cljs index 788567b..1df0699 100644 --- a/src/cljs/grub/websocket.cljs +++ b/src/cljs/grub/websocket.cljs @@ -5,7 +5,8 @@ [cljs.reader] goog.net.WebSocket goog.events.EventHandler - goog.events.EventTarget) + goog.events.EventTarget + [hasch.core :as hasch]) (:require-macros [cljs.core.async.macros :refer [go go-loop]] [grub.macros :refer [log logs]])) @@ -18,13 +19,13 @@ client-shadow @state/client-shadow diff (sync/diff-states client-shadow app-state) msg {:diff diff - :hash (hash app-state) - :shadow-hash (hash client-shadow)}] + :hash (hasch/uuid app-state) + :shadow-hash (hasch/uuid client-shadow)}] (logs "Sync because:") (logs "Server = " client-shadow) (logs "Client = " app-state) (logs "Diff:" diff) - (logs "Send" (hash client-shadow) "->" (hash app-state)) + (logs "Send" (hasch/uuid client-shadow) "->" (hasch/uuid app-state)) ;; TODO: reset client shadow only if send succeeds (.send @websocket* msg) (reset! state/client-shadow app-state))))