mirror of
https://github.com/BlowaterNostr/blowater.git
synced 2024-10-18 15:43:20 +00:00
relay auto reconnection (#252)
This commit is contained in:
parent
72c333a234
commit
f011aa8aa4
22
UI/app.tsx
22
UI/app.tsx
@ -25,7 +25,7 @@ import { DexieDatabase } from "./dexie-db.ts";
|
||||
import { About } from "./about.tsx";
|
||||
import { ProfileSyncer } from "../features/profile.ts";
|
||||
import { Popover, PopOverInputChannel } from "./components/popover.tsx";
|
||||
import { Channel } from "https://raw.githubusercontent.com/BlowaterNostr/csp/master/csp.ts";
|
||||
import { Channel, sleep } from "https://raw.githubusercontent.com/BlowaterNostr/csp/master/csp.ts";
|
||||
import { GroupChatSyncer, GroupMessageController } from "../features/gm.ts";
|
||||
import { OtherConfig } from "./config-other.ts";
|
||||
import { ProfileGetter } from "./search.tsx";
|
||||
@ -59,7 +59,6 @@ export async function Start(database: DexieDatabase) {
|
||||
popOverInputChan,
|
||||
otherConfig,
|
||||
});
|
||||
await app.initApp();
|
||||
model.app = app;
|
||||
}
|
||||
|
||||
@ -181,7 +180,7 @@ export class App {
|
||||
}
|
||||
})();
|
||||
|
||||
return new App(
|
||||
const app = new App(
|
||||
args.database,
|
||||
args.model,
|
||||
args.ctx,
|
||||
@ -197,9 +196,11 @@ export class App {
|
||||
lamport,
|
||||
dmController,
|
||||
);
|
||||
await app.initApp();
|
||||
return app;
|
||||
}
|
||||
|
||||
initApp = async () => {
|
||||
private initApp = async () => {
|
||||
console.log("App.initApp");
|
||||
|
||||
///////////////////////////////////
|
||||
@ -236,6 +237,19 @@ export class App {
|
||||
this.relayConfig.saveToLocalStorage(this.ctx);
|
||||
}
|
||||
})();
|
||||
(async () => {
|
||||
for (;;) {
|
||||
await sleep(3000);
|
||||
const urls = this.pool.getClosedRelaysThatShouldBeReconnected();
|
||||
for (const url of urls) {
|
||||
await this.pool.removeRelay(url);
|
||||
const err = await this.pool.addRelayURL(url);
|
||||
if (err instanceof Error) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
this.otherConfig.syncFromRelay(this.pool, this.ctx);
|
||||
|
||||
|
@ -123,7 +123,6 @@ export async function* UI_Interaction_Update(args: {
|
||||
popOverInputChan: args.popOver,
|
||||
otherConfig,
|
||||
});
|
||||
await app.initApp();
|
||||
model.app = app;
|
||||
} else {
|
||||
console.error("failed to sign in");
|
||||
|
@ -54,8 +54,7 @@ Deno.test("Relay Config", async () => {
|
||||
assertEquals(relayConfig.getRelayURLs(), new Set(["wss://relay.damus.io", "wss://somewhere"]));
|
||||
}
|
||||
|
||||
const pri = PrivateKey.Generate();
|
||||
const ctx = InMemoryAccountContext.New(pri);
|
||||
const ctx = InMemoryAccountContext.Generate();
|
||||
const event = await relayConfig.toNostrEvent(ctx);
|
||||
if (event instanceof Error) fail(event.message);
|
||||
|
||||
@ -69,8 +68,7 @@ Deno.test("Relay Config", async () => {
|
||||
{
|
||||
const err = await relayConfig.syncWithPool(pool);
|
||||
if (err != undefined) {
|
||||
assertEquals(err.length, 1);
|
||||
assertEquals(err[0].message, "wss://somewhere has been closed, can't wait for it to open");
|
||||
assertEquals(err.message, "wss://somewhere has been closed, can't wait for it to open");
|
||||
}
|
||||
|
||||
// add one relay to the pool directly
|
||||
@ -85,8 +83,7 @@ Deno.test("Relay Config", async () => {
|
||||
// will remove urls that's in the pool but not in the config
|
||||
const err2 = await relayConfig.syncWithPool(pool);
|
||||
if (err2 != undefined) {
|
||||
assertEquals(err2.length, 1);
|
||||
assertEquals(err2[0].message, "wss://somewhere has been closed, can't wait for it to open");
|
||||
assertEquals(err2.message, "wss://somewhere has been closed, can't wait for it to open");
|
||||
}
|
||||
assertEquals(pool.getRelays().map((r) => r.url), ["wss://relay.damus.io"]); // wirednet is removed
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ export class RelayConfig {
|
||||
save() {
|
||||
return Automerge.save(this.config);
|
||||
}
|
||||
saveAsHex() {
|
||||
private saveAsHex() {
|
||||
const bytes = this.save();
|
||||
return secp256k1.utils.bytesToHex(bytes);
|
||||
}
|
||||
@ -118,22 +118,18 @@ export class RelayConfig {
|
||||
}
|
||||
|
||||
async syncWithPool(pool: ConnectionPool) {
|
||||
const errors = [];
|
||||
for (const url of Object.keys(this.config)) {
|
||||
const err = await pool.addRelayURL(url);
|
||||
if (err instanceof RelayAlreadyRegistered) {
|
||||
continue;
|
||||
} else if (err instanceof Error) {
|
||||
errors.push(err);
|
||||
}
|
||||
}
|
||||
for (const r of pool.getRelays()) {
|
||||
if (this.config[r.url] == undefined) {
|
||||
await pool.removeRelay(r.url);
|
||||
}
|
||||
}
|
||||
if (errors.length > 0) {
|
||||
return errors;
|
||||
for (const url of Object.keys(this.config)) {
|
||||
const err = await pool.addRelayURL(url);
|
||||
if (err instanceof RelayAlreadyRegistered) {
|
||||
continue;
|
||||
} else if (err instanceof Error) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ export class RelaySetting extends Component<RelaySettingProp, RelaySettingState>
|
||||
const err = await this.props.relayConfig.syncWithPool(this.props.relayPool);
|
||||
if (err != undefined) {
|
||||
this.setState({
|
||||
error: err.map((e) => e.message).join("\n"),
|
||||
error: err.message,
|
||||
});
|
||||
}
|
||||
this.setState({
|
||||
@ -151,7 +151,7 @@ export class RelaySetting extends Component<RelaySettingProp, RelaySettingState>
|
||||
const err = await props.relayConfig.syncWithPool(props.relayPool);
|
||||
if (err != undefined) {
|
||||
this.setState({
|
||||
error: err.map((e) => e.message).join("\n"),
|
||||
error: err.message,
|
||||
});
|
||||
}
|
||||
this.setState({
|
||||
@ -221,7 +221,7 @@ export class RelaySetting extends Component<RelaySettingProp, RelaySettingState>
|
||||
const err = await props.relayConfig.syncWithPool(props.relayPool);
|
||||
if (err != undefined) {
|
||||
this.setState({
|
||||
error: err.map((e) => e.message).join("\n"),
|
||||
error: err.message,
|
||||
});
|
||||
}
|
||||
this.setState({
|
||||
|
Loading…
Reference in New Issue
Block a user