a43d183b4f
* Compiles but runtime time fails * wip * Beginning of clean-up - creation of config to keep things together * Removed unused module * Removed hardcoded constants * Easier way of sending binary messages * WIP cleanup before machine switch * Upgrade wasm-bindgen to 0.2.83 * Fixed compilation warnings for wasm client * all clients compiling without warnings * disabling topology refresh in wasm * Added a config option to disable loop cover traffic stream * config changes * Make webassembly work in a web worker - `wasm-timer` modified to work in web worker - add worker target to webpack - add client to call from HTML - update README to build WASM for bundling (this does not build ES modules) * Restored topology refreshing * correctly polling items in the wasm delay_queue * Allow client to read up to 8 messages at once from gateway connection (#1669) * Allow client to read up to 8 messages at once from gateway connection * Importing tokio::select in wasm32 target * Updated changelog * missing imports * Introduced disable_main_poisson_packet_distribution to force real_traffic_stream to disable poisson sending (#1664) * Introduced disable_main_poisson_packet_distribution to force real_traffic_stream to disable poisson sending * Updated changelog * Adjusting default settings * Introduced a client-configurable option to force it to use extended packet size * local adjustments * Removed warning associated with receiving extended packets * Minimal v2-required changes * Updated changelog * explicitly allowing clippy drop_non_drop Co-authored-by: Mark Sinclair <mmsinclair@gmail.com>
126 lines
3.6 KiB
JavaScript
126 lines
3.6 KiB
JavaScript
// Copyright 2020-2022 Nym Technologies SA
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
class WebWorkerClient {
|
|
worker = null;
|
|
|
|
constructor() {
|
|
this.worker = new Worker('./worker.js');
|
|
|
|
this.worker.onmessage = (ev) => {
|
|
if (ev.data && ev.data.kind) {
|
|
switch (ev.data.kind) {
|
|
case 'Ready':
|
|
const { selfAddress } = ev.data.args;
|
|
displaySenderAddress(selfAddress);
|
|
break;
|
|
case 'ReceiveMessage':
|
|
const { message } = ev.data.args;
|
|
displayReceived(message);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
sendMessage = (message, recipient) => {
|
|
if (!this.worker) {
|
|
console.error('Could not send message because worker does not exist');
|
|
return;
|
|
}
|
|
|
|
this.worker.postMessage({
|
|
kind: 'SendMessage',
|
|
args: {
|
|
message, recipient,
|
|
},
|
|
});
|
|
};
|
|
}
|
|
|
|
let client = null;
|
|
|
|
async function main() {
|
|
client = new WebWorkerClient();
|
|
|
|
const sendButton = document.querySelector('#send-button');
|
|
sendButton.onclick = function() {
|
|
sendMessageTo();
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Create a Sphinx packet and send it to the mixnet through the gateway node.
|
|
*
|
|
* Message and recipient are taken from the values in the user interface.
|
|
*
|
|
* @param {Client} nymClient the nym client to use for message sending
|
|
*/
|
|
async function sendMessageTo() {
|
|
const message = document.getElementById('message').value;
|
|
const recipient = document.getElementById('recipient').value;
|
|
|
|
await client.sendMessage(message, recipient);
|
|
displaySend(message);
|
|
}
|
|
|
|
/**
|
|
* Display messages that have been sent up the websocket. Colours them blue.
|
|
*
|
|
* @param {string} message
|
|
*/
|
|
function displaySend(message) {
|
|
let timestamp = new Date().toISOString().substr(11, 12);
|
|
|
|
let sendDiv = document.createElement('div');
|
|
let paragraph = document.createElement('p');
|
|
paragraph.setAttribute('style', 'color: blue');
|
|
let paragraphContent = document.createTextNode(timestamp + ' sent >>> ' + message);
|
|
paragraph.appendChild(paragraphContent);
|
|
|
|
sendDiv.appendChild(paragraph);
|
|
document.getElementById('output').appendChild(sendDiv);
|
|
}
|
|
|
|
/**
|
|
* Display received text messages in the browser. Colour them green.
|
|
*
|
|
* @param {string} message
|
|
*/
|
|
function displayReceived(message) {
|
|
const content = message;
|
|
|
|
let timestamp = new Date().toISOString().substr(11, 12);
|
|
let receivedDiv = document.createElement('div');
|
|
let paragraph = document.createElement('p');
|
|
paragraph.setAttribute('style', 'color: green');
|
|
let paragraphContent = document.createTextNode(timestamp + ' received >>> ' + content);
|
|
// let paragraphContent = document.createTextNode(timestamp + " received >>> " + content + ((replySurb != null) ? "Reply SURB was attached here (but we can't do anything with it yet" : " (NO REPLY-SURB AVAILABLE)"))
|
|
paragraph.appendChild(paragraphContent);
|
|
receivedDiv.appendChild(paragraph);
|
|
document.getElementById('output').appendChild(receivedDiv);
|
|
}
|
|
|
|
|
|
/**
|
|
* Display the nymClient's sender address in the user interface
|
|
*
|
|
* @param {Client} nymClient
|
|
*/
|
|
function displaySenderAddress(address) {
|
|
document.getElementById('sender').value = address;
|
|
}
|
|
|
|
// Let's get started!
|
|
main(); |