persistent storage for simple chat app
This commit is contained in:
parent
a416bf279d
commit
8a1d690518
|
@ -44,7 +44,7 @@
|
||||||
|
|
||||||
(defn init-protocol
|
(defn init-protocol
|
||||||
"Required [handler ethereum-rpc-url storage]
|
"Required [handler ethereum-rpc-url storage]
|
||||||
Optional [whisper-identity - if not passed a new identity is created automatically
|
Optional [identity - if not passed a new identity is created automatically
|
||||||
active-group-ids - list of active group ids]
|
active-group-ids - list of active group ids]
|
||||||
|
|
||||||
(fn handler [{:keys [event-type...}])
|
(fn handler [{:keys [event-type...}])
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
:delivery-failed [msg-id]
|
:delivery-failed [msg-id]
|
||||||
:new-group-chat [from group-id]
|
:new-group-chat [from group-id]
|
||||||
:group-chat-invite-acked [ack-msg-id from group-id]
|
:group-chat-invite-acked [ack-msg-id from group-id]
|
||||||
:group-new-participant [identity group-id]
|
:group-new-participant [identity group-id from msg-id]
|
||||||
:group-removed-participant [from identity group-id]
|
:group-removed-participant [from identity group-id]
|
||||||
:removed-from-group [from group-id]
|
:removed-from-group [from group-id]
|
||||||
:participant-left-group [from group-id]
|
:participant-left-group [from group-id]
|
||||||
|
|
|
@ -93,7 +93,8 @@
|
||||||
(add-identity store group-topic identity)
|
(add-identity store group-topic identity)
|
||||||
(invoke-user-handler :group-new-participant {:identity identity
|
(invoke-user-handler :group-new-participant {:identity identity
|
||||||
:group-id group-topic
|
:group-id group-topic
|
||||||
:from from})))
|
:from from
|
||||||
|
:msg-id msg-id})))
|
||||||
(log/warn "Ignoring group-new-participant for group" group-topic "from a non group-admin user" from))))
|
(log/warn "Ignoring group-new-participant for group" group-topic "from a non group-admin user" from))))
|
||||||
|
|
||||||
(defn handle-group-removed-participant [web3 from {:keys [keypair group-topic msg-id removed-identity]}]
|
(defn handle-group-removed-participant [web3 from {:keys [keypair group-topic msg-id removed-identity]}]
|
||||||
|
|
|
@ -9,7 +9,10 @@
|
||||||
[goog.events.KeyCodes]
|
[goog.events.KeyCodes]
|
||||||
[goog.events.KeyHandler]
|
[goog.events.KeyHandler]
|
||||||
[goog.events.KeyHandler.EventType :as key-handler-events]
|
[goog.events.KeyHandler.EventType :as key-handler-events]
|
||||||
[syng-im.protocol.state.storage :as st])
|
[syng-im.protocol.state.storage :as st]
|
||||||
|
[goog.storage.Storage :as gstore]
|
||||||
|
[goog.storage.mechanism.HTML5LocalStorage :as html5localstore]
|
||||||
|
[cljs.reader :refer [read-string]])
|
||||||
(:import [goog.events EventType]
|
(:import [goog.events EventType]
|
||||||
[goog.events KeyCodes]))
|
[goog.events KeyCodes]))
|
||||||
|
|
||||||
|
@ -21,20 +24,25 @@
|
||||||
;; (swap! app-state update-in [:__figwheel_counter] inc)
|
;; (swap! app-state update-in [:__figwheel_counter] inc)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defrecord MapStore [m]
|
(defn local-storage []
|
||||||
|
(let [mech (goog.storage.mechanism.HTML5LocalStorage.)
|
||||||
|
store (goog.storage.Storage. mech)]
|
||||||
|
store))
|
||||||
|
|
||||||
|
(defrecord MapStore [local prefix]
|
||||||
st/Storage
|
st/Storage
|
||||||
(put [this key value]
|
(put [_ key value]
|
||||||
(swap! m assoc key value))
|
(.set local (str prefix key) (pr-str value)))
|
||||||
(get [this key]
|
(get [_ key]
|
||||||
(get @m key))
|
(some-> (.get local (str prefix key))
|
||||||
|
(read-string)))
|
||||||
(contains-key? [this key]
|
(contains-key? [this key]
|
||||||
(contains? @m key))
|
(st/get this key))
|
||||||
(delete [this key]
|
(delete [_ key]
|
||||||
(swap! m dissoc key)))
|
(.remove local (str prefix key))))
|
||||||
|
|
||||||
(defonce state (atom {:group-id nil
|
(defonce state (atom {:group-id nil
|
||||||
:group-identities nil
|
:group-identities nil}))
|
||||||
:storage (map->MapStore {:m (atom {})})}))
|
|
||||||
|
|
||||||
(defn shorten [s]
|
(defn shorten [s]
|
||||||
(subs s 0 6))
|
(subs s 0 6))
|
||||||
|
@ -71,11 +79,15 @@
|
||||||
(set-group-identities)))
|
(set-group-identities)))
|
||||||
|
|
||||||
(defn start []
|
(defn start []
|
||||||
(let [rpc-url (-> (g/getElement "rpc-url")
|
(let [rpc-url (-> (g/getElement "rpc-url")
|
||||||
(f/getValue))]
|
(f/getValue))
|
||||||
|
storage (map->MapStore {:local (local-storage)
|
||||||
|
:prefix rpc-url})
|
||||||
|
identity (st/get storage :identity)]
|
||||||
(p/init-protocol
|
(p/init-protocol
|
||||||
{:ethereum-rpc-url rpc-url
|
{:ethereum-rpc-url rpc-url
|
||||||
:storage (:storage @state)
|
:storage storage
|
||||||
|
:identity identity
|
||||||
:handler (fn [{:keys [event-type] :as event}]
|
:handler (fn [{:keys [event-type] :as event}]
|
||||||
(log/info "Event:" (clj->js event))
|
(log/info "Event:" (clj->js event))
|
||||||
(case event-type
|
(case event-type
|
||||||
|
@ -86,6 +98,7 @@
|
||||||
(add-to-chat "chat" ":" (str "Message " msg-id " was acked")))
|
(add-to-chat "chat" ":" (str "Message " msg-id " was acked")))
|
||||||
:initialized (let [{:keys [identity]} event]
|
:initialized (let [{:keys [identity]} event]
|
||||||
(add-to-chat "chat" ":" (str "Initialized, identity is " identity))
|
(add-to-chat "chat" ":" (str "Initialized, identity is " identity))
|
||||||
|
(st/put storage :identity identity)
|
||||||
(-> (g/getElement "my-identity")
|
(-> (g/getElement "my-identity")
|
||||||
(f/setValue identity)))
|
(f/setValue identity)))
|
||||||
:delivery-failed (let [{:keys [msg-id]} event]
|
:delivery-failed (let [{:keys [msg-id]} event]
|
||||||
|
@ -219,8 +232,8 @@
|
||||||
|
|
||||||
(require '[syng-im.protocol.web3 :as w])
|
(require '[syng-im.protocol.web3 :as w])
|
||||||
(def web3 (w/make-web3 "http://localhost:4546"))
|
(def web3 (w/make-web3 "http://localhost:4546"))
|
||||||
(.newIdentity (w/whisper web3) (fn [error result]
|
(.newIdentity (w/whisp er web3) (fn [error result]
|
||||||
(println error result)))
|
(println error result)))
|
||||||
|
|
||||||
(.sendAsync (.-currentProvider web3)
|
(.sendAsync (.-currentProvider web3)
|
||||||
(clj->js [{:jsonrpc "2.0" :method "shh_addIdentity" :params ["0x585493cda18f2b4314afb51224e9c1e913780642783ca11e683a66cfaa9eec94"] :id 99999999999}])
|
(clj->js [{:jsonrpc "2.0" :method "shh_addIdentity" :params ["0x585493cda18f2b4314afb51224e9c1e913780642783ca11e683a66cfaa9eec94"] :id 99999999999}])
|
||||||
|
|
Loading…
Reference in New Issue