Change channel to function in websocket-relay

This commit is contained in:
Robert C. Martin 2023-01-17 08:08:48 -06:00
parent 358d90f683
commit 7587374a47
4 changed files with 16 additions and 18 deletions

View File

@ -9,14 +9,14 @@
(it "can be made" (it "can be made"
(should= {::relay/type ::ws-relay/websocket (should= {::relay/type ::ws-relay/websocket
::ws-relay/url "url" ::ws-relay/url "url"
::ws-relay/chan :some-channel ::ws-relay/recv-f :some-f
::ws-relay/socket nil ::ws-relay/socket nil
::ws-relay/open? false} ::ws-relay/open? false}
(ws-relay/make "url" :some-channel))) (ws-relay/make "url" :some-f)))
(it "can open and close" (it "can open and close"
(pending "be nice to relay.damus.io") (pending "be nice to relay.damus.io")
(let [relay (ws-relay/make "wss://relay.damus.io" :some-chan) (let [relay (ws-relay/make "wss://relay.damus.io" :some-f)
relay-open (relay/open relay) relay-open (relay/open relay)
relay-closed (relay/close relay-open)] relay-closed (relay/close relay-open)]
(should (::ws-relay/open? relay-open)) (should (::ws-relay/open? relay-open))
@ -25,14 +25,13 @@
(it "can send and receive" (it "can send and receive"
(pending "be nice to relay.damus.io") (pending "be nice to relay.damus.io")
(let [chan (async/chan) (let [chan (async/chan)
relay (ws-relay/make "wss://relay.damus.io" chan) recv-f (fn [msg] (async/>!! chan msg))
relay (ws-relay/make "wss://relay.damus.io" recv-f)
relay-open (relay/open relay) relay-open (relay/open relay)
_ (relay/send relay-open ["test"]) _ (relay/send relay-open ["test"])
f-reply (future (async/<!! chan)) f-reply (future (async/<!! chan))
reply (deref f-reply 1000 :timeout) reply (deref f-reply 1000 :timeout)
_ (relay/close relay-open)] _ (relay/close relay-open)]
(should= [["NOTICE" "could not parse command"] (should= ["NOTICE" "could not parse command"] reply)))
"wss://relay.damus.io"]
reply)))
) )

View File

@ -12,7 +12,7 @@
(def migration-level 9) (def migration-level 9)
(def version "202212091526") (def version "202212091526")
(def test-run? false) (def test-run? true)
;---configuration files ;---configuration files
(def private-directory (atom "private")) (def private-directory (atom "private"))
(def migration-filename (atom "private/migration")) (def migration-filename (atom "private/migration"))

View File

@ -1,12 +1,14 @@
(ns more-speech.nostr.protocol (ns more-speech.nostr.protocol
(:require [clojure.data.json :as json] (:require [clojure.data.json :as json]
[clojure.core.async :as async] [clojure.core.async :as async]
[clojure.stacktrace :as st]
[more-speech.relay :as relay]
[more-speech.websocket-relay :as ws-relay]
[more-speech.ui.swing.ui-context :refer :all] [more-speech.ui.swing.ui-context :refer :all]
[more-speech.nostr.events :as events] [more-speech.nostr.events :as events]
[more-speech.nostr.relays :refer [relays]] [more-speech.nostr.relays :refer [relays]]
[more-speech.nostr.util :as util] [more-speech.nostr.util :as util]
[more-speech.user-configuration :as user-configuration] [more-speech.user-configuration :as user-configuration]
[clojure.stacktrace :as st]
[more-speech.config :as config]) [more-speech.config :as config])
(:import (java.util Date) (:import (java.util Date)
(java.text SimpleDateFormat) (java.text SimpleDateFormat)
@ -14,7 +16,6 @@
(java.net URI) (java.net URI)
(java.nio ByteBuffer))) (java.nio ByteBuffer)))
(defn send-to [^WebSocket conn msg] (defn send-to [^WebSocket conn msg]
(try (try
(let [msg (events/to-json msg)] (let [msg (events/to-json msg)]
@ -162,8 +163,8 @@
(defn connect-to-relays [] (defn connect-to-relays []
(doseq [url (keys @relays)] (doseq [url (keys @relays)]
(let [relay (get @relays url) (let [relay-config (get @relays url)
should-connect? (or (:read relay) (:write relay)) should-connect? (or (:read relay-config) (:write relay-config))
connection (if should-connect? connection (if should-connect?
(connect-to-relay url) (connect-to-relay url)
nil)] nil)]

View File

@ -1,7 +1,6 @@
(ns more-speech.websocket-relay (ns more-speech.websocket-relay
(:require [more-speech (:require [more-speech
[relay :as relay]] [relay :as relay]]
[clojure.core.async :as async]
[clojure.data.json :as json]) [clojure.data.json :as json])
(:import (java.net.http HttpClient WebSocket$Listener WebSocket) (:import (java.net.http HttpClient WebSocket$Listener WebSocket)
(java.net URI))) (java.net URI)))
@ -9,21 +8,20 @@
(defn to-json [o] (defn to-json [o]
(json/write-str o :escape-slash false :escape-unicode false)) (json/write-str o :escape-slash false :escape-unicode false))
(defn make [url relay-channel] (defn make [url recv-f]
{::relay/type ::websocket {::relay/type ::websocket
::url url ::url url
::chan relay-channel ::recv-f recv-f
::socket nil ::socket nil
::open? false}) ::open? false})
(defn handle-text [{:keys [buffer relay]} data last] (defn handle-text [{:keys [buffer relay]} data last]
(let [{::keys [url chan]} relay] (let [{::keys [url recv-f]} relay]
(.append buffer (.toString data)) (.append buffer (.toString data))
(when last (when last
(try (try
(let [envelope (json/read-str (.toString buffer))] (let [envelope (json/read-str (.toString buffer))]
(async/>!! chan [envelope url]) (recv-f envelope))
)
(catch Exception e (catch Exception e
(prn 'onText url (.getMessage e)) (prn 'onText url (.getMessage e))
(prn (.toString buffer)))) (prn (.toString buffer))))