MQL5Book/Web/wspublisher_client.js
super.admin 1c8e83ce31 convert
2025-05-30 16:09:41 +02:00

90 lines
2.6 KiB
JavaScript

//+------------------------------------------------------------------+
//| wspublisher_client.js |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
const proto = window.location.protocol.startsWith('http') ?
window.location.protocol.replace('http', 'ws') : 'ws:';
var ws;
const button = document.querySelectorAll('button');
const user = document.getElementById('user');
function disconnect()
{
user.innerText = 'disconnected';
button[0].innerText = 'Connect';
button[1].disabled = true;
}
button[0].addEventListener('click', (event) =>
{
if(event.target.innerText == 'Connect')
{
ws = new WebSocket(proto + '//' + window.location.hostname + ':9000',
'X-MQL5-publisher-'
+ document.getElementById('pub_id').value + "-"
+ document.getElementById('pub_key').value);
ws.onopen = function()
{
console.log('Connected');
};
ws.onclose = function()
{
console.log('Disconnected');
disconnect();
}
ws.onmessage = function(message) // notifications from server
{
console.log('Message: %s', message.data);
const obj = ((text) =>
{
try
{
return JSON.parse(text);
}
catch(e)
{
console.log(e.message); return null;
}
})(message.data);
if(obj)
{
// const parts = message.data.split('#');
document.getElementById('origin').innerText = obj.origin; // parts[0];
document.getElementById('echo').value = obj.msg; // parts[1];
if(obj.origin == 'Server' && obj.msg && obj.msg.startsWith('Hello,'))
{
user.innerText = obj.msg.substring(6);
}
}
};
ws.onerror = function(e)
{
console.log(e);
disconnect();
}
user.innerText = 'connecting...';
event.target.innerText = 'Submit';
button[1].disabled = false;
}
else
{
const x = document.getElementById('message').value;
if(x) ws.send(x);
}
});
button[1].addEventListener('click', (event) =>
{
if(ws) ws.close();
disconnect();
});
//+------------------------------------------------------------------+