wip some initial relay bootstrap logic
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -8,6 +8,13 @@
|
||||
import SwiftUI
|
||||
import Starscream
|
||||
|
||||
let BOOTSTRAP_RELAYS = [
|
||||
"wss://relay.damus.io",
|
||||
"wss://nostr-pub.wellorder.net",
|
||||
"wss://nostr-relay.freeberty.net",
|
||||
"wss://nostr-relay.untethr.me",
|
||||
]
|
||||
|
||||
struct TimestampedProfile {
|
||||
let profile: Profile
|
||||
let timestamp: Int64
|
||||
@@ -327,14 +334,11 @@ struct ContentView: View {
|
||||
|
||||
func connect() {
|
||||
let pool = RelayPool()
|
||||
|
||||
add_relay(pool, "wss://relay.damus.io")
|
||||
//add_relay(pool, "wss://nostr-pub.wellorder.net")
|
||||
//add_relay(pool, "wss://nostr.bitcoiner.social")
|
||||
//add_relay(pool, "ws://monad.jb55.com:8080")
|
||||
//add_relay(pool, "wss://nostr-relay.freeberty.net")
|
||||
//add_relay(pool, "wss://nostr-relay.untethr.me")
|
||||
|
||||
|
||||
for relay in BOOTSTRAP_RELAYS {
|
||||
add_relay(pool, relay)
|
||||
}
|
||||
|
||||
pool.register_handler(sub_id: sub_id, handler: home.handle_event)
|
||||
|
||||
self.damus_state = DamusState(pool: pool, keypair: keypair,
|
||||
|
||||
@@ -142,7 +142,7 @@ class HomeModel: ObservableObject {
|
||||
self.loading = true
|
||||
send_initial_filters(relay_id: relay_id)
|
||||
} else {
|
||||
self.loading = true
|
||||
//remove_bootstrap_nodes(damus_state)
|
||||
send_home_filters(relay_id: relay_id)
|
||||
}
|
||||
case .error(let merr):
|
||||
@@ -425,3 +425,27 @@ func load_our_relays(our_pubkey: String, pool: RelayPool, ev: NostrEvent) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func remove_bootstrap_nodes(_ damus_state: DamusState) {
|
||||
guard let contacts = damus_state.contacts.event else {
|
||||
return
|
||||
}
|
||||
|
||||
guard let relays = decode_json_relays(contacts.content) else {
|
||||
return
|
||||
}
|
||||
|
||||
let descriptors = relays.reduce(into: []) { arr, kv in
|
||||
guard let url = URL(string: kv.key) else {
|
||||
return
|
||||
}
|
||||
arr.append(RelayDescriptor(url: url, info: kv.value))
|
||||
}
|
||||
|
||||
for relay in BOOTSTRAP_RELAYS {
|
||||
if !(descriptors.contains { ($0 as! RelayDescriptor).url.absoluteString == relay }) {
|
||||
damus_state.pool.remove_relay(relay)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
damus/Models/LocalUserConfig.swift
Normal file
14
damus/Models/LocalUserConfig.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// LocalUserConfig.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2022-06-15.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
struct LocalUserConfig: Codable {
|
||||
let relays: [RelayDescriptor]
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ struct RelayInfo: Codable {
|
||||
static let rw = RelayInfo(read: true, write: true)
|
||||
}
|
||||
|
||||
struct RelayDescriptor {
|
||||
struct RelayDescriptor: Codable {
|
||||
let url: URL
|
||||
let info: RelayInfo
|
||||
}
|
||||
|
||||
@@ -45,9 +45,25 @@ class RelayPool {
|
||||
}
|
||||
|
||||
func register_handler(sub_id: String, handler: @escaping (String, NostrConnectionEvent) -> ()) {
|
||||
|
||||
self.handlers.append(RelayHandler(sub_id: sub_id, callback: handler))
|
||||
}
|
||||
|
||||
|
||||
func remove_relay(_ relay_id: String) {
|
||||
var i: Int = 0
|
||||
|
||||
self.disconnect(to: [relay_id])
|
||||
|
||||
for relay in relays {
|
||||
if relay.id == relay_id {
|
||||
relays.remove(at: i)
|
||||
break
|
||||
}
|
||||
|
||||
i += 1
|
||||
}
|
||||
}
|
||||
|
||||
func add_relay(_ url: URL, info: RelayInfo) throws {
|
||||
let relay_id = get_relay_id(url)
|
||||
if get_relay(relay_id) != nil {
|
||||
|
||||
Reference in New Issue
Block a user