implement connection handlers

This commit is contained in:
marlon-erler
2024-07-19 18:17:00 +02:00
parent f1fd6f55f8
commit 9e74d0227a
3 changed files with 93 additions and 34 deletions
+20 -6
View File
@@ -37,13 +37,27 @@ export default class ConnectionModel {
return this.udn.sendMessage(chatMessage.channel, stringifiedBody);
};
handleMessage = (data: Message) => {};
// setup
constructor() {
constructor(configuration: ConnectionModelConfiguration) {
// create frontend
this.udn = new UDNFrontend();
this.udn.onmessage = this.handleMessage;
this.udn.onconnect = this.handleConnectionChange;
this.udn.ondisconnect = this.handleConnectionChange;
// setup handlers
this.udn.onmessage = (data: Message) => {
configuration.messageHandler(data);
};
this.udn.onconnect = () => {
this.handleConnectionChange();
configuration.connectionChangeHandler();
};
this.udn.ondisconnect = () => {
this.handleConnectionChange();
configuration.connectionChangeHandler();
};
}
}
export interface ConnectionModelConfiguration {
connectionChangeHandler: () => void;
messageHandler: (data: Message) => void;
}
+30 -14
View File
@@ -1,27 +1,43 @@
import * as React from 'bloatless-react';
import * as React from "bloatless-react";
import ConnectionModel from '../Model/connectionModel';
// model
const connectionModel = new ConnectionModel();
import ConnectionModel from "../Model/connectionModel";
// state
const address = new React.State("");
const addressInput = React.restoreState("maintenance-address", "");
const connectedAddress = new React.State("");
const isConnected = new React.State(false);
// model
const connectionModel = new ConnectionModel({
connectionChangeHandler() {
isConnected.value = connectionModel.isConnected;
connectedAddress.value = connectionModel.address ?? "---";
},
messageHandler(data) {
console.log(data);
},
});
// methods
function connect() {
connectionModel.connect(address.value);
connectionModel.connect(addressInput.value);
}
function disconnect() {
connectionModel.disconnect();
connectionModel.disconnect();
}
// view
document.querySelector("main")!.append(
<div class="flex-column">
<input bind:value={address}></input>
<button on:click={connect}>Connect</button>
<button on:click={disconnect}>Disconnect</button>
</div>
)
<div class="flex-column">
<input bind:value={addressInput}></input>
<button on:click={connect} toggle:disabled={isConnected}>
Connect
</button>
<button on:click={disconnect}>Disconnect</button>
<hr></hr>
<span subscribe:innerText={connectedAddress}></span>
</div>
);