/**
* Definitions
*/
const colorClamp = "#34495e"
const colorTime = "#95a5a6"
const messageTypes = [
"INFO",
"DEB",
"ERR"
]
const messageTypesColors = [
"#ecf0f1",
"#1abc9c",
"#e74c3c"
]
const messageColors = [
"#e74c3c",
"#95a5a6",
"#ecf0f1"
]
const serviceNames = [
"API",
"MAILER",
"STORAGE",
"SSE",
"WS"
]
const serviceNamesColors = [
"#f1c40f",
"#e67e22",
"#2980b9",
"#16a085",
"#1abc9c"
]
const serviceTypes = [
"ALPHA",
"BETA",
"STABLE"
]
const serviceTypesColors = [
"#9b59b6",
"#e67e22",
"#2ecc71"
]
const connectionStatusColors = [ // dot color for connection status
"#2ecc71", // connected
"#e74c3c", // disconnected
"#e67e22" // reconnecting
]
const wsAddress = "ws://192.168.178.93:50000/ws?auth=aksmdaksdmaskdm213askm"
/**
* Begin of code
*/
const viewersCount = document.getElementById("viewers-count")
const checkboxAlpha = document.getElementById("checkbox-alpha")
const checkboxBeta = document.getElementById("checkbox-beta")
const checkboxStable = document.getElementById("checkbox-stable")
const connectionStatus = document.getElementById("connection-status")
const messages = document.getElementById("messages")
let autoScroll = true;
function addMessage(messageType, serviceType, serviceName, message, timestamp) {
let li = document.createElement("li")
li.innerHTML = formatDate(timestamp) +
formatServiceType(serviceType) +
formatMessageType(messageType) +
formatServiceName(serviceName) +
formatMessage(message, messageType)
messages.appendChild(li)
if (autoScroll) {
li.scrollIntoView()
}
deleteOldMessages()
}
function addViewerInfoMessage(joined, timestamp) {
let li = document.createElement("li")
if (joined) {
li.innerHTML = formatDate(timestamp) + "A client has joined"
} else {
li.innerHTML = formatDate(timestamp) + "A client has left"
}
messages.appendChild(li)
if (autoScroll) {
li.scrollIntoView()
}
deleteOldMessages()
}
function deleteOldMessages() {
if (messages.childElementCount > 500) {
messages.removeChild(messages.getElementsByTagName("li")[0])
}
}
function clampOn() {
return "["
}
function clampClosed() {
return "] "
}
function formatDate(timestamp) {
const date = new Date(timestamp)
return clampOn() +
"" +
date.getDate().toString().padStart(2, '0') + "." +
date.getMonth().toString().padStart(2, '0') + "." +
date.getFullYear() + " " +
date.getHours().toString().padStart(2, '0') + ":" +
date.getMinutes().toString().padStart(2, '0') + ":" +
date.getSeconds().toString().padStart(2, '0') + ":" +
date.getMilliseconds().toString().padStart(3, '0') +
"" + clampClosed()
}
function formatServiceType(serviceType) {
return clampOn() + "" + serviceTypes[serviceType] + "" + clampClosed()
}
function formatServiceName(serviceName) {
return clampOn() + "" + serviceNames[serviceName] + "" + clampClosed()
}
function formatMessage(message, messageType) {
return "" + message + ""
}
function formatMessageType(messageType) {
return clampOn() + "" + messageTypes[messageType] + "" + clampClosed()
}
function handleScrollState() {
console.log("here")
}
let scrollState = document.getElementById('scroll-state')
document.getElementById('btn-toggle-scroll').addEventListener('click', () => {
console.log("clicked", scrollState.innerHTML)
if (scrollState.innerHTML == "on") {
autoScroll = false
scrollState.style.color = "#e74c3c"
scrollState.innerHTML = "off"
} else {
autoScroll = true
scrollState.style.color = "#27ae60"
scrollState.innerHTML = "on"
}
})
// websocket
let ws = null
window.onload = () => {
connectWS()
}
function connectWS() {
connectionStatus.style.backgroundColor = connectionStatusColors[2]
ws = new WebSocket(wsAddress)
ws.onopen = () => {
console.info("ws open")
connectionStatus.style.backgroundColor = connectionStatusColors[0]
}
ws.onmessage = (msg) => {
let data = JSON.parse(msg.data)
messageType = data.MessageType
serviceName = data.ServiceName
serviceType = data.ServiceType
timestamp = data.Timestamp
console.log(timestamp)
if (messageType == 100 && serviceName == 100) {
viewersCount.innerHTML = data.Msg + (data.Msg == 1 ? " viewer" : " viewers")
addViewerInfoMessage(serviceType == 1, timestamp)
} else {
if (serviceType == 0 && !checkboxAlpha.checked) return
if (serviceType == 1 && !checkboxBeta.checked) return
if (serviceType == 2 && !checkboxStable.checked) return
addMessage(messageType, serviceType, serviceName, data["Msg"], timestamp)
}
}
ws.onclose = (e) => {
console.log("closed", e.reason.code)
connectionStatus.style.backgroundColor = connectionStatusColors[1]
if (e.reason.code === 1005) return
console.log("ws closed", e)
setTimeout(() => connectWS(), 100)
}
ws.onerror = (err) => {
console.warn("err:", err)
}
}