diff --git a/dist/index.js b/dist/index.js index cad67d32..280df934 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1134,7 +1134,7 @@ } const cannotConnect = createProxyState( [connectionViewModel2.isConnected], - () => connectionViewModel2.connectionModel.address == address + () => connectionViewModel2.isConnected.value == true && connectionViewModel2.connectionModel.address == address ); return DeletableListItem( address, @@ -1295,6 +1295,10 @@ get address() { return this.udn.ws?.url; } + connectionChangeHandler = () => { + }; + messageHandler = () => { + }; // connection connect = (address) => { this.udn.connect(address); @@ -1303,13 +1307,16 @@ this.udn.disconnect(); }; handleMessage = (data) => { + this.messageHandler(data); }; handleConnectionChange = () => { console.log("connection status:", this.isConnected, this.address); + this.connectionChangeHandler(); if (this.isConnected == false) return; if (this.address) { this.storeAddress(this.address); } + this.sendMessagesInOutbox(); }; // outbox getOutboxMessags = () => { @@ -1323,7 +1330,7 @@ ]); if (message == void 0) continue; if (checkIsValidObject(message) == false) continue; - message.push(message); + messages.push(message); } return messages; }; @@ -1370,6 +1377,13 @@ const dirPath = storageKeys.previousAddresses; return this.storageModel.list(dirPath); } + // handlers + setConnectionChangeHandler = (handler) => { + this.connectionChangeHandler = handler; + }; + setMessageHandler = (handler) => { + this.messageHandler = handler; + }; // setup constructor(storageModel2) { this.udn = new UDNFrontend(); @@ -1413,8 +1427,8 @@ if (this.connectionModel.isConnected == false) return; if (this.connectionModel.address) { this.serverAddressInput.value = this.connectionModel.address; + this.previousAddresses.add(this.connectionModel.address); } - this.updatePreviousAddresses(); }; messageHandler = (data) => { }; @@ -1447,6 +1461,8 @@ constructor(connectionModel2) { this.connectionModel = connectionModel2; this.updatePreviousAddresses(); + connectionModel2.setConnectionChangeHandler(this.connectionChangeHandler); + connectionModel2.setMessageHandler(this.messageHandler); } }; diff --git a/src/Model/connectionModel.ts b/src/Model/connectionModel.ts index 5f647d80..a9264933 100644 --- a/src/Model/connectionModel.ts +++ b/src/Model/connectionModel.ts @@ -20,6 +20,9 @@ export default class ConnectionModel { return this.udn.ws?.url; } + connectionChangeHandler: () => void = () => {}; + messageHandler: (data: Message) => void = () => {}; + // connection connect = (address: string): void => { this.udn.connect(address); @@ -29,15 +32,21 @@ export default class ConnectionModel { this.udn.disconnect(); }; - handleMessage = (data: Message): void => {} + handleMessage = (data: Message): void => { + this.messageHandler(data); + }; handleConnectionChange = (): void => { console.log("connection status:", this.isConnected, this.address); + this.connectionChangeHandler(); + if (this.isConnected == false) return; if (this.address) { this.storeAddress(this.address); } + + this.sendMessagesInOutbox(); }; // outbox @@ -54,7 +63,7 @@ export default class ConnectionModel { if (message == undefined) continue; if (checkIsValidObject(message) == false) continue; - message.push(message); + messages.push(message); } return messages; @@ -115,6 +124,15 @@ export default class ConnectionModel { return this.storageModel.list(dirPath); } + // handlers + setConnectionChangeHandler = (handler: () => void): void => { + this.connectionChangeHandler = handler; + }; + + setMessageHandler = (handler: (data: Message) => void): void => { + this.messageHandler = handler; + }; + // setup constructor(storageModel: StorageModel) { // create frontend @@ -132,4 +150,4 @@ export default class ConnectionModel { this.handleConnectionChange(); }; } -} \ No newline at end of file +} diff --git a/src/View/Modals/connectionModal.tsx b/src/View/Modals/connectionModal.tsx index b534fad9..9a9dee6e 100644 --- a/src/View/Modals/connectionModal.tsx +++ b/src/View/Modals/connectionModal.tsx @@ -14,7 +14,9 @@ export function ConnectionModal(connectionViewModel: ConnectionViewModel) { const cannotConnect = React.createProxyState( [connectionViewModel.isConnected], - () => connectionViewModel.connectionModel.address == address + () => + connectionViewModel.isConnected.value == true && + connectionViewModel.connectionModel.address == address ); return DeletableListItem( diff --git a/src/ViewModel/connectionViewModel.tsx b/src/ViewModel/connectionViewModel.tsx index 1c2449bd..73685633 100644 --- a/src/ViewModel/connectionViewModel.tsx +++ b/src/ViewModel/connectionViewModel.tsx @@ -38,8 +38,8 @@ export default class ConnectionViewModel { if (this.connectionModel.address) { this.serverAddressInput.value = this.connectionModel.address; + this.previousAddresses.add(this.connectionModel.address); } - this.updatePreviousAddresses(); }; messageHandler = (data: Message): void => {}; @@ -80,5 +80,8 @@ export default class ConnectionViewModel { constructor(connectionModel: ConnectionModel) { this.connectionModel = connectionModel; this.updatePreviousAddresses(); + + connectionModel.setConnectionChangeHandler(this.connectionChangeHandler); + connectionModel.setMessageHandler(this.messageHandler); } }