Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+4
View File
@@ -0,0 +1,4 @@
[Dolphin]
Timestamp=2022,3,16,16,32,14
Version=4
ViewMode=1
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

+40
View File
@@ -0,0 +1,40 @@
body{
width: 99%;
height: auto;
margin: 10px;
}
h1 {
margin-left: 10px;
color: white;
padding: 10px;
}
#header {
width: 100%;
height: auto;
background-color: rgb(90, 90, 90)
}
.list-lvl1 {
font-size: large;
font-weight: bold;
list-style-type: none;
margin-top: 5px;
margin-bottom: 5px;
}
.list-lvl2 {
font-size: medium;
font-weight: normal;
list-style-type: disc;
padding-top: 0px;
margin-top: 0px;
margin-bottom: 10px;
}
.list-lvl3{
font-size: medium;
list-style-type: circle;
padding-top: 0px;
}
.table-condensed{
font-size: 12px;
}
+50
View File
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>wsTool</title>
<link rel="stylesheet" href="../include/bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="index.css">
</head>
<body>
<div id="header">
<h1 id="headline">
WebSocket Tool
</h1>
</div>
<!--Connect-->
<div class="form-control">
<div class="m-1">
<label class="form-label">IP-Adresse eingeben:</label>
</div>
<div class="row g-3">
<div class="col-auto">
<input class="form-control border-danger" type="text" name="" id="IpInputForm" value="ws://localhost:7300">
</div>
<div class="col-auto">
<button class="btn btn-primary mb-1" onclick="webSocketConnect()">Connect</button>
</div>
</div>
</div>
<br>
<!--Button-->
<div id="ButtonContainer" hidden>
<button class="btn btn-primary btn-lg" onclick="servicePortsInformationRequest()">Send <i>servicePortsInformationRequest</i></button>
</div>
<br>
<!--Liste-->
<div class="form-control" id="ListContainer" hidden>
<ul class="list-lvl1" id="ExerciseList" >
</ul>
</div>
<script src="../include/bootstrap/js/bootstrap.js"></script>
<script src="script.js"></script>
</body>
</html>
+71
View File
@@ -0,0 +1,71 @@
var ws;
var thisURL = window.location;
//HTML-ELemente get
var searchContent = new URLSearchParams (thisURL.search);
var ipInputForm = document.getElementById('iIpInputForm');
var exerciseListContainer = document.getElementById('ExerciseList');
webSocketConnect = function () {
ws = new WebSocket (document.getElementById("IpInputForm").value);
ws.onopen = function () {
document.getElementById("IpInputForm").classList.replace("border-danger", "border-success");
document.getElementById('ButtonContainer').hidden = false;
}
ws.onmessage = function (msg) {
document.getElementById('ListContainer').hidden = false;
var object = (JSON.parse(msg.data)).data;
object.forEach((item, index, array) => {
var exerciseEntry = document.createElement('li');
var managementList = document.createElement('ul');
managementList.id = object[index].exerciseId;
managementList.className = "list-lvl2";
exerciseEntry.innerHTML = "Exercise: " + object[index].exerciseId;
exerciseListContainer.appendChild(exerciseEntry); //Reihenfolge?
exerciseListContainer.appendChild(managementList); //Reihenfolge?
(object[index].services).forEach((item, index2, array) => {
var managementListContainer = document.getElementById (object[index].exerciseId);
var managementEntry = document.createElement('li');
var portList = document.createElement('ul');
portList.id = object[index].exerciseId + object[index].services[index2].name;
portList.className = "list-lvl3";
managementEntry.innerHTML = "Service: " + object[index].services[index2].name;
managementListContainer.appendChild(managementEntry); //Reihenfolge?
managementListContainer.appendChild(portList); //Reihenfolge?
(object[index].services[index2].ports).forEach((item, index3, array) => {
//Query String konstruieren
var queryString = new URLSearchParams();
queryString.append ('exc', object[index].exerciseId);
queryString.append ('svc', object[index].services[index2].nameAbbrevation);
queryString.append ('port', object[index].services[index2].ports[index3].number);
queryString.append ('typeid', object[index].services[index2].ports[index3].typeId);
var portListContainer = document.getElementById (object[index].exerciseId + object[index].services[index2].name);
//Port-Element erstellen
var portLink = document.createElement('a');
portLink.href = 'wsTool.html' + '?' + queryString;
portLink.innerHTML = object[index].services[index2].ports[index3].number;
var portEntry = document.createElement('li');
portEntry.innerHTML = "Port: ";
portEntry.innerHTML += '<a href=' + portLink.toString() +' target="_blank">'+ object[index].services[index2].ports[index3].number; +'</a>';
portEntry.innerHTML += " (TypeID: "+object[index].services[index2].ports[index3].typeId+")";
portListContainer.appendChild(portEntry);
});
});
});
}
ws.onclose = function () {
document.getElementById("IpInputForm").classList.replace("border-success", "border-danger");
}
}
function servicePortsInformationRequest() {
ws.send(JSON.stringify({
type: "servicePortsInformationRequest",
uuid: "UUID"
}));
}
+161
View File
@@ -0,0 +1,161 @@
var buttonsAdded = false;
export function getLongName () {
return "Asset Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
/*
//get Asset State
var getAssetStateContainer = document.createElement("div");
getAssetStateContainer.id = "GetAssetStateContainer";
getAssetStateContainer.className = "py-1";
//Form
var string = '<div class="input-group"><input id="GetAssetState1" type="text" class="form-control border-primary" placeholder="Asset ID"><input id="GetAssetState2" type="text" class="form-control border-primary" placeholder="Asset Tag"><input id="GetAssetState3" type="text" class="form-control border-primary" placeholder="UUID"><button id= "GetAssetStateBtn" class="btn btn-primary" type="button" id="button-addon2">get Asset State</button></div>'
getAssetStateContainer.innerHTML = string;
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (getAssetStateContainer);
//Funktion
document.getElementById("GetAssetStateBtn").addEventListener('click', function() {
getAssetState(webSocket);
});
//get Building State
var getBuildingStateContainer = document.createElement("div");
getBuildingStateContainer.id = "GetBuildingStateContainer";
getBuildingStateContainer.className = "py-1";
//Form
var string = '<div class="input-group"><input id="GetBuildingState1" type="text" class="form-control border-primary" placeholder="Building ID"><input id="GetBuildingState2" type="text" class="form-control border-primary" placeholder="UUID"><button id= "GetBuildingStateBtn" class="btn btn-primary" type="button" id="button-addon2">get Building State</button></div>'
getBuildingStateContainer.innerHTML = string;
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (getBuildingStateContainer);
//Funktion
document.getElementById("GetBuildingStateBtn").addEventListener('click', function() {
getBuildingState(webSocket);
});
//get Building State
var getAssetsContainer = document.createElement("div");
getAssetsContainer.id = "GetAssetsContainer";
getAssetsContainer.className = "py-1";
//Form
var string = '<div class="input-group"><input id="GetAssets1" type="text" class="form-control border-primary" placeholder="Asset Type ID"><input id="GetAssets2" type="text" class="form-control border-primary" placeholder="UUID"><button id= "GetAssetsBtn" class="btn btn-primary" type="button" id="button-addon2">get Assets</button></div>'
getAssetsContainer.innerHTML = string;
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (getAssetsContainer);
//Funktion
document.getElementById("GetAssetsBtn").addEventListener('click', function() {
sendGetAssets(webSocket);
});
*/
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
function sendGetAssets(webSocket) {
webSocket.send(JSON.stringify({
type: "getAssets",
uuid: document.getElementById("GetAssets2").value,
data: {
assetTypeId: document.getElementById("GetAssets1").value
}
}));
}
function getAssetState(webSocket) {
webSocket.send(JSON.stringify({
type: "getAssetState",
assetId: document.getElementById("GetAssetState1").value,
assetTag: document.getElementById("GetAssetState2").value,
uuid: document.getElementById("GetAssetState3").value
}));
}
function getBuildingState(webSocket) {
webSocket.send(JSON.stringify({
type: "getBuildingState",
uuid: document.getElementById("GetBuildingState2").value,
data: {
buildingId: document.getElementById("GetBuildingState1").value
}
}));
}
+87
View File
@@ -0,0 +1,87 @@
var buttonsAdded = false;
export function getLongName () {
return "Building";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var buildingRequestContainer = document.createElement("div");
buildingRequestContainer.id = "buildingRequestContainer";
buildingRequestContainer.className = "py-1";
//Button
var buildingRequestBtn = document.createElement("button");
buildingRequestBtn.id = "buildingRequestBtn";
buildingRequestBtn.classList.add ("btn", "btn-primary");
buildingRequestBtn.innerHTML = "Send <i>BuildingRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (buildingRequestContainer);
(document.getElementById ("buildingRequestContainer")).appendChild (buildingRequestBtn);
//Funktion
document.getElementById("buildingRequestBtn").addEventListener('click', function() {
buildingRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function buildingRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "buildingRequest",
uuid: "UUID"
}));
}
+86
View File
@@ -0,0 +1,86 @@
var buttonsAdded = false;
export function getLongName () {
return "Exercise Event Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
+110
View File
@@ -0,0 +1,110 @@
var buttonsAdded = false;
export function getLongName () {
return "Exercise Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Exercise Information Request
var ExerciseInformationRequestContainer = document.createElement("div");
ExerciseInformationRequestContainer.id = "ExerciseInformationRequestContainer";
ExerciseInformationRequestContainer.className = "py-1";
//Button
var ExerciseInformationRequestBtn = document.createElement("button");
ExerciseInformationRequestBtn.id = "ExerciseInformationRequestBtn";
ExerciseInformationRequestBtn.classList.add ("btn", "btn-primary");
ExerciseInformationRequestBtn.innerHTML = "Send <i>ExerciseInformationRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (ExerciseInformationRequestContainer);
(document.getElementById ("ExerciseInformationRequestContainer")).appendChild (ExerciseInformationRequestBtn);
//Funktion
document.getElementById("ExerciseInformationRequestBtn").addEventListener('click', function() {
exerciseInformationRequest(webSocket);
});
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
//Container fuer Accordion und Table erzeugen
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
//WebSocket-Message in Table
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
cell.innerHTML = item[key[0]];
}
});
//Append
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function exerciseInformationRequest (webSocket) {
webSocket.send(JSON.stringify({
type: "exerciseInformationRequest",
uuid: "UUID"
}));
}
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
+110
View File
@@ -0,0 +1,110 @@
var buttonsAdded = false;
export function getLongName () {
return "File Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//PDF List Request
var pdfListRequestContainer = document.createElement("div");
pdfListRequestContainer.id = "pdfListRequestContainer";
pdfListRequestContainer.className = "py-1";
//Button
var pdfListRequestBtn = document.createElement("button");
pdfListRequestBtn.id = "pdfListRequestBtn";
pdfListRequestBtn.classList.add ("btn", "btn-primary");
pdfListRequestBtn.innerHTML = "Send <i>pdfListRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (pdfListRequestContainer);
(document.getElementById ("pdfListRequestContainer")).appendChild (pdfListRequestBtn);
//Funktion
document.getElementById("pdfListRequestBtn").addEventListener('click', function() {
pdfListRequest(webSocket);
});
/*
//get Building State
var pdfDataContainer = document.createElement("div");
pdfDataContainer.id = "pdfDataContainer";
pdfDataContainer.className = "py-1";
//Form
var string = '<div class="input-group"><input id="PdfData1" type="text" class="form-control border-primary" placeholder="Exercise ID"><input id="PdfData2" type="text" class="form-control border-primary" placeholder="UUID"><button id= "PdfDataBtn" class="btn btn-primary" type="button" id="button-addon2">get PDF Data</button></div>'
pdfDataContainer.innerHTML = string;
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (pdfDataContainer);
//Funktion
document.getElementById("PdfDataBtn").addEventListener('click', function() {
pdfListData(webSocket);
});
*/
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function pdfListRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "pdfListRequest",
uuid: "UUID"
}));
}
/*
function pdfListData(webSocket) {
webSocket.send(JSON.stringify({
type: "pdfListData",
uuid: document.getElementById("PdfData2").value,
data: {
exerciseId: document.getElementById("PdfData1").value
}
}));
}
*/
+87
View File
@@ -0,0 +1,87 @@
var buttonsAdded = false;
export function getLongName () {
return "Infrastructure Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
+123
View File
@@ -0,0 +1,123 @@
var buttonsAdded = false;
export function getLongName () {
return "Operator Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
buttonsAdded = true;
}
}
/*
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
document.getElementById("Output").innerHTML += `<p class= "pt-4 h6"> Message Type: <i>${JSON.parse(message.data).type}</i></p>`;
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (key[0] == "image") { //Base64 dekodieren, falls "Image"
cell.innerHTML = `<img src='data:image/png;base64, ${item[key[0]]}' onerror='this.style.display="none"'>`
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (table);
}
*/
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (key[0] == "image") { //Base64 dekodieren, falls "Image"
cell.innerHTML = `<img src='data:image/png;base64, ${item[key[0]]}' onerror='this.style.display="none"'>`
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
+87
View File
@@ -0,0 +1,87 @@
var buttonsAdded = false;
export function getLongName () {
return "Participant Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//Base Dl Request
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>BaseDlRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
baseDlRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function baseDlRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
+59
View File
@@ -0,0 +1,59 @@
var searchContent = new URLSearchParams (window.location.search);
var exc = searchContent.get('exc');
var buttonsAdded = false;
var headCellBuilt = false;
export function getLongName () {
return "Participant Management";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
(document.getElementById ("RequestButtonContainer")).innerHTML = `<div class='px-3 pt-2 h5'>Dieser Port empfängt Positonsdaten der Exercise ${exc}.</div>`
buttonsAdded = true;
}
}
//Positionsdaten tabellarisch abbilden
var table = document.createElement ("table");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
tBody.id = 'tBody';
//leert den Table-Body mit allen bisherigen Positionen durch Clear-Button
document.getElementById("ClearBtn").addEventListener ('click', function () {
document.getElementById("tBody").innerHTML = "";
});
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
//erstellt Table body einmalig
table.classList.add("table","table-hover", "table-condensed");
var headRow = document.createElement ("tr");
var keys = new Map;
var keyIndexCounter = 0;
if (!headCellBuilt) {
for (var key in JSON.parse(message.data)) {
var headCell = headRow.insertCell(keys.get(key));
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
headCellBuilt = true;
tHead.appendChild (headRow);
table.appendChild (tHead);
}
//fuegt Table Body je Positonsmeldung an
var bodyRow = document.createElement ("tr");
for (var key in JSON.parse(message.data)) {
var bodyCell = bodyRow.insertCell(keys.get(key));
bodyCell.innerHTML = JSON.parse(message.data)[key];
}
tBody.appendChild (bodyRow)
table.appendChild (tBody);
document.getElementById("Output").appendChild (table);
}
+17
View File
@@ -0,0 +1,17 @@
//"Service Template"
var buttonsAdded = false;
export function getLongName () {
throw new console.error("Methodenrumpf muss definiert werden.");
}
export function createButtons (webSocket) {
throw new console.error("Methodenrumpf muss definiert werden.");
}
export function decryptMessage (message) {
throw new console.error("Methodenrumpf muss definiert werden.");
}
+86
View File
@@ -0,0 +1,86 @@
var buttonsAdded = false;
export function getLongName () {
return "Warehouse Guez";
}
export function createButtons (webSocket) {
//Container
if (!buttonsAdded){
//equipmentTypesRequest
var baseDlRequestContainer = document.createElement("div");
baseDlRequestContainer.id = "BaseDlRequestContainer";
baseDlRequestContainer.className = "py-1";
//Button
var baseDlRequestBtn = document.createElement("button");
baseDlRequestBtn.id = "BaseDlRequestBtn";
baseDlRequestBtn.classList.add ("btn", "btn-primary");
baseDlRequestBtn.innerHTML = "Send <i>EquipmentTypesRequest</i>";
//Append
(document.getElementById ("RequestButtonContainer")).appendChild (baseDlRequestContainer);
(document.getElementById ("BaseDlRequestContainer")).appendChild (baseDlRequestBtn);
//Funktion
document.getElementById("BaseDlRequestBtn").addEventListener('click', function() {
equipmentTypesRequest(webSocket);
});
buttonsAdded = true;
}
}
export function decryptMessage (message) {
document.getElementById("OutputContainer").hidden = false
var table = document.createElement ("table");
table.classList.add("table","table-hover", "table-condensed");
var tHead = document.createElement ("thead");
var tBody = document.createElement ("tbody");
var headRow = document.createElement ("tr");
var accordionItem = document.createElement ("div")
accordionItem.className = "accordion-item";
accordionItem.innerHTML = `<h2 class="accordion-header" id="heading-${JSON.parse(message.data).type}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-${JSON.parse(message.data).type}">
${JSON.parse(message.data).type}
</button>
</h2>
<div id="collapse-${JSON.parse(message.data).type}" class="accordion-collapse collapse show" data-bs-parent="#Output">
<div id="body-${JSON.parse(message.data).type}" class="accordion-body"></div>
</div>
</div>`
var keys = new Map;
JSON.parse(message.data).data.etMap.forEach ((item, index, array) => {
var keyIndexCounter = keys.size;
for (var key in item){
if (!keys.has(key)){
var headCell = headRow.insertCell(keys.size);
headCell.innerHTML = key;
keys.set(key, keyIndexCounter);
keyIndexCounter++;
}
}
var row = tBody.insertRow();
for (var key of keys) {
var cell = row.insertCell (keys.get(key));
if (typeof item[key[0]] === 'object') { //Objekt formatieren, falls erforderlich - Funktion rekursiv aufrufen?
cell.innerHTML = JSON.stringify(item[key[0]])
}
else cell.innerHTML = item[key[0]];
}
});
tHead.appendChild (headRow);
table.appendChild (tHead);
table.appendChild (tBody);
document.getElementById("Output").appendChild (accordionItem);
document.getElementById("body-" + JSON.parse(message.data).type).appendChild(table);
}
//Requests
function equipmentTypesRequest(webSocket) {
webSocket.send(JSON.stringify({
type: "equipmentTypesRequest",
uuid: "UUID"
}));
}
+73
View File
@@ -0,0 +1,73 @@
var ws;
var thisURL = window.location;
//HTML-ELemente get
var searchContent = new URLSearchParams (thisURL.search);
var ipInputForm = document.getElementById('iIpInputForm');
var exerciseListContainer = document.getElementById('ExerciseList');
webSocketConnect = function () {
ws = new WebSocket (document.getElementById("IpInputForm").value);
ws.onopen = function () {
document.getElementById("IpInputForm").classList.replace("border-danger", "border-success");
document.getElementById('ButtonContainer').hidden = false;
}
ws.onmessage = function (msg) {
console.log(msg)
document.getElementById('ListContainer').hidden = false;
var object = (JSON.parse(msg.data)).data;
object.forEach((item, index, array) => {
var exerciseEntry = document.createElement('li');
var managementList = document.createElement('ul');
managementList.id = object[index].exerciseId;
managementList.className = "list-lvl2";
exerciseEntry.innerHTML = "Exercise: " + object[index].exerciseId;
exerciseListContainer.appendChild(exerciseEntry); //Reihenfolge?
exerciseListContainer.appendChild(managementList); //Reihenfolge?
(object[index].services).forEach((item, index2, array) => {
var managementListContainer = document.getElementById (object[index].exerciseId);
var managementEntry = document.createElement('li');
var portList = document.createElement('ul');
portList.id = object[index].exerciseId + object[index].services[index2].name;
portList.className = "list-lvl3";
managementEntry.innerHTML = "Service: " + object[index].services[index2].name;
managementListContainer.appendChild(managementEntry); //Reihenfolge?
managementListContainer.appendChild(portList); //Reihenfolge?
(object[index].services[index2].ports).forEach((item, index3, array) => {
//Query String konstruieren
var queryString = new URLSearchParams();
queryString.append ('exc', object[index].exerciseId);
queryString.append ('svc', object[index].services[index2].nameAbbrevation);
queryString.append ('port', object[index].services[index2].ports[index3].number);
queryString.append ('typeid', object[index].services[index2].ports[index3].typeId);
var portListContainer = document.getElementById (object[index].exerciseId + object[index].services[index2].name);
//Port-Element erstellen
var portLink = document.createElement('a');
portLink.href = 'wsTool.html' + '?' + queryString;
portLink.innerHTML = object[index].services[index2].ports[index3].number;
var portEntry = document.createElement('li');
portEntry.innerHTML = "Port: ";
portEntry.innerHTML += '<a href=' + portLink.toString() +' target="_blank">'+ object[index].services[index2].ports[index3].number; +'</a>';
portEntry.innerHTML += " | TypeID: "+object[index].services[index2].ports[index3].typeId+" ";
portEntry.innerHTML += " | Properties: "+object[index].services[index2].ports[index3].properties;
portListContainer.appendChild(portEntry);
});
});
});
}
ws.onclose = function () {
document.getElementById("IpInputForm").classList.replace("border-success", "border-danger");
}
}
function servicePortsInformationRequest() {
ws.send(JSON.stringify({
type: "servicePortsInformationRequest",
uuid: "UUID"
}));
}
+54
View File
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>wsTool</title>
<link rel="stylesheet" href="../include/bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="index.css">
</head>
<body>
<div id="header">
<h1 id="headline">
WebSocket Tool
</h1>
</div>
<!--Connect-->
<div class="form-control">
<div class="m-1">
<label class="form-label">IP-Adresse eingeben:</label>
</div>
<div class="row g-3">
<div class="col-auto">
<input class="form-control border-danger" type="text" name="" id="IpInputForm">
</div>
<div class="col-auto">
<button id="ConnectButton" class="btn btn-primary mb-1">Connect</button>
</div>
</div>
</div>
<br>
<!--Request Buttons-->
<div id="RequestContainer" class="container-fluid form-control" hidden>
<div id="RequestButtonContainer" class="row">
</div>
</div>
<br>
<!--Message Output-->
<div id="OutputContainer" class="form-control" hidden>
<div class="d-flex justify-content-between">
<span><b>Messages:</b></span>
<button id="ClearBtn" class="btn btn-sm btn-outline-secondary">Clear</button>
</div><br>
<p id="Output" class="accordion"></p>
</div>
<script src="../include/bootstrap/js/bootstrap.js"></script>
<script type="module" src="wsTool.js"></script>
</body>
</html>
+108
View File
@@ -0,0 +1,108 @@
var ws;
//Port-Informationen
var searchContent = new URLSearchParams (window.location.search);
var svc = searchContent.get('svc');
var typeId = searchContent.get('typeid');
var port = searchContent.get('port');
//Modul importieren
const importPath = './modules/' + svc + typeId + '.js'
const module = await import (importPath);
//HTML-Elemente get/set
var serverConnect = document.getElementById('Serverconnect');
var requestContainer = document.getElementById('RequestContainer');
document.getElementById('headline').innerHTML += " - " + module.getLongName(); //Import
document.title += " - " + module.getLongName(); //Import
//IP-Adresse ausfuellen
document.getElementById("IpInputForm").value = "ws://localhost:" + port;
//Connect
document.getElementById("ConnectButton").addEventListener ('click', webSocketConnect);
function webSocketConnect () {
ws = new WebSocket (document.getElementById("IpInputForm").value);
ws.onopen = function () {
document.getElementById("IpInputForm").classList.replace("border-danger", "border-success");
document.getElementById('RequestContainer').hidden = false;
module.createButtons(ws); //Import
}
ws.onmessage = function (msg) {
console.log(JSON.parse(msg.data));
module.decryptMessage (msg); //Import
}
ws.onclose = function () {
document.getElementById("IpInputForm").classList.replace("border-success", "border-danger");
}
}
//Clear Button
document.getElementById("ClearBtn").addEventListener('click', () => {
document.getElementById("Output").innerHTML = "";
});
//Request-Funktionen
function customRequest() {
ws.send(JSON.stringify({
type: document.getElementById("CustomRequestType").value,
uuid: document.getElementById("CustomRequestUUID").value
}));
}
function servicePortsInformationRequest() {
ws.send(JSON.stringify({
type: "servicePortsInformationRequest",
uuid: "UUID"
}));
}
function baseDlRequest() {
ws.send(JSON.stringify({
type: "baseDlRequest",
uuid: "UUID"
}));
}
function exerciseInformationRequest() {
ws.send(JSON.stringify({
type: "exerciseInformationRequest",
uuid: "UUID"
}));
}
function pdfListRequest() {
ws.send(JSON.stringify({
type: "pdfListRequest",
uuid: "UUID"
}));
}
function equipmentTypesRequest() {
ws.send(JSON.stringify({
type: "equipmentTypesRequest",
uuid: "UUID"
}));
}
//baseDlRequest
//exerciseInformationRequest
//pdfListRequest
//servicePortsInformationRequest
//exercisesRequest
//participantsRequest
//equipmentTypesRequest
//participantRegisterInExconRequest