primitive chat client, bug fixes
This commit is contained in:
parent
14df49232b
commit
1de94e4d5d
|
@ -4,11 +4,44 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="css/style.css" rel="stylesheet" type="text/css">
|
||||
<style type="text/css">
|
||||
input[type=text] {
|
||||
width: 530px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
label {
|
||||
width: 80px;
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<h2>Figwheel template</h2>
|
||||
<p>Checkout your developer console.</p>
|
||||
<!--<div id="app">-->
|
||||
<!--<h2>Figwheel template</h2>-->
|
||||
<!--<p>Checkout your developer console.</p>-->
|
||||
<!--</div>-->
|
||||
<div>
|
||||
<label for="rpc-url">RPC URL</label>
|
||||
<input id="rpc-url" type="text" value="http://localhost:4546" />
|
||||
<button id="connect-button">Connect</button>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<label for="chat">Chat:</label>
|
||||
</div>
|
||||
<textarea id="chat" rows="20" cols="150"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label for="msg">Message:</label>
|
||||
<input id="msg" type="text" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="my-identity">My Identity</label>
|
||||
<input id="my-identity" readonly=readonly type="text" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="to-identity">To Identity</label>
|
||||
<input id="to-identity" type="text" />
|
||||
</div>
|
||||
<script src="js/compiled/cljs_tests.js" type="text/javascript"></script>
|
||||
</body>
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
(ns cljs-tests.core
|
||||
(:require [cljs-tests.protocol.api :as p]
|
||||
[cljs-tests.utils.logging :as log]))
|
||||
[cljs-tests.utils.logging :as log]
|
||||
[goog.dom :as g]
|
||||
[goog.dom.forms :as f]
|
||||
[goog.events :as e]
|
||||
[goog.events.EventType]
|
||||
[goog.events.KeyCodes]
|
||||
[goog.events.KeyHandler]
|
||||
[goog.events.KeyHandler.EventType :as key-handler-events])
|
||||
(:import [goog.events EventType]
|
||||
[goog.events KeyCodes]))
|
||||
|
||||
(enable-console-print!)
|
||||
|
||||
|
@ -10,6 +19,41 @@
|
|||
;; (swap! app-state update-in [:__figwheel_counter] inc)
|
||||
)
|
||||
|
||||
(defn start []
|
||||
(let [rpc-url (-> (g/getElement "rpc-url")
|
||||
(f/getValue))
|
||||
{identity :identity}
|
||||
(p/init-protocol
|
||||
{:ethereum-rpc-url rpc-url
|
||||
:handler (fn [{:keys [from payload event-type] :as event}]
|
||||
(log/info "Event:" (clj->js event))
|
||||
(case event-type
|
||||
:new-msg (let [{content :content} payload
|
||||
chat-area (g/getElement "chat")
|
||||
chat (f/getValue chat-area)
|
||||
chat (str chat (subs from 0 5) ": " content "\n")]
|
||||
(f/setValue chat-area chat))
|
||||
(log/info "Don't know how to handle" (clj->js event-type))))})]
|
||||
(-> (g/getElement "my-identity")
|
||||
(f/setValue identity))
|
||||
(e/listen (-> (g/getElement "msg")
|
||||
(goog.events.KeyHandler.))
|
||||
key-handler-events/KEY
|
||||
(fn [e]
|
||||
(when (= (.-keyCode e) KeyCodes/ENTER)
|
||||
(let [msg (-> (g/getElement "msg")
|
||||
(f/getValue))
|
||||
to-identity (-> (g/getElement "to-identity")
|
||||
(f/getValue))]
|
||||
(p/send-user-msg {:to to-identity
|
||||
:content msg})))))))
|
||||
|
||||
(let [button (g/getElement "connect-button")]
|
||||
(e/listen button EventType/CLICK
|
||||
(fn [e]
|
||||
(g/setProperties button #js {:disabled "disabled"})
|
||||
(start))))
|
||||
|
||||
|
||||
(comment
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
(defn from-ascii [s]
|
||||
(.fromAscii js/Web3.prototype s))
|
||||
|
||||
(defn to-ascii [s]
|
||||
(.toAscii js/Web3.prototype s))
|
||||
|
||||
(defn whisper [web3]
|
||||
(.-shh web3))
|
||||
|
||||
|
@ -28,10 +31,10 @@
|
|||
(defn invoke-handler [event-type params]
|
||||
((state/handler) (assoc params :event-type event-type)))
|
||||
|
||||
(defn handle-ack [msg-id]
|
||||
(log/info "Got ack for message:" msg-id)
|
||||
(state/remove-pending-message msg-id)
|
||||
(invoke-handler :msg-acked {:msg-id msg-id}))
|
||||
(defn handle-ack [{:keys [ack-msg-id]}]
|
||||
(log/info "Got ack for message:" ack-msg-id)
|
||||
(state/remove-pending-message ack-msg-id)
|
||||
(invoke-handler :msg-acked {:msg-id ack-msg-id}))
|
||||
|
||||
(defn post-msg [web3 msg]
|
||||
(let [js-msg (clj->js msg)]
|
||||
|
@ -56,11 +59,11 @@
|
|||
|
||||
(defn send-ack [web3 to msg-id]
|
||||
(log/info "Acking message:" msg-id "To:" to)
|
||||
(->> (make-msg {:from (state/my-identity)
|
||||
:to to
|
||||
:payload {:type :ack
|
||||
:msg-id msg-id}})
|
||||
(post-msg web3)))
|
||||
(let [[_ msg] (make-msg {:from (state/my-identity)
|
||||
:to to
|
||||
:payload {:type :ack
|
||||
:ack-msg-id msg-id}})]
|
||||
(post-msg web3 msg)))
|
||||
|
||||
(defn handle-user-msg [web3 from {:keys [msg-id] :as payload}]
|
||||
(send-ack web3 from msg-id)
|
||||
|
@ -77,10 +80,10 @@
|
|||
(if (= to (state/my-identity))
|
||||
(let [{msg-type :type
|
||||
msg-id :msg-id
|
||||
:as payload} (->> (from-ascii payload)
|
||||
:as payload} (->> (to-ascii payload)
|
||||
(read-string))]
|
||||
(case msg-type
|
||||
:ack (handle-ack msg-id)
|
||||
:ack (handle-ack payload)
|
||||
:user-msg (handle-user-msg web3 from payload)))
|
||||
(log/warn "My identity:" (state/my-identity) "Message To:" to "Message is encrypted for someone else, ignoring"))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue