use async api
This commit is contained in:
parent
da5d0c9029
commit
e0e60592f0
|
@ -27,21 +27,24 @@
|
|||
|
||||
(defn start []
|
||||
(let [rpc-url (-> (g/getElement "rpc-url")
|
||||
(f/getValue))
|
||||
{identity :identity}
|
||||
(p/init-protocol
|
||||
{:ethereum-rpc-url rpc-url
|
||||
:handler (fn [{:keys [event-type] :as event}]
|
||||
(log/info "Event:" (clj->js event))
|
||||
(case event-type
|
||||
:new-msg (let [{:keys [from payload]} event
|
||||
{content :content} payload]
|
||||
(add-to-chat from content))
|
||||
:msg-acked (let [{:keys [msg-id]} event]
|
||||
(add-to-chat ":" (str "Message " msg-id " was acked")))
|
||||
(add-to-chat ":" (str "Don't know how to handle " event-type))))})]
|
||||
(-> (g/getElement "my-identity")
|
||||
(f/setValue identity))
|
||||
(f/getValue))]
|
||||
(p/init-protocol
|
||||
{:ethereum-rpc-url rpc-url
|
||||
:handler (fn [{:keys [event-type] :as event}]
|
||||
(log/info "Event:" (clj->js event))
|
||||
(case event-type
|
||||
:new-msg (let [{:keys [from payload]} event
|
||||
{content :content} payload]
|
||||
(add-to-chat from content))
|
||||
:msg-acked (let [{:keys [msg-id]} event]
|
||||
(add-to-chat ":" (str "Message " msg-id " was acked")))
|
||||
:initialized (let [{:keys [identity]} event]
|
||||
(add-to-chat ":" (str "Initialized, identity is " identity))
|
||||
(-> (g/getElement "my-identity")
|
||||
(f/setValue identity)))
|
||||
:delivery-failed (let [{:keys [msg-id]} event]
|
||||
(add-to-chat ":" (str "Delivery of message " msg-id " failed")))
|
||||
(add-to-chat ":" (str "Don't know how to handle " event-type))))})
|
||||
(e/listen (-> (g/getElement "msg")
|
||||
(goog.events.KeyHandler.))
|
||||
key-handler-events/KEY
|
||||
|
@ -91,6 +94,12 @@
|
|||
;(def user2-ident (p/new-identity web3-2))
|
||||
;(p/make-whisper-msg web3-2 user2-ident user1-ident "Hello World!")
|
||||
|
||||
|
||||
(require '[cljs-tests.protocol.whisper :as w])
|
||||
(def web3 (w/make-web3 "http://localhost:4546"))
|
||||
(.newIdentity (w/whisper web3) (fn [error result]
|
||||
(println error result)))
|
||||
|
||||
)
|
||||
|
||||
(comment
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
(ns cljs-tests.protocol.api
|
||||
(:require [cljs-tests.protocol.state.state :as state]
|
||||
(:require [cljs.core.async :refer [<! timeout]]
|
||||
[cljs-tests.protocol.state.state :as state]
|
||||
[cljs-tests.protocol.delivery :as delivery]
|
||||
[cljs-tests.protocol.state.delivery :as delivery-state]
|
||||
[cljs-tests.protocol.whisper :as whisper]))
|
||||
[cljs-tests.protocol.whisper :as whisper]
|
||||
[cljs-tests.protocol.handler :as h])
|
||||
(:require-macros [cljs.core.async.macros :refer [go]]))
|
||||
|
||||
(def default-content-type "text/plain")
|
||||
|
||||
|
@ -21,7 +24,7 @@
|
|||
:event-type can be:
|
||||
|
||||
:new-msg - [from payload]
|
||||
:error - [error-msg]
|
||||
:error - [error-msg details]
|
||||
:msg-acked [msg-id]
|
||||
:delivery-failed [msg-id]
|
||||
|
||||
|
@ -29,14 +32,15 @@
|
|||
"
|
||||
[{:keys [handler ethereum-rpc-url identity]}]
|
||||
(state/set-handler handler)
|
||||
(let [connection (create-connection ethereum-rpc-url)
|
||||
identity (or identity
|
||||
(create-identity connection))]
|
||||
(state/set-connection connection)
|
||||
(state/set-identity identity)
|
||||
(whisper/listen connection)
|
||||
(delivery/start-delivery-loop)
|
||||
{:identity identity}))
|
||||
(go
|
||||
(let [connection (create-connection ethereum-rpc-url)
|
||||
identity (or identity
|
||||
(<! (create-identity connection)))]
|
||||
(state/set-connection connection)
|
||||
(state/set-identity identity)
|
||||
(whisper/listen connection)
|
||||
(delivery/start-delivery-loop)
|
||||
(h/invoke-handler :initialized {:identity identity}))))
|
||||
|
||||
(defn send-user-msg [{:keys [to content]}]
|
||||
(let [{:keys [msg-id msg] :as new-msg} (whisper/make-msg {:from (state/my-identity)
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
(ns cljs-tests.protocol.whisper
|
||||
(:require [cljsjs.web3]
|
||||
(:require [cljs.core.async :refer [chan put! close! <!]]
|
||||
[cljsjs.web3]
|
||||
[cljsjs.chance]
|
||||
[cljs-tests.utils.logging :as log]
|
||||
[cljs-tests.protocol.state.state :as state]
|
||||
[cljs-tests.protocol.state.delivery :as delivery]
|
||||
[cljs-tests.protocol.handler :as handler]
|
||||
[cljs.reader :refer [read-string]]))
|
||||
[cljs.reader :refer [read-string]])
|
||||
(:require-macros [cljs.core.async.macros :refer [go]]))
|
||||
|
||||
(def syng-app-topic "SYNG-APP-CHAT-TOPIC")
|
||||
(def syng-msg-ttl 100)
|
||||
|
@ -27,8 +29,22 @@
|
|||
(->> (js/Web3.providers.HttpProvider. rpc-url)
|
||||
(js/Web3.)))
|
||||
|
||||
(defn make-callback [{:keys [error-msg result-channel]}]
|
||||
(fn [error result]
|
||||
(if error
|
||||
(do
|
||||
(log/error (str error-msg ":") error)
|
||||
(handler/invoke-handler :error {:error-msg error-msg
|
||||
:details error}))
|
||||
(put! result-channel result))
|
||||
(close! result-channel)))
|
||||
|
||||
(defn new-identity [web3]
|
||||
(.newIdentity (.-shh web3)))
|
||||
(let [result-channel (chan)
|
||||
callback (make-callback {:error-msg "Call to newIdentity failed"
|
||||
:result-channel result-channel})]
|
||||
(.newIdentity (.-shh web3) callback)
|
||||
result-channel))
|
||||
|
||||
(defn handle-ack [{:keys [ack-msg-id]}]
|
||||
(log/info "Got ack for message:" ack-msg-id)
|
||||
|
@ -39,7 +55,12 @@
|
|||
(let [js-msg (clj->js msg)]
|
||||
(log/info "Sending whisper message:" js-msg)
|
||||
(-> (whisper web3)
|
||||
(.post js-msg))))
|
||||
(.post js-msg (fn [error result]
|
||||
(when error
|
||||
(let [error-msg "Call to shh.post() failed"]
|
||||
(log/error (str error-msg ":") error)
|
||||
(handler/invoke-handler :error {:error-msg error-msg
|
||||
:details error}))))))))
|
||||
|
||||
(defn make-msg
|
||||
"Returns [msg-id msg], `msg` is formed for Web3.shh.post()"
|
||||
|
@ -92,11 +113,10 @@
|
|||
[web3]
|
||||
(let [topics [syng-app-topic]
|
||||
shh (whisper web3)
|
||||
filter (.filter shh (make-topics topics))
|
||||
watch (.watch filter (fn [error msg]
|
||||
(if error
|
||||
(handler/invoke-handler :error {:error-msg error})
|
||||
(handle-arriving-whisper-msg web3 msg))))]
|
||||
filter (.filter shh (make-topics topics) (fn [error msg]
|
||||
(if error
|
||||
(handler/invoke-handler :error {:error-msg error})
|
||||
(handle-arriving-whisper-msg web3 msg))))]
|
||||
(state/add-filter topics filter)))
|
||||
|
||||
(defn stop-listener [filter]
|
||||
|
|
Loading…
Reference in New Issue