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

View File

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

View File

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

View File

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