Create relays/relays structure in an atom, and update it with connections and subscribe status.

This commit is contained in:
Robert C. Martin 2022-05-18 11:43:08 -05:00
parent c42949ae2a
commit 5c696a9b53
4 changed files with 82 additions and 28 deletions

View File

@ -0,0 +1,7 @@
(ns more-speech.nostr.relays-spec
(:require [speclj.core :refer :all]
[more-speech.nostr.relays :refer :all]))
(describe "The relays structure"
)

View File

@ -1,26 +1,14 @@
(ns more-speech.nostr.protocol
(:require [clojure.data.json :as json]
[clojure.core.async :as async]
[more-speech.nostr.events :as events])
[more-speech.nostr.events :as events]
[more-speech.nostr.relays :refer [relays]])
(:import (java.util Date)
(java.text SimpleDateFormat)
(java.net.http WebSocket HttpClient WebSocket$Listener)
(java.net URI)
))
(def relays ["wss://nostr-pub.wellorder.net" ;*
;"wss://expensive-relay.fiatjaf.com"
"wss://wlvs.space"
"wss://nostr.rocks"
;"wss://nostr-relay.herokuapp.com"
"wss://freedom-relay.herokuapp.com/ws" ;*
;"wss://nodestr-relay.dolu.dev/ws"
;"wss://nostrrr.bublina.eu.org"
;"wss://nostr-relay.freeberty.ne"
"ws://nostr.rocks:7448" ;*
"ws://nostr-pub.wellorder.net:7000"
])
(defn send-to [^WebSocket conn msg]
(let [msg (events/to-json msg)]
(println "sending:" msg)
@ -101,26 +89,34 @@
(prn 'on-send-close-error (:reason e)))))
(defn get-events [event-agent]
(let [connections (map #(connect-to-relay % event-agent) relays)
connections (filter some? connections)
id "more-speech"
(doseq [url (keys @relays)]
(let [connection (connect-to-relay url event-agent)]
(swap! relays assoc-in [url :connection] connection)))
(let [id "more-speech"
date (make-date "04/20/2022")
send-chan (:send-chan @event-agent)
send-url (first (keys @relays))
send-connection (get-in @relays [send-url :connection])
]
(prn date (format-time date))
(doseq [conn connections]
(unsubscribe conn id)
(subscribe conn id date))
(loop [msg (async/<!! send-chan)]
(condp = (first msg)
(doseq [url (keys @relays)]
(let [conn (get-in @relays [url :connection])]
(when (some? conn)
(unsubscribe conn id)
(subscribe conn id date))
(swap! relays assoc-in [url :subscribed] true)))
(loop [[type msg] (async/<!! send-chan)]
(condp = type
:closed nil
:event
(do
(send-to (first connections) (second msg))
(send-to send-connection msg)
(recur (async/<!! send-chan)))))
(doseq [conn connections]
(close-connection conn id)
)
(doseq [url (keys @relays)]
(let [conn (get-in @relays [url :connection])]
(when (some? conn)
(prn 'closing url)
(close-connection conn id))))
(Thread/sleep 100))
(prn 'done)
)

View File

@ -0,0 +1,51 @@
(ns more-speech.nostr.relays)
(def old-relays ["wss://nostr-pub.wellorder.net"
;"wss://expensive-relay.fiatjaf.com"
"wss://wlvs.space"
"wss://nostr.rocks"
;"wss://nostr-relay.herokuapp.com"
"wss://freedom-relay.herokuapp.com/ws"
;"wss://nodestr-relay.dolu.dev/ws"
;"wss://nostrrr.bublina.eu.org"
;"wss://nostr-relay.freeberty.ne"
"ws://nostr.rocks:7448"
"ws://nostr-pub.wellorder.net:7000"
])
(def relays (atom {"wss://nostr-pub.wellorder.net"
{:read true
:write true
:connection nil
:subscribed false}
"wss://wlvs.space"
{:read true
:write true
:connection nil
:subscribed false}
"wss://nostr.rocks"
{:read true
:write true
:connection nil
:subscribed false}
"wss://freedom-relay.herokuapp.com/ws"
{:read true
:write true
:connection nil
:subscribed false}
"ws://nostr.rocks:7448"
{:read true
:write true
:connection nil
:subscribed false}
"ws://nostr-pub.wellorder.net:7000"
{:read true
:write true
:connection nil
:subscribed false}
}))
(defn set-connections [relays conn-status]
(map #(assoc %1 :connected %2) relays conn-status))

View File

@ -1,6 +1,6 @@
(ns more-speech.ui.swing.relay-panel
(:use [seesaw core])
(:require [more-speech.nostr.protocol :as protocol]))
(:require [more-speech.nostr.relays :refer [relays]]))
(defn make-relay-control-panel [relay]
(let [read-check-box (checkbox :text "R")
@ -13,6 +13,6 @@
control-panel))
(defn make-relay-panel []
(let [relay-control-panels (for [relay protocol/relays] (make-relay-control-panel relay))
(let [relay-control-panels (for [url (keys @relays)] (make-relay-control-panel url))
relay-panel (vertical-panel :items relay-control-panels)]
relay-panel))