138 lines
4.3 KiB
HTML
138 lines
4.3 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title></title>
|
|
<script>
|
|
function hubConnection(url) {
|
|
var ws = new WebSocket(url);
|
|
var id = 0;
|
|
var calls = {};
|
|
var methods = {};
|
|
|
|
ws.onopen = function () {
|
|
console.log('Opened!');
|
|
};
|
|
|
|
ws.onmessage = function (event) {
|
|
|
|
let response = {};
|
|
|
|
if (document.getElementById('formatType').value == 'line')
|
|
{
|
|
let parts = evt.data.split(',');
|
|
if (evt.data[0] == 'R')
|
|
{
|
|
response.Id = parts[0].slice(2);
|
|
response.Result = parts[1].slice(1);
|
|
}
|
|
else
|
|
{
|
|
response.Method = parts[1].slice(1);
|
|
response.Arguments = parts.slice(2).join();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
response = JSON.parse(evt.data);
|
|
}
|
|
|
|
// Response
|
|
if (typeof response.id === "number") {
|
|
var cb = calls[response.Id];
|
|
|
|
delete calls[response.Id];
|
|
|
|
if (response.error) {
|
|
cb.error(response.error);
|
|
}
|
|
else {
|
|
cb.success(response.result);
|
|
}
|
|
}
|
|
else {
|
|
// Reverse JSON RPC
|
|
methods[response.Method](response.Arguments);
|
|
}
|
|
};
|
|
|
|
ws.onclose = function (event) {
|
|
console.log('Closed!');
|
|
};
|
|
|
|
this.invoke = function (method, args, formatType) {
|
|
return new Promise((resolve, reject) => {
|
|
calls[id] = { success: resolve, error: reject };
|
|
if (formatType == 'line') {
|
|
ws.send(`CI${id},M${method},${args.join()}\n`);
|
|
}
|
|
else {
|
|
ws.send(JSON.stringify({ method: method, arguments: args, id: id }));
|
|
}
|
|
id++;
|
|
});
|
|
};
|
|
|
|
this.on = function (method, fn) {
|
|
methods[method] = fn;
|
|
};
|
|
}
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
let connectButton = document.getElementById('connect');
|
|
connectButton.addEventListener('click', () => {
|
|
run(document.getElementById('format').value, document.getElementById('formatType').value);
|
|
connectButton.disabled = true;
|
|
});
|
|
});
|
|
|
|
function run(format, formatType) {
|
|
var conn = new hubConnection(`ws://${document.location.host}/hubs/ws?format=${format}&formatType=${formatType}`);
|
|
|
|
conn.on('Send', function (message) {
|
|
var child = document.createElement('li');
|
|
child.innerText = message;
|
|
document.getElementById('messages').appendChild(child);
|
|
});
|
|
|
|
document.getElementById('sendmessage').addEventListener('submit', event => {
|
|
let data = document.getElementById('data').value;
|
|
|
|
conn.invoke('SocketsSample.Hubs.Chat.Send', [data], formatType).catch(err => {
|
|
var child = document.createElement('li');
|
|
child.style.color = 'red';
|
|
child.innerText = err;
|
|
document.getElementById('messages').appendChild(child);
|
|
});
|
|
|
|
event.preventDefault();
|
|
});
|
|
};
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<h1>WebSockets</h1>
|
|
<div>
|
|
<select id="format">
|
|
<option value="text">text</option>
|
|
<option value="binary">binary</option>
|
|
</select>
|
|
|
|
<select id="formatType">
|
|
<option value="json">json</option>
|
|
<option value="line">line</option>
|
|
</select>
|
|
|
|
<input type="button" id="connect" value="Connect" />
|
|
</div>
|
|
|
|
<form id="sendmessage">
|
|
<input type="text" id="data" />
|
|
<input type="submit" value="Send" />
|
|
</form>
|
|
|
|
<ul id="messages"></ul>
|
|
</body>
|
|
</html> |