Add files via upload

This commit is contained in:
Aesthetiful authored and GitHub committed 2025-03-05 15:58:01 -08:00
commit 42586b0666
47 files changed
+5938

No files matched your search

+1
View File
@@ -0,0 +1 @@
[]
+16
View File
@@ -0,0 +1,16 @@
const fs = require('fs');
const data = JSON.parse(fs.readFileSync("drawings.json", 'utf-8'));
var count = 0;
let filteredData = [];
for (const entry of data) {
if (entry[0].color !== "#faf700") {
filteredData.push(entry);
console.log(entry[0].color);
} else {
count++;
}
}
fs.writeFileSync("drawings.json", JSON.stringify(filteredData), 'utf-8');
console.log("Done found " + count);
+512
View File
@@ -0,0 +1,512 @@
const socket = io({
timeout: 500
});
const canvas = document.getElementById('drawingCanvas');
const canvasContainer = document.getElementById('canvasContainer');
const buttons = document.getElementById('buttons');
const tx = document.getElementById('x');
const ty = document.getElementById('y');
const context = canvas.getContext('2d');
const chat = document.querySelector('.chat-container');
const nameinput = document.getElementById('username');
const drawingEmitDelay = 500;
let lastDrawingEmitTime = 0;
let drawings = [];
let announcementIDs = [];
let currentDrawing = [];
let isDrawing = false;
let uiVisible = true;
let currentColor = '#000000';
let announceCount = 1;
let connectionTimer = null;
let connectionSeconds = 0;
let versionSet = false;
let ping = null;
let uuid = "";
context.imageSmoothingEnabled = true;
canvasContainer.style.transform = `scale(0.08)`;
function getCookie(name) {
const cookies = document.cookie.split(';').map(cookie => cookie.trim());
for (const cookie of cookies) {
const [cookieName, cookieValue] = cookie.split('=').map(part => decodeURIComponent(part));
if (cookieName === name) {
return cookieValue;
}
}
return null;
}
function setCookie(name, value, expire) {
const expirationDate = new Date();
expirationDate.setDate(expirationDate.getDate() + expire);
const cookieValue = encodeURIComponent(value) + (expire ? `; expires=${expirationDate.toUTCString()}` : '');
document.cookie = `${name}=${cookieValue}; path=/`;
}
function pinger() {
const startTime = Date.now();
const pingtext = document.getElementById('ping').querySelector('p');
socket.on('pong', () => {
const latency = Date.now() - startTime;
pingtext.textContent = 'Ping: ' + latency + 'ms';
document.getElementById('ping').style.opacity = 0.25;
});
socket.emit('ping');
}
ping = setInterval(pinger, 1000);
function startConnectionTimer() {
const messages = document.querySelector('.messages');
if(messages.querySelectorAll('[id="connection"]').length > 0) {
return;
}
clearInterval(ping);
const parentMessage = document.createElement('div');
parentMessage.setAttribute('class', 'message fadeup red');
parentMessage.setAttribute('id', 'connection');
parentMessage.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.1)";
parentMessage.style.width = "300px";
const message = document.createElement('p');
message.setAttribute('id', 'timeout');
message.setAttribute('style', 'white-space: nowrap;margin: 25px 50px 25px 50px');
message.textContent = "Server Connection Timeout: " + connectionSeconds.toFixed(1);
parentMessage.appendChild(message);
messages.appendChild(parentMessage);
canvas.style.opacity = 0;
buttons.style.opacity = 0;
canvas.classList.add('fadedown');
drawings = [];
currentDrawing = [];
draw();
connectionTimer = setInterval(() => {
connectionSeconds += 0.1;
document.getElementById('timeout').textContent = "Server Connection Timeout: " + connectionSeconds.toFixed(1);
}, 100);
}
function stopConnectionTimer() {
clearInterval(connectionTimer);
ping = setInterval(pinger, 1000);
connectionSeconds = 0;
const messages = document.querySelector('.messages');
messages.querySelectorAll('[id="connection"]').forEach((child) => {
child.classList.remove('fadeup');
child.classList.add('fadedown');
setTimeout(() => {
child.remove();
}, 500);
});
const parentMessage = document.createElement('div');
parentMessage.setAttribute('class', 'message fadeup green');
parentMessage.setAttribute('id', 'success');
parentMessage.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.1)";
parentMessage.setAttribute('style', "min-width: auto;");
const messagetext = document.createElement('p');
messagetext.setAttribute('id', 'timeout');
messagetext.setAttribute('style', 'white-space: nowrap;margin: 25px 50px 25px 50px');
messagetext.textContent = "Server connection has been restored";
parentMessage.appendChild(messagetext);
messages.appendChild(parentMessage);
canvas.style.opacity = 1;
buttons.style.opacity = 1;
canvas.classList.remove('fadedown');
canvas.classList.add('fadeup');
const message = document.getElementById('success');
setTimeout(() => {
message.classList.remove('fadeup');
message.classList.add('fadedown');
setTimeout(() => {
message.remove();
}, 500);
}, 2500);
}
socket.on('connect', () => {
if(connectionSeconds != 0) {
stopConnectionTimer();
}
});
socket.on('connect_error', () => {
startConnectionTimer();
});
socket.on('connect_timeout', () => {
startConnectionTimer();
});
function toggleOP() {
uiVisible = !uiVisible;
buttons.style.display = uiVisible ? '' : 'none';
document.getElementById('resetView').style.display = uiVisible ? '' : 'none';
document.getElementById('xy').style.display = uiVisible ? '' : 'none';
document.getElementById('connectedClients').style.display = uiVisible ? '' : 'none';
document.getElementById('version').style.display = uiVisible ? '' : 'none';
document.getElementById('ping').style.display = uiVisible ? '' : 'none';
document.getElementById('data').style.display = uiVisible ? '' : 'none';
chat.style.display = uiVisible ? 'flex' : 'none';
}
function resetView() {
canvasContainer.style.transform = `scale(0.08)`;
canvas.style.transform = `translate(0px, 0px)`;
zoomLevel = 0.08;
offsetX = 0;
offsetY = 0;
}
function changeColor(event) {
currentColor = event.target.value;
}
document.addEventListener('mouseup', () => {
isDrawing = false;
});
canvas.addEventListener('mouseleave', () => {
isDrawing = false;
});
canvas.addEventListener('mousedown', (event) => {
isDrawing = true;
addPoint(event);
});
canvas.addEventListener('mouseup', () => {
isDrawing = false;
if (currentDrawing.length > 0) {
socket.emit('draw', { type: 'draw', drawing: currentDrawing, valid: uuid });
drawings.push(currentDrawing);
draw();
currentDrawing = [];
lastDrawingEmitTime = Date.now();
}
});
canvas.addEventListener('mousemove', (event) => {
const rect = canvas.getBoundingClientRect();
const scaleX = canvas.width / rect.width;
const scaleY = canvas.height / rect.height;
const x = Math.round((event.clientX - rect.left) * scaleX);
const y = Math.round((event.clientY - rect.top) * scaleY);
tx.innerHTML = x;
ty.innerHTML = y;
if (isDrawing) {
addPoint(event);
const currentTime = Date.now();
if (currentTime - lastDrawingEmitTime >= drawingEmitDelay) {
//socket.emit('draw', { type: 'draw', drawing: currentDrawing, valid: uuid });
lastDrawingEmitTime = currentTime;
}
}
});
document.getElementById('chat-input').addEventListener('keydown', function(event) {
if(event.keyCode == 13) {
socket.emit('message', { uuid: uuid, content: document.getElementById('chat-input').value });
document.getElementById('chat-input').value = "";
}
});
nameinput.addEventListener('keydown', function(event) {
if(event.keyCode == 13) {
socket.emit('changeName', { uuid: uuid, name: nameinput.value });
}
});
document.addEventListener('keydown', function(event) {
if (event.key === 'ArrowUp') {
pan('up');
} else if (event.key === 'ArrowDown') {
pan('down');
} else if (event.key === 'ArrowLeft') {
pan('left');
} else if (event.key === 'ArrowRight') {
pan('right');
}
});
function addPoint(event) {
if (!isDrawing) return;
const rect = canvas.getBoundingClientRect();
const scaleX = canvas.width / rect.width;
const scaleY = canvas.height / rect.height;
const x = (event.clientX - rect.left) * scaleX;
const y = (event.clientY - rect.top) * scaleY;
currentDrawing.push({ x: Math.round(x), y: Math.round(y), color: currentColor });
draw();
}
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
for (const drawing of drawings) {
if (drawing.length < 2) continue;
for (let i = 1; i < drawing.length; i++) {
const startPoint = drawing[i - 1];
const endPoint = drawing[i];
context.beginPath();
context.strokeStyle = startPoint.color;
context.moveTo(Math.round(startPoint.x), Math.round(startPoint.y));
context.lineTo(Math.round(endPoint.x), Math.round(endPoint.y));
context.stroke();
}
}
context.stroke();
if (currentDrawing.length > 0) {
context.beginPath();
context.strokeStyle = currentColor;
context.moveTo(Math.round(currentDrawing[0].x), Math.round(currentDrawing[0].y));
for (let i = 1; i < currentDrawing.length; i++) {
const point = currentDrawing[i];
context.lineTo(Math.round(point.x), Math.round(point.y));
}
context.stroke();
}
}
socket.on('changeName', (data) => {
document.getElementById('nameStatus').textContent = data.status.message;
document.getElementById('nameStatus').style.display = "";
setTimeout(() => {
document.getElementById('nameStatus').style.display = "none";
}, 5000);
});
socket.on('chat', (data) => {
if(data.type == "message") {
const message = document.createElement('li');
message.textContent = "<" + data.name + "> " + data.content;
chat.querySelector('ul').appendChild(message);
chat.querySelector('.chat-messages').querySelector('ul').scrollTop = chat.querySelector('.chat-messages').querySelector('ul').scrollHeight;
} else if(data.type == "existingMessages") {
const messages = JSON.parse(data.messages);
chat.querySelector('ul').innerHTML = "";
messages.forEach(entry => {
const message = document.createElement('li');
message.textContent = "<" + entry.name + "> " + entry.content;
chat.querySelector('ul').appendChild(message);
chat.querySelector('.chat-messages').querySelector('ul').scrollTop = chat.querySelector('.chat-messages').querySelector('ul').scrollHeight;
});
}
});
socket.on('dataSize', (data) => {
document.getElementById('data').querySelector('p').textContent = "Size: " + data.size + "MB";
document.getElementById('data').style.opacity = 0.25;
});
socket.on('play', (data) => {
if(data.audio != "stop") {
document.getElementById('audio-player').src = data.audio;
document.getElementById('audio-player').play();
} else {
document.getElementById('audio-player').pause();
}
});
socket.on('announcement', (data) => {
if (data.message && data.color) {
const announcementMessage = data.message;
const messages = document.querySelector('.messages');
const announcement = document.createElement('div');
announcement.setAttribute('class', 'message fadeup ' + data.color);
announcement.setAttribute('id', announceCount);
announcement.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.1)";
const message = document.createElement('p');
message.setAttribute('style', 'white-space: normal;margin: 25px 50px 25px 50px');
message.textContent = announcementMessage;
announcement.appendChild(message);
messages.appendChild(announcement);
announceCount++;
announcementIDs.push(announceCount - 1);
setTimeout(() => {
const el = document.getElementById(announceCount - 1);
el.classList.remove('fadeup');
el.classList.add('fadedown');
setTimeout(() => {
el.style.display = "none";
el.remove();
}, 500);
}, 5000);
}
});
function hideMessages() {
const parentDiv = document.querySelector('.messages');
if (parentDiv) {
const childDivs = parentDiv.querySelectorAll('div');
if(childDivs.length > 1) {
childDivs.forEach((child) => {
if (child.getAttribute('id') != "connection") {
child.classList.add('fadedown');
}
});
setTimeout(() => {
childDivs.forEach((child) => {
if (child.getAttribute('id') != "connection") {
child.style.display = 'none';
child.remove();
}
});
}, 500);
}
}
}
setInterval(hideMessages, 5000);
socket.on('connectedClients', (count) => {
document.getElementById('clientNum').textContent = `Connected Clients: ${count}`;
document.getElementById('connectedClients').style.opacity = 0.25;
});
socket.on('reload', (count) => {
location.reload(true);
});
socket.on('version', (version) => {
document.title = "Collavas v" + version;
document.getElementById('version').querySelector('p').textContent = "Version: " + version;
document.getElementById('version').style.opacity = 0.25;
versionSet = true;
document.getElementById('w-version').textContent = "Collavas v" + version;
});
socket.on('draw', (data) => {
if (data.type === 'draw' && data.drawing) {
drawings.push(data.drawing);
draw();
} else if (data.type === 'existingDrawings' && data.drawings) {
const parsedDrawings = JSON.parse(data.drawings);
const messages = JSON.parse(data.chat);
drawings = [];
chat.querySelector('ul').innerHTML = "";
messages.forEach(entry => {
const message = document.createElement('li');
message.textContent = "<" + entry.name + "> " + entry.content;
chat.querySelector('ul').appendChild(message);
chat.querySelector('.chat-messages').querySelector('ul').scrollTop = chat.querySelector('.chat-messages').querySelector('ul').scrollHeight;
});
uuid = data.id;
nameinput.value = data.name;
setCookie("uuid", uuid, 1);
drawings.push(...parsedDrawings);
draw();
document.getElementById('transition').style.opacity = 1;
document.getElementById('transition').style.visibility = "hidden";
canvas.style.opacity = 1;
canvas.style.visibility = "visible";
buttons.style.opacity = 1;
chat.style.display = "flex";
if(!getCookie("visited")) {
var welcome = document.getElementById('welcome');
welcome.style.display = "flex";
welcome.style.opacity = 1;
welcome.querySelector('div').classList.add('fadeup');
setCookie("visited", "true", 1);
document.getElementById('w-close').addEventListener('click', (event) => {
welcome.style.opacity = 0;
welcome.querySelector('div').classList.remove('fadeup');
welcome.querySelector('div').classList.add('fadedown');
setTimeout(() => {
welcome.style.display = "none";
}, 500);
});
}
}
});
let zoomLevel = 0.08;
const zoomFactor = 0.1;
let offsetX = 0;
let offsetY = 0;
function pan(direction) {
const panSpeed = 40;
switch (direction) {
case 'left':
offsetX += panSpeed;
break;
case 'right':
offsetX -= panSpeed;
break;
case 'up':
offsetY += panSpeed;
break;
case 'down':
offsetY -= panSpeed;
break;
default:
break;
}
updateCanvasContainerPosition();
}
function updateCanvasContainerPosition() {
if(zoomLevel == 0.08) {
canvas.style.transform = `0px, 0px)`;
offsetX = 0;
offsetY = 0;
} else {
canvas.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
}
}
canvasContainer.addEventListener('wheel', (event) => {
event.preventDefault();
const scrollAmount = event.deltaY > 0 ? -1 : 1;
const scaleFactor = 1 + scrollAmount * zoomFactor;
zoomLevel *= scaleFactor;
if (zoomLevel < 0.08) { zoomLevel = 0.08; canvas.style.transform = `translate(0px, 0px)`; updateCanvasContainerPosition(); }
if (zoomLevel > 20.0) zoomLevel = 20.0;
canvasContainer.style.transform = `scale(${zoomLevel})`;
});
+1
View File
@@ -0,0 +1 @@
node server-96wMDN.js
+2
View File
@@ -0,0 +1,2 @@
version: 0.1.4
port: 3000
+1
View File
@@ -0,0 +1 @@
[]
+128
View File
@@ -0,0 +1,128 @@
[2025-01-02 17:35:15] [INFO] Starting Collavas server v0.1.4
[2025-01-02 17:35:15] [INFO] Loading Dependencies...
[2025-01-02 17:35:15] [INFO] Successfully started!
[2025-01-02 17:35:15] [INFO] Server is running on port 3000
[2025-01-02 17:35:15] [INFO] Connected Clients: 0
[2025-01-02 17:35:19] [INFO] Connected Clients: 1
[2025-01-02 17:36:13] [INFO] NaN 1735868173756
[2025-01-02 17:36:13] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5195,"y":4934,"color":"#000000"},{"x":5195,"y":4935,"color":"#000000"},{"x":5195,"y":4944,"color":"#000000"},{"x":5195,"y":4954,"color":"#000000"},{"x":5196,"y":4961,"color":"#000000"},{"x":5196,"y":4964,"color":"#000000"},{"x":5196,"y":4964,"color":"#000000"},{"x":5203,"y":4953,"color":"#000000"},{"x":5209,"y":4949,"color":"#000000"},{"x":5215,"y":4957,"color":"#000000"},{"x":5216,"y":4964,"color":"#000000"},{"x":5207,"y":4966,"color":"#000000"},{"x":5195,"y":4961,"color":"#000000"},{"x":5194,"y":4960,"color":"#000000"},{"x":5195,"y":4960,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:36:26] [INFO] Drawing not authenticated 8f5bbf5e-9848-422f-9e41-6a84807effe1
[2025-01-02 17:36:32] [INFO] 18580 1735868192337
[2025-01-02 17:36:32] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5194,"y":4936,"color":"#000000"},{"x":5194,"y":4939,"color":"#000000"},{"x":5194,"y":4953,"color":"#000000"},{"x":5194,"y":4964,"color":"#000000"},{"x":5194,"y":4964,"color":"#000000"},{"x":5196,"y":4946,"color":"#000000"},{"x":5197,"y":4940,"color":"#000000"},{"x":5197,"y":4938,"color":"#000000"},{"x":5197,"y":4939,"color":"#000000"},{"x":5193,"y":4957,"color":"#000000"},{"x":5193,"y":4969,"color":"#000000"},{"x":5194,"y":4969,"color":"#000000"},{"x":5197,"y":4948,"color":"#000000"},{"x":5196,"y":4938,"color":"#000000"},{"x":5193,"y":4934,"color":"#000000"},{"x":5196,"y":4947,"color":"#000000"},{"x":5199,"y":4964,"color":"#000000"},{"x":5199,"y":4966,"color":"#000000"},{"x":5196,"y":4955,"color":"#000000"},{"x":5195,"y":4945,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:36:35] [INFO] 3396 1735868195735
[2025-01-02 17:36:35] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5197,"y":4962,"color":"#000000"},{"x":5197,"y":4959,"color":"#000000"},{"x":5204,"y":4952,"color":"#000000"},{"x":5214,"y":4952,"color":"#000000"},{"x":5216,"y":4956,"color":"#000000"},{"x":5213,"y":4963,"color":"#000000"},{"x":5212,"y":4964,"color":"#000000"},{"x":5203,"y":4963,"color":"#000000"},{"x":5191,"y":4959,"color":"#000000"},{"x":5190,"y":4956,"color":"#000000"},{"x":5202,"y":4951,"color":"#000000"},{"x":5211,"y":4951,"color":"#000000"},{"x":5214,"y":4952,"color":"#000000"},{"x":5215,"y":4958,"color":"#000000"},{"x":5212,"y":4966,"color":"#000000"},{"x":5204,"y":4967,"color":"#000000"},{"x":5195,"y":4963,"color":"#000000"},{"x":5192,"y":4957,"color":"#000000"},{"x":5194,"y":4954,"color":"#000000"},{"x":5201,"y":4951,"color":"#000000"},{"x":5207,"y":4954,"color":"#000000"},{"x":5210,"y":4958,"color":"#000000"},{"x":5211,"y":4963,"color":"#000000"},{"x":5209,"y":4967,"color":"#000000"},{"x":5205,"y":4968,"color":"#000000"},{"x":5200,"y":4964,"color":"#000000"},{"x":5197,"y":4959,"color":"#000000"},{"x":5197,"y":4959,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:36:41] [INFO] 5774 1735868201510
[2025-01-02 17:36:41] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5222,"y":4963,"color":"#000000"},{"x":5224,"y":4955,"color":"#000000"},{"x":5227,"y":4931,"color":"#000000"},{"x":5227,"y":4932,"color":"#000000"},{"x":5228,"y":4948,"color":"#000000"},{"x":5228,"y":4958,"color":"#000000"},{"x":5228,"y":4960,"color":"#000000"},{"x":5227,"y":4960,"color":"#000000"},{"x":5223,"y":4949,"color":"#000000"},{"x":5225,"y":4936,"color":"#000000"},{"x":5226,"y":4932,"color":"#000000"},{"x":5226,"y":4946,"color":"#000000"},{"x":5226,"y":4962,"color":"#000000"},{"x":5226,"y":4963,"color":"#000000"},{"x":5226,"y":4956,"color":"#000000"},{"x":5227,"y":4935,"color":"#000000"},{"x":5228,"y":4933,"color":"#000000"},{"x":5227,"y":4942,"color":"#000000"},{"x":5222,"y":4962,"color":"#000000"},{"x":5222,"y":4964,"color":"#000000"},{"x":5227,"y":4951,"color":"#000000"},{"x":5228,"y":4946,"color":"#000000"},{"x":5229,"y":4944,"color":"#000000"},{"x":5239,"y":4942,"color":"#000000"},{"x":5244,"y":4947,"color":"#000000"},{"x":5245,"y":4950,"color":"#000000"},{"x":5245,"y":4948,"color":"#000000"},{"x":5244,"y":4943,"color":"#000000"},{"x":5238,"y":4942,"color":"#000000"},{"x":5233,"y":4944,"color":"#000000"},{"x":5228,"y":4947,"color":"#000000"},{"x":5228,"y":4949,"color":"#000000"},{"x":5229,"y":4948,"color":"#000000"},{"x":5236,"y":4942,"color":"#000000"},{"x":5240,"y":4941,"color":"#000000"},{"x":5242,"y":4945,"color":"#000000"},{"x":5244,"y":4948,"color":"#000000"},{"x":5240,"y":4945,"color":"#000000"},{"x":5234,"y":4941,"color":"#000000"},{"x":5227,"y":4946,"color":"#000000"},{"x":5225,"y":4952,"color":"#000000"},{"x":5225,"y":4955,"color":"#000000"},{"x":5229,"y":4950,"color":"#000000"},{"x":5242,"y":4942,"color":"#000000"},{"x":5245,"y":4942,"color":"#000000"},{"x":5246,"y":4946,"color":"#000000"},{"x":5245,"y":4951,"color":"#000000"},{"x":5243,"y":4947,"color":"#000000"},{"x":5240,"y":4943,"color":"#000000"},{"x":5234,"y":4945,"color":"#000000"},{"x":5229,"y":4950,"color":"#000000"},{"x":5228,"y":4954,"color":"#000000"},{"x":5228,"y":4955,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:36:50] [INFO] 9007 1735868210518
[2025-01-02 17:36:50] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5264,"y":4932,"color":"#000000"},{"x":5263,"y":4935,"color":"#000000"},{"x":5257,"y":4956,"color":"#000000"},{"x":5259,"y":4964,"color":"#000000"},{"x":5264,"y":4964,"color":"#000000"},{"x":5278,"y":4952,"color":"#000000"},{"x":5283,"y":4939,"color":"#000000"},{"x":5285,"y":4932,"color":"#000000"},{"x":5285,"y":4931,"color":"#000000"},{"x":5285,"y":4940,"color":"#000000"},{"x":5282,"y":4958,"color":"#000000"},{"x":5280,"y":4963,"color":"#000000"},{"x":5262,"y":4964,"color":"#000000"},{"x":5258,"y":4959,"color":"#000000"},{"x":5262,"y":4944,"color":"#000000"},{"x":5267,"y":4936,"color":"#000000"},{"x":5269,"y":4934,"color":"#000000"},{"x":5269,"y":4934,"color":"#000000"},{"x":5263,"y":4944,"color":"#000000"},{"x":5258,"y":4958,"color":"#000000"},{"x":5258,"y":4963,"color":"#000000"},{"x":5265,"y":4962,"color":"#000000"},{"x":5280,"y":4952,"color":"#000000"},{"x":5283,"y":4947,"color":"#000000"},{"x":5283,"y":4940,"color":"#000000"},{"x":5283,"y":4938,"color":"#000000"},{"x":5282,"y":4942,"color":"#000000"},{"x":5275,"y":4955,"color":"#000000"},{"x":5270,"y":4961,"color":"#000000"},{"x":5260,"y":4959,"color":"#000000"},{"x":5259,"y":4955,"color":"#000000"},{"x":5265,"y":4938,"color":"#000000"},{"x":5266,"y":4937,"color":"#000000"},{"x":5266,"y":4938,"color":"#000000"},{"x":5260,"y":4951,"color":"#000000"},{"x":5256,"y":4961,"color":"#000000"},{"x":5257,"y":4965,"color":"#000000"},{"x":5271,"y":4962,"color":"#000000"},{"x":5283,"y":4953,"color":"#000000"},{"x":5287,"y":4940,"color":"#000000"},{"x":5287,"y":4935,"color":"#000000"},{"x":5287,"y":4935,"color":"#000000"},{"x":5278,"y":4951,"color":"#000000"},{"x":5273,"y":4959,"color":"#000000"},{"x":5269,"y":4960,"color":"#000000"},{"x":5258,"y":4958,"color":"#000000"},{"x":5255,"y":4952,"color":"#000000"},{"x":5259,"y":4938,"color":"#000000"},{"x":5264,"y":4932,"color":"#000000"},{"x":5264,"y":4932,"color":"#000000"},{"x":5259,"y":4945,"color":"#000000"},{"x":5256,"y":4955,"color":"#000000"},{"x":5256,"y":4960,"color":"#000000"},{"x":5270,"y":4961,"color":"#000000"},{"x":5277,"y":4951,"color":"#000000"},{"x":5279,"y":4945,"color":"#000000"},{"x":5280,"y":4940,"color":"#000000"},{"x":5282,"y":4938,"color":"#000000"},{"x":5282,"y":4937,"color":"#000000"},{"x":5279,"y":4943,"color":"#000000"},{"x":5273,"y":4951,"color":"#000000"},{"x":5267,"y":4956,"color":"#000000"},{"x":5263,"y":4956,"color":"#000000"},{"x":5259,"y":4953,"color":"#000000"},{"x":5258,"y":4944,"color":"#000000"},{"x":5264,"y":4933,"color":"#000000"},{"x":5267,"y":4928,"color":"#000000"},{"x":5267,"y":4929,"color":"#000000"},{"x":5256,"y":4944,"color":"#000000"},{"x":5253,"y":4955,"color":"#000000"},{"x":5255,"y":4957,"color":"#000000"},{"x":5270,"y":4957,"color":"#000000"},{"x":5280,"y":4946,"color":"#000000"},{"x":5283,"y":4940,"color":"#000000"},{"x":5284,"y":4939,"color":"#000000"},{"x":5284,"y":4939,"color":"#000000"},{"x":5276,"y":4952,"color":"#000000"},{"x":5267,"y":4958,"color":"#000000"},{"x":5256,"y":4956,"color":"#000000"},{"x":5258,"y":4944,"color":"#000000"},{"x":5265,"y":4934,"color":"#000000"},{"x":5265,"y":4933,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:37:01] [INFO] 10889 1735868221408
[2025-01-02 17:37:01] [INFO] 8f5bbf5e-9848-422f-9e41-6a84807effe1 {"type":"draw","drawing":[{"x":5301,"y":4919,"color":"#000000"},{"x":5301,"y":4921,"color":"#000000"},{"x":5302,"y":4942,"color":"#000000"},{"x":5299,"y":4955,"color":"#000000"},{"x":5297,"y":4961,"color":"#000000"},{"x":5297,"y":4961,"color":"#000000"},{"x":5298,"y":4946,"color":"#000000"},{"x":5299,"y":4939,"color":"#000000"},{"x":5303,"y":4939,"color":"#000000"},{"x":5307,"y":4951,"color":"#000000"},{"x":5307,"y":4958,"color":"#000000"},{"x":5307,"y":4962,"color":"#000000"},{"x":5306,"y":4963,"color":"#000000"},{"x":5306,"y":4963,"color":"#000000"},{"x":5307,"y":4948,"color":"#000000"},{"x":5305,"y":4941,"color":"#000000"},{"x":5305,"y":4940,"color":"#000000"},{"x":5301,"y":4942,"color":"#000000"},{"x":5298,"y":4947,"color":"#000000"},{"x":5296,"y":4954,"color":"#000000"},{"x":5296,"y":4955,"color":"#000000"},{"x":5296,"y":4954,"color":"#000000"},{"x":5299,"y":4938,"color":"#000000"},{"x":5300,"y":4932,"color":"#000000"},{"x":5301,"y":4927,"color":"#000000"},{"x":5301,"y":4928,"color":"#000000"},{"x":5299,"y":4942,"color":"#000000"},{"x":5297,"y":4953,"color":"#000000"},{"x":5296,"y":4959,"color":"#000000"},{"x":5296,"y":4960,"color":"#000000"},{"x":5298,"y":4949,"color":"#000000"},{"x":5303,"y":4944,"color":"#000000"},{"x":5307,"y":4947,"color":"#000000"},{"x":5310,"y":4959,"color":"#000000"},{"x":5311,"y":4962,"color":"#000000"},{"x":5311,"y":4963,"color":"#000000"},{"x":5311,"y":4958,"color":"#000000"},{"x":5308,"y":4943,"color":"#000000"},{"x":5303,"y":4940,"color":"#000000"},{"x":5299,"y":4944,"color":"#000000"},{"x":5295,"y":4953,"color":"#000000"},{"x":5295,"y":4958,"color":"#000000"},{"x":5295,"y":4961,"color":"#000000"},{"x":5295,"y":4958,"color":"#000000"},{"x":5301,"y":4939,"color":"#000000"},{"x":5302,"y":4932,"color":"#000000"},{"x":5302,"y":4931,"color":"#000000"},{"x":5302,"y":4931,"color":"#000000"},{"x":5303,"y":4940,"color":"#000000"},{"x":5299,"y":4953,"color":"#000000"},{"x":5296,"y":4960,"color":"#000000"},{"x":5296,"y":4961,"color":"#000000"},{"x":5297,"y":4955,"color":"#000000"},{"x":5303,"y":4945,"color":"#000000"},{"x":5308,"y":4944,"color":"#000000"},{"x":5312,"y":4958,"color":"#000000"},{"x":5310,"y":4964,"color":"#000000"},{"x":5310,"y":4965,"color":"#000000"},{"x":5311,"y":4959,"color":"#000000"},{"x":5311,"y":4946,"color":"#000000"},{"x":5310,"y":4944,"color":"#000000"},{"x":5307,"y":4943,"color":"#000000"},{"x":5298,"y":4949,"color":"#000000"},{"x":5293,"y":4960,"color":"#000000"},{"x":5293,"y":4966,"color":"#000000"},{"x":5293,"y":4965,"color":"#000000"},{"x":5296,"y":4954,"color":"#000000"},{"x":5300,"y":4939,"color":"#000000"},{"x":5301,"y":4934,"color":"#000000"},{"x":5301,"y":4935,"color":"#000000"},{"x":5298,"y":4949,"color":"#000000"},{"x":5297,"y":4959,"color":"#000000"},{"x":5295,"y":4963,"color":"#000000"},{"x":5298,"y":4956,"color":"#000000"},{"x":5304,"y":4943,"color":"#000000"},{"x":5309,"y":4943,"color":"#000000"},{"x":5311,"y":4948,"color":"#000000"},{"x":5311,"y":4955,"color":"#000000"},{"x":5311,"y":4959,"color":"#000000"},{"x":5310,"y":4961,"color":"#000000"},{"x":5310,"y":4957,"color":"#000000"},{"x":5309,"y":4945,"color":"#000000"},{"x":5308,"y":4944,"color":"#000000"},{"x":5302,"y":4947,"color":"#000000"},{"x":5295,"y":4952,"color":"#000000"},{"x":5293,"y":4960,"color":"#000000"},{"x":5292,"y":4963,"color":"#000000"},{"x":5293,"y":4961,"color":"#000000"},{"x":5299,"y":4944,"color":"#000000"},{"x":5304,"y":4932,"color":"#000000"},{"x":5305,"y":4931,"color":"#000000"},{"x":5304,"y":4932,"color":"#000000"},{"x":5299,"y":4946,"color":"#000000"},{"x":5296,"y":4955,"color":"#000000"},{"x":5296,"y":4956,"color":"#000000"},{"x":5296,"y":4957,"color":"#000000"},{"x":5296,"y":4955,"color":"#000000"},{"x":5301,"y":4942,"color":"#000000"},{"x":5304,"y":4933,"color":"#000000"},{"x":5304,"y":4933,"color":"#000000"},{"x":5302,"y":4939,"color":"#000000"},{"x":5299,"y":4944,"color":"#000000"}],"valid":"8f5bbf5e-9848-422f-9e41-6a84807effe1"}
[2025-01-02 17:40:04] [INFO] Connected Clients: 0
[2025-01-02 17:40:06] [INFO] Connected Clients: 1
[2025-01-02 17:40:51] [INFO] Connected Clients: 0
[2025-01-02 17:40:53] [INFO] Connected Clients: 1
[2025-01-02 17:42:03] [INFO] Connected Clients: 0
[2025-01-02 17:42:05] [INFO] Connected Clients: 1
[2025-01-02 17:42:50] [INFO] Connected Clients: 0
[2025-01-02 17:42:51] [INFO] Connected Clients: 1
[2025-01-02 17:44:01] [INFO] Connected Clients: 0
[2025-01-02 17:44:03] [INFO] Connected Clients: 1
[2025-01-02 17:44:48] [INFO] Connected Clients: 0
[2025-01-02 17:44:49] [INFO] Connected Clients: 1
[2025-01-02 17:45:59] [INFO] Connected Clients: 0
[2025-01-02 17:46:01] [INFO] Connected Clients: 1
[2025-01-02 17:46:46] [INFO] Connected Clients: 0
[2025-01-02 17:46:48] [INFO] Connected Clients: 1
[2025-01-02 17:47:58] [INFO] Connected Clients: 0
[2025-01-02 17:47:59] [INFO] Connected Clients: 1
[2025-01-02 17:48:44] [INFO] Connected Clients: 0
[2025-01-02 17:48:46] [INFO] Connected Clients: 1
[2025-01-02 17:49:56] [INFO] Connected Clients: 0
[2025-01-02 17:49:58] [INFO] Connected Clients: 1
[2025-01-02 17:50:43] [INFO] Connected Clients: 0
[2025-01-02 17:50:45] [INFO] Connected Clients: 1
[2025-01-02 17:51:55] [INFO] Connected Clients: 0
[2025-01-02 17:51:57] [INFO] Connected Clients: 1
[2025-01-02 17:52:42] [INFO] Connected Clients: 0
[2025-01-02 17:52:44] [INFO] Connected Clients: 1
[2025-01-02 17:53:54] [INFO] Connected Clients: 0
[2025-01-02 17:53:55] [INFO] Connected Clients: 1
[2025-01-02 17:54:40] [INFO] Connected Clients: 0
[2025-01-02 17:54:42] [INFO] Connected Clients: 1
[2025-01-02 17:55:52] [INFO] Connected Clients: 0
[2025-01-02 17:55:53] [INFO] Connected Clients: 1
[2025-01-02 17:57:03] [INFO] Connected Clients: 0
[2025-01-02 17:57:05] [INFO] Connected Clients: 1
[2025-01-02 17:57:50] [INFO] Connected Clients: 0
[2025-01-02 17:57:51] [INFO] Connected Clients: 1
[2025-01-02 17:59:01] [INFO] Connected Clients: 0
[2025-01-02 17:59:03] [INFO] Connected Clients: 1
[2025-01-02 17:59:48] [INFO] Connected Clients: 0
[2025-01-02 17:59:50] [INFO] Connected Clients: 1
[2025-01-02 18:01:00] [INFO] Connected Clients: 0
[2025-01-02 18:01:02] [INFO] Connected Clients: 1
[2025-01-02 18:01:47] [INFO] Connected Clients: 0
[2025-01-02 18:01:48] [INFO] Connected Clients: 1
[2025-01-02 18:02:58] [INFO] Connected Clients: 0
[2025-01-02 18:03:00] [INFO] Connected Clients: 1
[2025-01-02 18:03:45] [INFO] Connected Clients: 0
[2025-01-02 18:03:47] [INFO] Connected Clients: 1
[2025-01-02 18:04:57] [INFO] Connected Clients: 0
[2025-01-02 18:04:59] [INFO] Connected Clients: 1
[2025-01-02 18:05:44] [INFO] Connected Clients: 0
[2025-01-02 18:05:46] [INFO] Connected Clients: 1
[2025-01-02 18:06:56] [INFO] Connected Clients: 0
[2025-01-02 18:06:58] [INFO] Connected Clients: 1
[2025-01-02 18:07:43] [INFO] Connected Clients: 0
[2025-01-02 18:07:45] [INFO] Connected Clients: 1
[2025-01-02 18:08:55] [INFO] Connected Clients: 0
[2025-01-02 18:08:57] [INFO] Connected Clients: 1
[2025-01-02 18:09:42] [INFO] Connected Clients: 0
[2025-01-02 18:09:44] [INFO] Connected Clients: 1
[2025-01-02 18:10:54] [INFO] Connected Clients: 0
[2025-01-02 18:10:56] [INFO] Connected Clients: 1
[2025-01-02 18:11:41] [INFO] Connected Clients: 0
[2025-01-02 18:11:43] [INFO] Connected Clients: 1
[2025-01-02 18:12:53] [INFO] Connected Clients: 0
[2025-01-02 18:12:55] [INFO] Connected Clients: 1
[2025-01-02 18:13:40] [INFO] Connected Clients: 0
[2025-01-02 18:13:42] [INFO] Connected Clients: 1
[2025-01-02 18:14:52] [INFO] Connected Clients: 0
[2025-01-02 18:14:54] [INFO] Connected Clients: 1
[2025-01-02 18:15:39] [INFO] Connected Clients: 0
[2025-01-02 18:15:41] [INFO] Connected Clients: 1
[2025-01-02 18:16:51] [INFO] Connected Clients: 0
[2025-01-02 18:16:53] [INFO] Connected Clients: 1
[2025-01-02 18:18:03] [INFO] Connected Clients: 0
[2025-01-02 18:18:05] [INFO] Connected Clients: 1
[2025-01-02 18:18:50] [INFO] Connected Clients: 0
[2025-01-02 18:18:52] [INFO] Connected Clients: 1
[2025-01-02 18:20:02] [INFO] Connected Clients: 0
[2025-01-02 18:20:04] [INFO] Connected Clients: 1
[2025-01-02 18:20:49] [INFO] Connected Clients: 0
[2025-01-02 18:20:51] [INFO] Connected Clients: 1
[2025-01-02 18:22:01] [INFO] Connected Clients: 0
[2025-01-02 18:22:03] [INFO] Connected Clients: 1
[2025-01-02 18:22:47] [INFO] Connected Clients: 0
[2025-01-02 18:22:49] [INFO] Connected Clients: 1
[2025-01-02 18:23:59] [INFO] Connected Clients: 0
[2025-01-02 18:24:01] [INFO] Connected Clients: 1
[2025-01-02 18:24:46] [INFO] Connected Clients: 0
[2025-01-02 18:24:47] [INFO] Connected Clients: 1
[2025-01-02 18:25:57] [INFO] Connected Clients: 0
[2025-01-02 18:25:59] [INFO] Connected Clients: 1
[2025-01-02 18:26:44] [INFO] Connected Clients: 0
[2025-01-02 18:26:46] [INFO] Connected Clients: 1
[2025-01-02 18:27:56] [INFO] Connected Clients: 0
[2025-01-02 18:27:58] [INFO] Connected Clients: 1
[2025-01-02 18:28:42] [INFO] Connected Clients: 0
[2025-01-02 18:28:45] [INFO] Connected Clients: 1
[2025-01-02 18:29:55] [INFO] Connected Clients: 0
[2025-01-02 18:29:57] [INFO] Connected Clients: 1
[2025-01-02 18:30:41] [INFO] Connected Clients: 0
[2025-01-02 18:30:44] [INFO] Connected Clients: 1
[2025-01-02 18:30:47] [INFO] Connected Clients: 0
[2025-01-02 20:42:35] [INFO] Connected Clients: 1
[2025-01-02 20:42:35] [INFO] Connected Clients: 0
[2025-01-02 20:43:07] [INFO] Connected Clients: 1
[2025-01-02 20:43:14] [INFO] Connected Clients: 0
+1253
View File
File diff suppressed because it is too large. Load diff
+13
View File
@@ -0,0 +1,13 @@
{
"dependencies": {
"axios": "^1.6.8",
"cors": "^2.8.5",
"express": "^4.18.2",
"msgpack-lite": "^0.1.26",
"readline": "^1.3.0",
"socket.io": "^4.7.2",
"uuid": "^9.0.1",
"winston": "^3.13.0",
"yaml": "^2.4.1"
}
}
+52
View File
@@ -0,0 +1,52 @@
<!-- Client-side (HTML + JavaScript) -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Collavas - Mobile Access Denied</title>
<link rel="shortcut icon" href="/static/img/logo.png" type="image/png">
<style>
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #f78397;
display: flex;
justify-content: center;
align-items: center;
}
h1 {
color: #FFF;
text-align: center;
}
.logo {
display: flex;
justify-content: center; /* Horizontally center the content */
align-items: center; /* Vertically center the content */
height: 150px; /* Set a height for the container, if needed */
margin-top: 100px;
}
.logo img {
max-width: auto;
height: 150px;
padding: 5px;
/* Remove the margin: 0 auto; line */
}
</style>
</head>
<body>
<div class="main">
<div class="logo">
<a href="">
<img src="/static/img/logo.png" alt="Logo">
</a>
</div>
<h1>COLLAVAS Web is not supported on mobile devices.</h1>
</div>
</body>
</html>
+113
View File
@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Collavas</title>
<meta property="og:title" content="Collavas WEB">
<meta property="og:url" content="https://www.collavas.com/">
<meta property="og:description" content="Collavas, it's a canvas with no limitations and publicly accessible!">
<meta property="og:image" content="/static/img/logo.png">
<link rel="shortcut icon" href="/static/img/logo.png" type="image/png">
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
<script src="/static/js/mobile-UujD4m.js"></script>
<link rel="stylesheet" href="/static/css/main-96wMDN.css">
<link rel="stylesheet" href="/static/css/icons-UujD4m.css">
</head>
<body>
<div class="main">
<div class="messages"></div>
<div class="top-bar">
<div class="logo">
<a href="">
<img src="/static/img/logo.png" alt="Logo">
</a>
</div>
<div class="menu">
<ul>
<li><a href="//discord.gg/wgwb6z8krC">Discord</a></li>
<li class="dropdown">
<a href="#" class="dropbtn" style="display: flex; flex-direction: row;">Settings<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 320 512"><style>svg{fill:#ffffff;margin-left:5px;}</style><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg></a>
<div class="dropdown-content" id="myDropdown">
<p>Color</p>
<div class="color-palette">
<input type="color" id="colorPicker" value="#000000" onchange="changeColor(event)">
</div>
<p>Name (press enter to save)</p>
<input type="text" id="username" maxlength="20">
<p id="nameStatus" style="margin-top:5px;"></p>
</div>
</li>
</ul>
</div>
</div>
<div id="welcome" style="z-index:9999999;">
<div class="message pink">
<img src="/static/img/logo.png" style="width: 200px; height: auto;margin-left: auto;margin-right: auto;">
<p style="white-space: nowrap;margin: 25px 50px 25px 50px">Welcome to <span id="w-version"></span></p>
<p>Collavas is a free canvas with no rules, we allow users to draw what ever they want on our 10000x10000 canvas, viewable and editible by anyone on the web since March 19th, 2024. This project was made possible by the <a href="//aesthetiful.com/" target="_blank">Aesthetiful.com</a> infrastructure.</p>
<p>This project is in its early stages of development, if there are any bugs please report it to our <a href="//discord.gg/wgwb6z8krC" target="_blank">Discord Server</a>.</p>
<br><h2>v0.1.4 update</h2>
<ul style="text-align: left;"><li>Increased chat limitations</li><li>Loading older chats</li><li>Server shutting down randomly is fixed</li></ul><br><br>
<a href="javascript:void(0)" id="w-close"><p>close<svg height="10" width="10" style="margin: 0;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/></svg></p></a>
</div>
</div>
<div id="transition">
<div class="spinner"></div>
</div>
<div class="content-wrapper"> <!-- Wrap your content here -->
<!-- Buttons for panning -->
<div class="action-buttons">
<button class="buttonTog" id="buttonTog" onclick="toggleOP()">Toggle UI</button>
<button class="resetView" id="resetView" onclick="resetView()">Reset View</button>
</div>
<div class="chat-container">
<div class="chat-messages">
<ul></ul>
</div>
<div class="chat-input">
<input id="chat-input" type="text" placeholder="Type to chat...">
</div>
</div>
<div class="pan-buttons" id="buttons">
<div class="top">
<button class="up" onclick="pan('up')">Up</button>
</div>
<div class="middle">
<button class="left" onclick="pan('left')">Left</button>
<button class="right" onclick="pan('right')">Right</button>
</div>
<div class="base">
<button class="down" onclick="pan('down')">Down</button>
</div>
</div>
<div class="clients" id="connectedClients">
<p id="clientNum">Connected Clients: N/A</p>
</div>
<div class="coordinates" id="xy">
<p>x: </p><p id="x">0</p><p>y: </p><p id="y">0</p>
</div>
<div class="data-size" id="data">
<p>Size: 0MB</p>
</div>
<div class="ping" id="ping">
<p></p>
</div>
<div class="client-version" id="version">
<p></p>
</div>
<div class="collavas">
<p>Collavas WEB © 2024 All rights reserved.</p>
</div>
<!-- Canvas container -->
<div class="canvasWrapper">
<div class="canvasContainer" id="canvasContainer">
<canvas id="drawingCanvas" class="canvas-main" width="10000" height="10000"></canvas>
</div>
</div>
<audio src="" id="audio-player" style="display: none;">
</div>
</div>
<script src="/static/js/main-96wMDN.js"></script>
</body>
</html>
+20
View File
@@ -0,0 +1,20 @@
<?php
// Handle data storage and retrieval
$dataFile = 'drawing_data.json';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Handle incoming drawing data
$currentData = json_decode(file_get_contents($dataFile), true);
$newData = json_decode(file_get_contents('php://input'), true);
// Merge new data with existing data
$currentData[] = $newData;
// Save the updated data
file_put_contents($dataFile, json_encode($currentData, JSON_PRETTY_PRINT));
echo 'Data saved successfully';
} else {
// Serve the HTML file
include 'main.html';
}
?>
+104
View File
@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Drawing</title>
<style>
canvas {
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas id="drawingCanvas" width="1000" height="1000"></canvas>
<script>
const canvas = document.getElementById('drawingCanvas');
const context = canvas.getContext('2d');
let existingData = []; // Initialize existingData
// Function to save drawing data to the server
function saveDrawing(data) {
fetch('index.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then(response => response.text())
.then(message => console.log(message))
.catch(error => console.error('Error saving drawing data:', error));
}
// Function to draw a path on the canvas
function drawPath(path) {
path.forEach((point, index) => {
if (index === 0) {
context.beginPath(); // Start a new path
context.moveTo(point.x, point.y);
} else {
context.lineTo(point.x, point.y);
}
context.stroke();
});
}
// Function to draw existingData on the canvas
function drawExistingData() {
context.clearRect(0, 0, canvas.width, canvas.height);
existingData.forEach(path => drawPath(path));
}
// Function to load existing drawing data from a JSON file
function loadDrawing() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'drawing_data.json', false); // Synchronous request
xhr.send();
if (xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
if (Array.isArray(data)) {
existingData = data; // Update existingData
drawExistingData(); // Draw existingData on the canvas
} else {
console.error('Invalid data format:', data);
}
} else {
console.error('Error loading drawing data. Status:', xhr.status);
}
}
// Load existing drawing data on page load
loadDrawing();
// Array to store the current drawing path
let currentPath = [];
// Event listener for mouse down
canvas.addEventListener('mousedown', (event) => {
currentPath = [{ x: event.clientX, y: event.clientY }];
});
// Event listener for mouse move
canvas.addEventListener('mousemove', (event) => {
if (currentPath.length > 0) {
currentPath.push({ x: event.clientX, y: event.clientY });
drawExistingData();
drawPath(currentPath);
}
});
// Event listener for mouse up
canvas.addEventListener('mouseup', () => {
if (currentPath.length > 1) {
existingData.push(currentPath);
saveDrawing(existingData);
}
currentPath = [];
});
</script>
</body>
</html>
+2
View File
@@ -0,0 +1,2 @@
/*!* Font Awesome Pro 5.10.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)*/.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fLine truncated
+672
View File
@@ -0,0 +1,672 @@
:root {
--blue: #039be5;
--indigo: #6610f2;
--purple: #ba68c8;
--pink: #e83e8c;
--red: #e3342f;
--orange: #fd7e14;
--yellow: #ffb300;
--green: #00b857;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #039be5;
--secondary: #6c757d;
--success: #00b857;
--info: #ba68c8;
--warning: #ffb300;
--danger: #e3342f;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
canvas {
background: #FFF;
width: auto;
height: 100%;
}
p {
color: #FFF;
margin: 0;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #FFC0CB;
}
.top-bar {
background-color: #f78397;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 9999999999999;
}
.logo img {
max-width: auto;
height: 45px;
padding: 5px;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-right: 20px;
padding: 0;
display: flex;
}
.menu li {
padding: 10px;
}
.menu a {
text-decoration: none;
color: #fff;
}
.canvasWrapper {
position: relative;
z-index: 0;
width: 100%;
height: calc(100vh - 65px);
pointer-events: auto;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.canvasContainer {
position: absolute;
}
.canvas-main {
transition: opacity 0.5s ease-in, transform.translate 0.5s ease-in;
opacity: 0;
visibility: hidden;
z-index: 1;
pointer-events: auto;
image-rendering: pixelated;
}
.pan-buttons {
transition: 0.25s ease-in;
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
display: flex;
justify-content: center;
}
.content-wrapper {
position: relative;
width: 100%;
height: 100%;
pointer-events: auto;
}
.pan-buttons .top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .top .up {
height: 10vh;
width: 25%;
margin: 10px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .top .up:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle {
position: absolute;
top: 50%;
left: 0;
height: 100%;
width: 100%;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-50%);
}
.pan-buttons .middle .right {
height: 35vh;
width: 12.5vh;
margin-right: 10px;
margin-left: auto;
opacity: 25%;
margin: 10px;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .right:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle .left {
height: 35vh;
width: 12.5vh;
margin-right: auto;
margin-left: 10px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .left:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .base {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 15%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .base .down {
height: 10vh;
width: 25%;
margin: 25px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .base .down:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons button {
pointer-events: auto;
}
.pan-buttons {
pointer-events: none;
}
.buttonTog {
position: absolute;
top: 10px;
left: 10px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.resetView {
position: absolute;
top: 10px;
left: 70px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.chat-container {
display: none;
flex-direction: column;
position: absolute;
top: 10px;
right: 10px;
width: 30%;
height: 25%;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
}
.chat-messages {
height: 95%;
opacity: 25%;
padding: 10px;
background: #000;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
word-wrap: break-word;
word-break: break-all;
white-space: normal;
}
.chat-messages ul {
flex-direction: column-reverse;
list-style-type: none;
padding: 0;
margin: 0;
overflow-y: auto;
max-height: 100%;
}
.chat-input {
width: 100%;
}
#chat-input {
margin-top: 5px;
width: 100%;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
}
#chat-input:focus {
outline: none;
border-radius: 0;
}
.buttonTog:hover {
opacity: 50%;
cursor: pointer;
}
.resetView:hover {
opacity: 50%;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
z-index: 1000;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content {
top: 45px;
right: 1%;
max-height: 200px;
width: 15%;
overflow-y: auto;
background-color: #de7688;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeInUp 0.15s ease;
}
.coordinates {
position: absolute;
left: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.clients {
transition: 0.5s ease-in;
position: absolute;
left: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.collavas {
position: absolute;
right: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.client-version {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.ping {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 80px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.data-size {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 115px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.coordinates p {
display: flex;
flex-direction: row;
margin-left: 5px;
}
.messages {
display: flex;
justify-content: center;
position: absolute;
left: 50%;
right: 50%;
top: 0px;
z-index: 99999999999999999999;
}
.message {
display: flex;
justify-content: center;
margin-top: 40px;
width: auto;
min-width: 250px;
max-width: 750px;
margin-left: 20px;
}
#welcome>.message {
display: flex;
flex-direction: column;
text-align: center;
width: 1000px;
padding: 20px;
}
.spinner,
.spinner::before,
.spinner::after {
width: 10px;
height: 10px;
border-radius: 2px;
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
animation: spinner 1.0s linear infinite;
}
.spinner {
position: relative;
}
.spinner::before {
content: "";
position: absolute;
left: 0px;
top: 0px;
animation-delay: -0.1s;
}
.spinner::after {
content: "";
position: absolute;
top: 0px;
left: 0px;
animation-delay: 0.1s;
}
#transition {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
#welcome {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
opacity: 0;
display: none;
align-items: center;
justify-content: center;
flex-direction: column;
}
.fadeup {
animation: fadeInUp 0.25s ease;
}
.fadedown {
opacity: 0;
animation: fadeOutDown 0.25s ease;
}
.green {
background-color: var(--green);
}
.blue {
background-color: var(--blue);
}
.indigo {
background-color: var(--indigo);
}
.purple {
background-color: var(--purple);
}
.pink {
background-color: var(--pink);
}
.red {
background-color: var(--red);
}
.orange {
background-color: var(--orange);
}
.yellow {
background-color: var(--yellow);
}
.teal {
background-color: var(--teal);
}
.cyan {
background-color: var(--cyan);
}
.white {
background-color: var(--white);
}
.gray {
background-color: var(--gray);
}
.gray-dark {
background-color: var(--gray-dark);
}
.primary {
background-color: var(--primary);
}
.secondary {
background-color: var(--secondary);
}
.success {
background-color: var(--success);
}
.info {
background-color: var(--info);
}
.warning {
background-color: var(--warning);
}
.danger {
background-color: var(--danger);
}
.light {
background-color: var(--light);
}
.dark {
background-color: var(--dark);
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeOutDown {
0% {
opacity: 1
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes spinner {
0% {
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
width: 20px;
}
25% {
box-shadow: 20px 10px 0 rgba(255, 255, 255, 1);
width: 10px;
}
50% {
box-shadow: 60px 10px 0 rgba(255, 255, 255, 0);
width: 10px;
}
}
+615
View File
@@ -0,0 +1,615 @@
:root {
--blue: #039be5;
--indigo: #6610f2;
--purple: #ba68c8;
--pink: #e83e8c;
--red: #e3342f;
--orange: #fd7e14;
--yellow: #ffb300;
--green: #00b857;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #039be5;
--secondary: #6c757d;
--success: #00b857;
--info: #ba68c8;
--warning: #ffb300;
--danger: #e3342f;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
canvas {
background: #FFF;
width: auto;
height: 100%;
}
p {
color: #FFF;
margin: 0;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #FFC0CB;
}
.top-bar {
background-color: #f78397;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 9999999999999;
}
.logo img {
max-width: auto;
height: 45px;
padding: 5px;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-right: 20px;
padding: 0;
display: flex;
}
.menu li {
padding: 10px;
}
.menu a {
text-decoration: none;
color: #fff;
}
.canvasWrapper {
position: relative;
z-index: 0;
width: 100%;
height: calc(100vh - 65px);
pointer-events: auto;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.canvasContainer {
position: absolute;
}
.canvas-main {
transition: opacity 0.5s ease-in, transform.translate 0.5s ease-in;
opacity: 0;
visibility: hidden;
z-index: 1;
pointer-events: auto;
image-rendering: pixelated;
}
.pan-buttons {
transition: 0.25s ease-in;
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
display: flex;
justify-content: center;
}
.content-wrapper {
position: relative;
width: 100%;
height: 100%;
pointer-events: auto;
}
.pan-buttons .top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .top .up {
height: 10vh;
width: 25%;
margin: 10px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .top .up:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle {
position: absolute;
top: 50%;
left: 0;
height: 100%;
width: 100%;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-50%);
}
.pan-buttons .middle .right {
height: 35vh;
width: 12.5vh;
margin-right: 10px;
margin-left: auto;
opacity: 25%;
margin: 10px;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .right:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle .left {
height: 35vh;
width: 12.5vh;
margin-right: auto;
margin-left: 10px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .left:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .base {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 15%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .base .down {
height: 10vh;
width: 25%;
margin: 25px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .base .down:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons button {
pointer-events: auto;
}
.pan-buttons {
pointer-events: none;
}
.buttonTog {
position: absolute;
top: 10px;
left: 10px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.resetView {
position: absolute;
top: 10px;
left: 70px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.buttonTog:hover {
opacity: 50%;
cursor: pointer;
}
.resetView:hover {
opacity: 50%;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
z-index: 1000;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content {
top: 45px;
right: 1%;
max-height: 200px;
width: 15%;
overflow-y: auto;
background-color: #de7688;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeInUp 0.15s ease;
}
.coordinates {
position: absolute;
left: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.clients {
transition: 0.5s ease-in;
position: absolute;
left: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.collavas {
position: absolute;
right: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.client-version {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.ping {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 80px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.data-size {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 115px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.coordinates p {
display: flex;
flex-direction: row;
margin-left: 5px;
}
.messages {
display: flex;
justify-content: center;
position: absolute;
left: 50%;
right: 50%;
top: 0px;
z-index: 99999999999999999999;
}
.message {
display: flex;
justify-content: center;
margin-top: 40px;
width: auto;
min-width: 250px;
max-width: 750px;
margin-left: 20px;
}
#welcome>.message {
display: flex;
flex-direction: column;
text-align: center;
width: 1000px;
padding: 20px;
}
.spinner,
.spinner::before,
.spinner::after {
width: 10px;
height: 10px;
border-radius: 2px;
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
animation: spinner 1.0s linear infinite;
}
.spinner {
position: relative;
}
.spinner::before {
content: "";
position: absolute;
left: 0px;
top: 0px;
animation-delay: -0.1s;
}
.spinner::after {
content: "";
position: absolute;
top: 0px;
left: 0px;
animation-delay: 0.1s;
}
#transition {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
#welcome {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
opacity: 0;
display: none;
align-items: center;
justify-content: center;
flex-direction: column;
}
.fadeup {
animation: fadeInUp 0.25s ease;
}
.fadedown {
opacity: 0;
animation: fadeOutDown 0.25s ease;
}
.green {
background-color: var(--green);
}
.blue {
background-color: var(--blue);
}
.indigo {
background-color: var(--indigo);
}
.purple {
background-color: var(--purple);
}
.pink {
background-color: var(--pink);
}
.red {
background-color: var(--red);
}
.orange {
background-color: var(--orange);
}
.yellow {
background-color: var(--yellow);
}
.teal {
background-color: var(--teal);
}
.cyan {
background-color: var(--cyan);
}
.white {
background-color: var(--white);
}
.gray {
background-color: var(--gray);
}
.gray-dark {
background-color: var(--gray-dark);
}
.primary {
background-color: var(--primary);
}
.secondary {
background-color: var(--secondary);
}
.success {
background-color: var(--success);
}
.info {
background-color: var(--info);
}
.warning {
background-color: var(--warning);
}
.danger {
background-color: var(--danger);
}
.light {
background-color: var(--light);
}
.dark {
background-color: var(--dark);
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeOutDown {
0% {
opacity: 1
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes spinner {
0% {
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
width: 20px;
}
25% {
box-shadow: 20px 10px 0 rgba(255, 255, 255, 1);
width: 10px;
}
50% {
box-shadow: 60px 10px 0 rgba(255, 255, 255, 0);
width: 10px;
}
}
+669
View File
@@ -0,0 +1,669 @@
:root {
--blue: #039be5;
--indigo: #6610f2;
--purple: #ba68c8;
--pink: #e83e8c;
--red: #e3342f;
--orange: #fd7e14;
--yellow: #ffb300;
--green: #00b857;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #039be5;
--secondary: #6c757d;
--success: #00b857;
--info: #ba68c8;
--warning: #ffb300;
--danger: #e3342f;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
canvas {
background: #FFF;
width: auto;
height: 100%;
}
p {
color: #FFF;
margin: 0;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #FFC0CB;
}
.top-bar {
background-color: #f78397;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 9999999999999;
}
.logo img {
max-width: auto;
height: 45px;
padding: 5px;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-right: 20px;
padding: 0;
display: flex;
}
.menu li {
padding: 10px;
}
.menu a {
text-decoration: none;
color: #fff;
}
.canvasWrapper {
position: relative;
z-index: 0;
width: 100%;
height: calc(100vh - 65px);
pointer-events: auto;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.canvasContainer {
position: absolute;
}
.canvas-main {
transition: opacity 0.5s ease-in, transform.translate 0.5s ease-in;
opacity: 0;
visibility: hidden;
z-index: 1;
pointer-events: auto;
image-rendering: pixelated;
}
.pan-buttons {
transition: 0.25s ease-in;
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
display: flex;
justify-content: center;
}
.content-wrapper {
position: relative;
width: 100%;
height: 100%;
pointer-events: auto;
}
.pan-buttons .top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .top .up {
height: 10vh;
width: 25%;
margin: 10px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .top .up:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle {
position: absolute;
top: 50%;
left: 0;
height: 100%;
width: 100%;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-50%);
}
.pan-buttons .middle .right {
height: 35vh;
width: 12.5vh;
margin-right: 10px;
margin-left: auto;
opacity: 25%;
margin: 10px;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .right:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle .left {
height: 35vh;
width: 12.5vh;
margin-right: auto;
margin-left: 10px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .left:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .base {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 15%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .base .down {
height: 10vh;
width: 25%;
margin: 25px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .base .down:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons button {
pointer-events: auto;
}
.pan-buttons {
pointer-events: none;
}
.buttonTog {
position: absolute;
top: 10px;
left: 10px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.resetView {
position: absolute;
top: 10px;
left: 70px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.chat-container {
display: none;
flex-direction: column;
position: absolute;
top: 10px;
right: 10px;
width: 30%;
height: 25%;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
}
.chat-messages {
height: 95%;
opacity: 25%;
padding: 10px;
background: #000;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
}
.chat-messages ul {
flex-direction: column-reverse;
list-style-type: none;
padding: 0;
margin: 0;
overflow-y: auto;
max-height: 100%;
}
.chat-input {
width: 100%;
}
#chat-input {
margin-top: 5px;
width: 100%;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
pointer-events: auto;
z-index: 1;
}
#chat-input:focus {
outline: none;
border-radius: 0;
}
.buttonTog:hover {
opacity: 50%;
cursor: pointer;
}
.resetView:hover {
opacity: 50%;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
z-index: 1000;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content {
top: 45px;
right: 1%;
max-height: 200px;
width: 15%;
overflow-y: auto;
background-color: #de7688;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeInUp 0.15s ease;
}
.coordinates {
position: absolute;
left: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.clients {
transition: 0.5s ease-in;
position: absolute;
left: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.collavas {
position: absolute;
right: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.client-version {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.ping {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 80px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.data-size {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 115px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.coordinates p {
display: flex;
flex-direction: row;
margin-left: 5px;
}
.messages {
display: flex;
justify-content: center;
position: absolute;
left: 50%;
right: 50%;
top: 0px;
z-index: 99999999999999999999;
}
.message {
display: flex;
justify-content: center;
margin-top: 40px;
width: auto;
min-width: 250px;
max-width: 750px;
margin-left: 20px;
}
#welcome>.message {
display: flex;
flex-direction: column;
text-align: center;
width: 1000px;
padding: 20px;
}
.spinner,
.spinner::before,
.spinner::after {
width: 10px;
height: 10px;
border-radius: 2px;
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
animation: spinner 1.0s linear infinite;
}
.spinner {
position: relative;
}
.spinner::before {
content: "";
position: absolute;
left: 0px;
top: 0px;
animation-delay: -0.1s;
}
.spinner::after {
content: "";
position: absolute;
top: 0px;
left: 0px;
animation-delay: 0.1s;
}
#transition {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
#welcome {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
opacity: 0;
display: none;
align-items: center;
justify-content: center;
flex-direction: column;
}
.fadeup {
animation: fadeInUp 0.25s ease;
}
.fadedown {
opacity: 0;
animation: fadeOutDown 0.25s ease;
}
.green {
background-color: var(--green);
}
.blue {
background-color: var(--blue);
}
.indigo {
background-color: var(--indigo);
}
.purple {
background-color: var(--purple);
}
.pink {
background-color: var(--pink);
}
.red {
background-color: var(--red);
}
.orange {
background-color: var(--orange);
}
.yellow {
background-color: var(--yellow);
}
.teal {
background-color: var(--teal);
}
.cyan {
background-color: var(--cyan);
}
.white {
background-color: var(--white);
}
.gray {
background-color: var(--gray);
}
.gray-dark {
background-color: var(--gray-dark);
}
.primary {
background-color: var(--primary);
}
.secondary {
background-color: var(--secondary);
}
.success {
background-color: var(--success);
}
.info {
background-color: var(--info);
}
.warning {
background-color: var(--warning);
}
.danger {
background-color: var(--danger);
}
.light {
background-color: var(--light);
}
.dark {
background-color: var(--dark);
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeOutDown {
0% {
opacity: 1
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes spinner {
0% {
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
width: 20px;
}
25% {
box-shadow: 20px 10px 0 rgba(255, 255, 255, 1);
width: 10px;
}
50% {
box-shadow: 60px 10px 0 rgba(255, 255, 255, 0);
width: 10px;
}
}
+615
View File
@@ -0,0 +1,615 @@
:root {
--blue: #039be5;
--indigo: #6610f2;
--purple: #ba68c8;
--pink: #e83e8c;
--red: #e3342f;
--orange: #fd7e14;
--yellow: #ffb300;
--green: #00b857;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #039be5;
--secondary: #6c757d;
--success: #00b857;
--info: #ba68c8;
--warning: #ffb300;
--danger: #e3342f;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
canvas {
background: #FFF;
width: auto;
height: 100%;
}
p {
color: #FFF;
margin: 0;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #FFC0CB;
}
.top-bar {
background-color: #f78397;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 9999999999999;
}
.logo img {
max-width: auto;
height: 45px;
padding: 5px;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-right: 20px;
padding: 0;
display: flex;
}
.menu li {
padding: 10px;
}
.menu a {
text-decoration: none;
color: #fff;
}
.canvasWrapper {
position: relative;
z-index: 0;
width: 100%;
height: calc(100vh - 65px);
pointer-events: auto;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.canvasContainer {
position: absolute;
}
.canvas-main {
transition: opacity 0.5s ease-in, transform.translate 0.5s ease-in;
opacity: 0;
visibility: hidden;
z-index: 1;
pointer-events: auto;
image-rendering: pixelated;
}
.pan-buttons {
transition: 0.25s ease-in;
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
display: flex;
justify-content: center;
}
.content-wrapper {
position: relative;
width: 100%;
height: 100%;
pointer-events: auto;
}
.pan-buttons .top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .top .up {
height: 10vh;
width: 25%;
margin: 10px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .top .up:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle {
position: absolute;
top: 50%;
left: 0;
height: 100%;
width: 100%;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-50%);
}
.pan-buttons .middle .right {
height: 35vh;
width: 12.5vh;
margin-right: 10px;
margin-left: auto;
opacity: 25%;
margin: 10px;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .right:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle .left {
height: 35vh;
width: 12.5vh;
margin-right: auto;
margin-left: 10px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .left:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .base {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 15%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .base .down {
height: 10vh;
width: 25%;
margin: 25px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .base .down:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons button {
pointer-events: auto;
}
.pan-buttons {
pointer-events: none;
}
.buttonTog {
position: absolute;
top: 10px;
left: 10px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.resetView {
position: absolute;
top: 10px;
left: 70px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.buttonTog:hover {
opacity: 50%;
cursor: pointer;
}
.resetView:hover {
opacity: 50%;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
z-index: 1000;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content {
top: 45px;
right: 1%;
max-height: 200px;
width: 15%;
overflow-y: auto;
background-color: #de7688;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeInUp 0.15s ease;
}
.coordinates {
position: absolute;
left: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.clients {
transition: 0.5s ease-in;
position: absolute;
left: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.collavas {
position: absolute;
right: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.client-version {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.ping {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 80px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.data-size {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 115px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.coordinates p {
display: flex;
flex-direction: row;
margin-left: 5px;
}
.messages {
display: flex;
justify-content: center;
position: absolute;
left: 50%;
right: 50%;
top: 0px;
z-index: 99999999999999999999;
}
.message {
display: flex;
justify-content: center;
margin-top: 40px;
width: auto;
min-width: 250px;
max-width: 750px;
margin-left: 20px;
}
#welcome>.message {
display: flex;
flex-direction: column;
text-align: center;
width: 1000px;
padding: 20px;
}
.spinner,
.spinner::before,
.spinner::after {
width: 10px;
height: 10px;
border-radius: 2px;
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
animation: spinner 1.0s linear infinite;
}
.spinner {
position: relative;
}
.spinner::before {
content: "";
position: absolute;
left: 0px;
top: 0px;
animation-delay: -0.1s;
}
.spinner::after {
content: "";
position: absolute;
top: 0px;
left: 0px;
animation-delay: 0.1s;
}
#transition {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
#welcome {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
opacity: 0;
display: none;
align-items: center;
justify-content: center;
flex-direction: column;
}
.fadeup {
animation: fadeInUp 0.25s ease;
}
.fadedown {
opacity: 0;
animation: fadeOutDown 0.25s ease;
}
.green {
background-color: var(--green);
}
.blue {
background-color: var(--blue);
}
.indigo {
background-color: var(--indigo);
}
.purple {
background-color: var(--purple);
}
.pink {
background-color: var(--pink);
}
.red {
background-color: var(--red);
}
.orange {
background-color: var(--orange);
}
.yellow {
background-color: var(--yellow);
}
.teal {
background-color: var(--teal);
}
.cyan {
background-color: var(--cyan);
}
.white {
background-color: var(--white);
}
.gray {
background-color: var(--gray);
}
.gray-dark {
background-color: var(--gray-dark);
}
.primary {
background-color: var(--primary);
}
.secondary {
background-color: var(--secondary);
}
.success {
background-color: var(--success);
}
.info {
background-color: var(--info);
}
.warning {
background-color: var(--warning);
}
.danger {
background-color: var(--danger);
}
.light {
background-color: var(--light);
}
.dark {
background-color: var(--dark);
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeOutDown {
0% {
opacity: 1
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes spinner {
0% {
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
width: 20px;
}
25% {
box-shadow: 20px 10px 0 rgba(255, 255, 255, 1);
width: 10px;
}
50% {
box-shadow: 60px 10px 0 rgba(255, 255, 255, 0);
width: 10px;
}
}
+601
View File
@@ -0,0 +1,601 @@
:root {
--blue: #039be5;
--indigo: #6610f2;
--purple: #ba68c8;
--pink: #e83e8c;
--red: #e3342f;
--orange: #fd7e14;
--yellow: #ffb300;
--green: #00b857;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #039be5;
--secondary: #6c757d;
--success: #00b857;
--info: #ba68c8;
--warning: #ffb300;
--danger: #e3342f;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
canvas {
background: #FFF;
width: auto;
height: 100%;
}
p {
color: #FFF;
margin: 0;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #FFC0CB;
}
.top-bar {
background-color: #f78397;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 9999999999999;
}
.logo img {
max-width: auto;
height: 45px;
padding: 5px;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-right: 20px;
padding: 0;
display: flex;
}
.menu li {
padding: 10px;
}
.menu a {
text-decoration: none;
color: #fff;
}
.canvasWrapper {
position: relative;
z-index: 0;
width: 100%;
height: calc(100vh - 65px);
pointer-events: auto;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.canvasContainer {
position: absolute;
}
.canvas-main {
transition: opacity 0.5s ease-in, transform.translate 0.5s ease-in;
opacity: 0;
visibility: hidden;
z-index: 1;
pointer-events: auto;
image-rendering: pixelated;
}
.pan-buttons {
transition: 0.25s ease-in;
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
display: flex;
justify-content: center;
}
.content-wrapper {
position: relative;
width: 100%;
height: 100%;
pointer-events: auto;
}
.pan-buttons .top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .top .up {
height: 10vh;
width: 25%;
margin: 10px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .top .up:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle {
position: absolute;
top: 50%;
left: 0;
height: 100%;
width: 100%;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-50%);
}
.pan-buttons .middle .right {
height: 35vh;
width: 12.5vh;
margin-right: 10px;
margin-left: auto;
opacity: 25%;
margin: 10px;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .right:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .middle .left {
height: 35vh;
width: 12.5vh;
margin-right: auto;
margin-left: 10px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .middle .left:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons .base {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 15%;
z-index: 2;
display: flex;
justify-content: center;
}
.pan-buttons .base .down {
height: 10vh;
width: 25%;
margin: 25px auto;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
}
.pan-buttons .base .down:hover {
opacity: 50%;
cursor: pointer;
}
.pan-buttons button {
pointer-events: auto;
}
.pan-buttons {
pointer-events: none;
}
.buttonTog {
position: absolute;
top: 10px;
left: 10px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.resetView {
position: absolute;
top: 10px;
left: 70px;
height: 50px;
width: 50px;
opacity: 25%;
background: #000;
color: #FFF;
border: 0px;
border-radius: 5px;
pointer-events: auto;
z-index: 1;
}
.buttonTog:hover {
opacity: 50%;
cursor: pointer;
}
.resetView:hover {
opacity: 50%;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
z-index: 1000;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content {
top: 45px;
right: 1%;
max-height: 200px;
width: 15%;
overflow-y: auto;
background-color: #de7688;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeInUp 0.15s ease;
}
.coordinates {
position: absolute;
left: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.clients {
transition: 0.5s ease-in;
position: absolute;
left: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.collavas {
position: absolute;
right: 10px;
bottom: 10px;
display: flex;
flex-direction: row;
opacity: 25%;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.client-version {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 45px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.ping {
transition: 0.5s ease-in;
position: absolute;
right: 10px;
bottom: 80px;
display: flex;
flex-direction: row;
opacity: 0;
background: #000;
border-radius: 3px;
padding: 5px;
z-index: 500;
}
.coordinates p {
display: flex;
flex-direction: row;
margin-left: 5px;
}
.messages {
display: flex;
justify-content: center;
position: absolute;
left: 50%;
right: 50%;
top: 0px;
z-index: 99999999999999999999;
}
.message {
display: flex;
justify-content: center;
margin-top: 40px;
width: auto;
min-width: 250px;
max-width: 750px;
margin-left: 20px;
}
#welcome>.message {
display: flex;
flex-direction: column;
text-align: center;
width: 1000px;
padding: 20px;
}
.spinner,
.spinner::before,
.spinner::after {
width: 10px;
height: 10px;
border-radius: 2px;
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
animation: spinner 1.0s linear infinite;
}
.spinner {
position: relative;
}
.spinner::before {
content: "";
position: absolute;
left: 0px;
top: 0px;
animation-delay: -0.1s;
}
.spinner::after {
content: "";
position: absolute;
top: 0px;
left: 0px;
animation-delay: 0.1s;
}
#transition {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
#welcome {
transition: 0.5s ease-in-out;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
background: rgba(0, 0, 0, 0.5);
z-index: 1;
opacity: 0;
display: none;
align-items: center;
justify-content: center;
flex-direction: column;
}
.fadeup {
animation: fadeInUp 0.25s ease;
}
.fadedown {
opacity: 0;
animation: fadeOutDown 0.25s ease;
}
.green {
background-color: var(--green);
}
.blue {
background-color: var(--blue);
}
.indigo {
background-color: var(--indigo);
}
.purple {
background-color: var(--purple);
}
.pink {
background-color: var(--pink);
}
.red {
background-color: var(--red);
}
.orange {
background-color: var(--orange);
}
.yellow {
background-color: var(--yellow);
}
.teal {
background-color: var(--teal);
}
.cyan {
background-color: var(--cyan);
}
.white {
background-color: var(--white);
}
.gray {
background-color: var(--gray);
}
.gray-dark {
background-color: var(--gray-dark);
}
.primary {
background-color: var(--primary);
}
.secondary {
background-color: var(--secondary);
}
.success {
background-color: var(--success);
}
.info {
background-color: var(--info);
}
.warning {
background-color: var(--warning);
}
.danger {
background-color: var(--danger);
}
.light {
background-color: var(--light);
}
.dark {
background-color: var(--dark);
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeOutDown {
0% {
opacity: 1
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes spinner {
0% {
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
width: 20px;
}
25% {
box-shadow: 20px 10px 0 rgba(255, 255, 255, 1);
width: 10px;
}
50% {
box-shadow: 60px 10px 0 rgba(255, 255, 255, 0);
width: 10px;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

+53
View File
@@ -0,0 +1,53 @@
document.addEventListener("DOMContentLoaded", () => {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const socket = new WebSocket("ws://10.0.0.132:7777"); // Change the server address
let drawing = false;
canvas.addEventListener("mousedown", startDrawing);
canvas.addEventListener("mouseup", stopDrawing);
canvas.addEventListener("mousemove", draw);
function startDrawing(e) {
drawing = true;
draw(e);
}
function stopDrawing() {
drawing = false;
ctx.beginPath();
sendDrawingData();
}
function draw(e) {
if (!drawing) return;
ctx.lineWidth = 2;
ctx.lineCap = "round";
ctx.strokeStyle = "#000";
ctx.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
sendDrawingData();
}
function sendDrawingData() {
const imageData = canvas.toDataURL("image/png");
socket.send(JSON.stringify({ type: "draw", data: imageData }));
}
socket.addEventListener("message", (event) => {
const data = JSON.parse(event.data);
if (data.type === "draw") {
const image = new Image();
image.onload = function () {
ctx.drawImage(image, 0, 0);
};
image.src = data.data;
}
});
});
+53
View File
@@ -0,0 +1,53 @@
document.addEventListener("DOMContentLoaded", () => {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const socket = new WebSocket("ws://10.0.0.132:7777"); // Change the server address
let drawing = false;
canvas.addEventListener("mousedown", startDrawing);
canvas.addEventListener("mouseup", stopDrawing);
canvas.addEventListener("mousemove", draw);
function startDrawing(e) {
drawing = true;
draw(e);
}
function stopDrawing() {
drawing = false;
ctx.beginPath();
sendDrawingData();
}
function draw(e) {
if (!drawing) return;
ctx.lineWidth = 2;
ctx.lineCap = "round";
ctx.strokeStyle = "#000";
ctx.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
sendDrawingData();
}
function sendDrawingData() {
const imageData = canvas.toDataURL("image/png");
socket.send(JSON.stringify({ type: "draw", data: imageData }));
}
socket.addEventListener("message", (event) => {
const data = JSON.parse(event.data);
if (data.type === "draw") {
const image = new Image();
image.onload = function () {
ctx.drawImage(image, 0, 0);
};
image.src = data.data;
}
});
});
+1
View File
@@ -0,0 +1 @@
const _0x4a2fee=_0x1229;(function(_0x123ba9,_0xa960f7){const _0xd79cf7=_0x1229,_0x532974=_0x123ba9();while(!![]){try{const _0x5ad226=-parseInt(_0xd79cf7(0x1b4))/(0x4be*0x2+0x26b0+-0x1*0x302b)+-parseInt(_0xd79cf7(0x27e))/(0x5e4+-0x1034+0xa52)+-parseInt(_0xd79cf7(0x125))/(0x1718+0xf*0x6f+-0x1d96)+-parseInt(_0xd79cf7(0x16e))/(-0x129*-0x5+-0x15*-0x34+-0xa0d)*(-parseInt(_0xd79cf7(0x1ff))/(-0x25dd+0x1df7+0x1*0x7eb))+parseInt(_0xd79cf7(0x1cc))/(-0x3b*-0x59+-0x1*-0x304+-0x1781*0x1)+-parseInt(_0xd79cf7(0x235))/(-0x3*-0xce2+-0x1*0x1c57+-0x4*0x292)*(parseInt(_0xd79cf7(0x250))/(0x1c+0xe62+-0xe76))+parseInt(_0xd79cf7(0x228))/(-0x2521+0x16e7+0xe43)*(parseInt(_0xd79cf7(0x1d4))/(-0x31*0x87+0x1f51+0x2*-0x2b8));if(_0x5ad226===_0xa960f7)break;else _0x532974['push'](_0x532974['shift']());}catch(_0x2827d4){_0x532974['push'](_0x532974['shift']());}}}(_0x37a6,0xa3c48+-0x672c8+0x9341a));const socket=io({'timeout':0x1f4}),canvas=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)](_0x4a2fee(0x1b2)+_0x4a2fee(0x1f4)),canvasContainer=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)](_0x4a2fee(0x21c)+_0x4a2fee(0x10c)),buttons=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)](_0x4a2fee(0x1a7)),tx=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)]('x'),ty=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)]('y'),context=canvas[_0x4a2fee(0x1f6)]('2d'),chat=document[_0x4a2fee(0x25f)+_0x4a2fee(0x145)](_0x4a2fee(0x1e4)+_0x4a2fee(0x10c)),nameinput=document[_0x4a2fee(0x1a3)+_0x4a2fee(0x1b5)](_0x4a2fee(0x17c)),drawingEmitDelay=-0x295+-0x22*0x11b+0x2a1f;let lastDrawingEmitTime=0x8dd*-0x2+-0xc15+0x1*0x1dcf,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x4a2fee(0x18e),announceCount=0x1a38+-0x17fb+-0x23c,connectionTimer=null,connectionSeconds=-0x1591+0x18ad+-0x31c,versionSet=![],ping=null,uuid='';context[_0x4a2fee(0x122)+_0x4a2fee(0x257)+'d']=!![],canvasContainer[_0x4a2fee(0x1e8)][_0x4a2fee(0x10d)]=_0x4a2fee(0x200)+')';function getCookie(_0x54774a){const _0x18c415=_0x4a2fee,_0xddc675={'ylPDb':function(_0xcc003f,_0x5d4907){return _0xcc003f===_0x5d4907;}},_0x53b042=document[_0x18c415(0x24a)][_0x18c415(0x276)](';')[_0x18c415(0x199)](_0x2450b0=>_0x2450b0[_0x18c415(0x1dc)]());for(const _0x390815 of _0x53b042){const [_0x28bbb4,_0x53fe99]=_0x390815[_0x18c415(0x276)]('=')[_0x18c415(0x199)](_0x2475af=>decodeURIComponent(_0x2475af));if(_0xddc675[_0x18c415(0x150)](_0x28bbb4,_0x54774a))return _0x53fe99;}return null;}function setCookie(_0xcac3fd,_0x1ef456,_0x239f02){const _0x351deb=_0x4a2fee,_0x19a965={'RrVEf':function(_0x37b694,_0xa41293){return _0x37b694+_0xa41293;},'KGXWL':function(_0x58e785,_0x126568){return _0x58e785+_0x126568;},'mIjog':function(_0x3e237c,_0x3f97c6){return _0x3e237c(_0x3f97c6);}},_0x4fd21e=new Date();_0x4fd21e[_0x351deb(0x24d)](_0x19a965[_0x351deb(0x14a)](_0x4fd21e[_0x351deb(0x1f1)](),_0x239f02));const _0x28b739=_0x19a965[_0x351deb(0x170)](_0x19a965[_0x351deb(0x135)](encodeURIComponent,_0x1ef456),_0x239f02?_0x351deb(0x143)+_0x4fd21e[_0x351deb(0x182)+'g']():'');document[_0x351deb(0x24a)]=_0xcac3fd+'='+_0x28b739+_0x351deb(0x23f);}function pinger(){const _0x26e25f=_0x4a2fee,_0x572823={'UksCe':function(_0x32693d,_0x4dfb5c){return _0x32693d-_0x4dfb5c;},'kRzbC':function(_0xffca32,_0x317b15){return _0xffca32+_0x317b15;},'gCKot':function(_0x3d48ee,_0x1c5e79){return _0x3d48ee+_0x1c5e79;},'mXacA':_0x26e25f(0x1fb),'llfhi':_0x26e25f(0x1c8),'DGDrD':_0x26e25f(0x175)},_0x4680bd=Date[_0x26e25f(0x1e2)](),_0x58b027=document[_0x26e25f(0x1a3)+_0x26e25f(0x1b5)](_0x572823[_0x26e25f(0x1ae)])[_0x26e25f(0x25f)+_0x26e25f(0x145)]('p');socket['on'](_0x572823[_0x26e25f(0x1be)],()=>{const _0x17db05=_0x26e25f,_0x236d1f=_0x572823[_0x17db05(0x163)](Date[_0x17db05(0x1e2)](),_0x4680bd);_0x58b027[_0x17db05(0x272)+'t']=_0x572823[_0x17db05(0x17b)](_0x572823[_0x17db05(0x11d)](_0x572823[_0x17db05(0x27a)],_0x236d1f),'ms'),document[_0x17db05(0x1a3)+_0x17db05(0x1b5)](_0x572823[_0x17db05(0x1ae)])[_0x17db05(0x1e8)][_0x17db05(0x1ad)]=-0xbe*0x13+-0x3*-0x48b+-0x1*-0x79+0.25;}),socket[_0x26e25f(0x211)](_0x572823[_0x26e25f(0x1ae)]);}ping=setInterval(pinger,0x5e6+-0x61*0x4f+-0x137*-0x17);function startConnectionTimer(){const _0x28e57e=_0x4a2fee,_0x231802={'AEakE':_0x28e57e(0x10b),'XLhFM':function(_0x2ff54d,_0x442e79){return _0x2ff54d+_0x442e79;},'xMFLc':_0x28e57e(0x17e)+_0x28e57e(0x12f)+_0x28e57e(0x245),'EFfVz':_0x28e57e(0x1cb),'cuXyx':function(_0x192a5e,_0x5f17d1){return _0x192a5e>_0x5f17d1;},'KgdWe':_0x28e57e(0x1a4)+_0x28e57e(0x1a1),'Ccvce':function(_0x3b5897,_0x4e3e43){return _0x3b5897(_0x4e3e43);},'PUXnD':_0x28e57e(0x194),'ThfMy':_0x28e57e(0x17d),'BjQZL':_0x28e57e(0x212)+_0x28e57e(0x20f),'HAIRN':_0x28e57e(0x13c),'MdJme':_0x28e57e(0x256)+_0x28e57e(0x271)+_0x28e57e(0x1d8),'aaZsi':_0x28e57e(0x1c5),'qUHvv':_0x28e57e(0x1e8),'ncSOu':_0x28e57e(0x16c)+_0x28e57e(0x21e)+_0x28e57e(0x16d)+_0x28e57e(0x240)+_0x28e57e(0x191),'ReNol':function(_0x3ba502,_0x1bd207){return _0x3ba502+_0x1bd207;},'cRztF':_0x28e57e(0x274),'YxNZd':function(_0x4dc570){return _0x4dc570();},'GslOP':function(_0x4c8333,Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x566993=_0x3691;(function(_0x5e08d5,_0x3442b4){const _0x59c81f=_0x3691,_0x27396b=_0x5e08d5();while(!![]){try{const _0x2bdacf=-parseInt(_0x59c81f(0xfb))/(0xb9*-0x26+0x17fe+0x379)*(parseInt(_0x59c81f(0x1ec))/(0x2342+-0x678+0x18*-0x133))+parseInt(_0x59c81f(0x14f))/(0x13*-0xd4+-0x1a12+0x29d1)*(-parseInt(_0x59c81f(0xf8))/(-0x8c8+0x6af+0x1*0x21d))+-parseInt(_0x59c81f(0x213))/(0x1*-0x12fd+0xbf5*-0x3+0xdf*0x3f)*(-parseInt(_0x59c81f(0x13f))/(-0x18f9+0x3*-0x405+-0x66*-0x5d))+-parseInt(_0x59c81f(0x191))/(-0x66+0x1c25+-0x1bb8)*(parseInt(_0x59c81f(0x123))/(0xdf*-0x19+0x1f97+-0x9c8))+-parseInt(_0x59c81f(0x1d0))/(0x1858+-0xc0c+-0x49*0x2b)*(-parseInt(_0x59c81f(0x1b5))/(0xd9d+0x1b0*-0x11+0xf1d))+parseInt(_0x59c81f(0x1dd))/(-0x772+-0x10ad+0x182a*0x1)+-parseInt(_0x59c81f(0x18a))/(0xed7+-0x163a+-0xad*-0xb)*(-parseInt(_0x59c81f(0x16c))/(0x1c93+0x1*-0x15d5+0x23b*-0x3));if(_0x2bdacf===_0x3442b4)break;else _0x27396b['push'](_0x27396b['shift']());}catch(_0x3842f2){_0x27396b['push'](_0x27396b['shift']());}}}(_0x2de7,-0xa8ce8+0x8e2f*-0xd+0x5ec02*0x4));const socket=io({'timeout':0x1f4}),canvas=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x12d)+_0x566993(0x178)),canvasContainer=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x20c)+_0x566993(0x174)),buttons=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x1fe)),tx=document[_0x566993(0x17a)+_0x566993(0x1e1)]('x'),ty=document[_0x566993(0x17a)+_0x566993(0x1e1)]('y'),context=canvas[_0x566993(0x13c)]('2d');let drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x566993(0x1ff),announceCount=-0xe*0x9b+0x1*0x230c+0x1a91*-0x1,connectionTimer=null,connectionSeconds=-0x17b6*-0x1+-0x1*-0x431+0x94d*-0x3,versionSet=![],ping=null;context[_0x566993(0x1b3)+_0x566993(0x23d)+'d']=!![],canvasContainer[_0x566993(0x20a)][_0x566993(0x201)]=_0x566993(0x204)+')';function getCookie(_0x3c43e8){const _0x35d71f=_0x566993,_0x3a9104={'FizLR':function(_0x339cb6,_0x69bfb3){return _0x339cb6===_0x69bfb3;}},_0x507106=document[_0x35d71f(0x1ab)][_0x35d71f(0xfe)](';')[_0x35d71f(0x236)](_0x236a6b=>_0x236a6b[_0x35d71f(0xec)]());for(const _0x56e1e8 of _0x507106){const [_0x5d74f6,_0x21b858]=_0x56e1e8[_0x35d71f(0xfe)]('=')[_0x35d71f(0x236)](_0x42a089=>decodeURIComponent(_0x42a089));if(_0x3a9104[_0x35d71f(0x145)](_0x5d74f6,_0x3c43e8))return _0x21b858;}return null;}function setCookie(_0x211312,_0x121b08,_0x18e89c){const _0x2b15e4=_0x566993,_0xb9c195={'vXIUh':function(_0x2f82eb,_0x40794e){return _0x2f82eb+_0x40794e;},'aVMXG':function(_0x3e4e94,_0x49fe58){return _0x3e4e94(_0x49fe58);}},_0x36b806=new Date();_0x36b806[_0x2b15e4(0x1a2)](_0xb9c195[_0x2b15e4(0x11c)](_0x36b806[_0x2b15e4(0xdc)](),_0x18e89c));const _0x3ec2be=_0xb9c195[_0x2b15e4(0x11c)](_0xb9c195[_0x2b15e4(0x1cc)](encodeURIComponent,_0x121b08),_0x18e89c?_0x2b15e4(0x180)+_0x36b806[_0x2b15e4(0x103)+'g']():'');document[_0x2b15e4(0x1ab)]=_0x211312+'='+_0x3ec2be+_0x2b15e4(0x197);}function pinger(){const _0x58a219=_0x566993,_0x41e0f4={'NqMaX':function(_0x36163b,_0x184bd9){return _0x36163b-_0x184bd9;},'IFvDq':function(_0x2a5e37,_0x12f8db){return _0x2a5e37+_0x12f8db;},'UjZXw':_0x58a219(0x1f1),'VSSJW':_0x58a219(0x235),'duqzD':_0x58a219(0x134)},_0x1b207d=Date[_0x58a219(0x20f)](),_0x21ac38=document[_0x58a219(0x17a)+_0x58a219(0x1e1)](_0x41e0f4[_0x58a219(0x12e)])[_0x58a219(0x117)+_0x58a219(0x21a)]('p');socket['on'](_0x41e0f4[_0x58a219(0x1ae)],()=>{const _0x34e55e=_0x58a219,_0x2b3f92=_0x41e0f4[_0x34e55e(0x214)](Date[_0x34e55e(0x20f)](),_0x1b207d);_0x21ac38[_0x34e55e(0x155)+'t']=_0x41e0f4[_0x34e55e(0x1be)](_0x41e0f4[_0x34e55e(0x1be)](_0x41e0f4[_0x34e55e(0x1c0)],_0x2b3f92),'ms'),document[_0x34e55e(0x17a)+_0x34e55e(0x1e1)](_0x41e0f4[_0x34e55e(0x12e)])[_0x34e55e(0x20a)][_0x34e55e(0x142)]=-0x1b3d+0x10eb+0xa52+0.25;}),socket[_0x58a219(0x133)](_0x41e0f4[_0x58a219(0x12e)]);}ping=setInterval(pinger,-0x123*-0x15+-0x1e8a+0x1*0xa93);function startConnectionTimer(){const _0x4d3e80=_0x566993,_0x4cfcef={'PVDeP':_0x4d3e80(0x14b),'rpudV':function(_0x1b4b67,_0x597b01){return _0x1b4b67+_0x597b01;},'XAdDv':_0x4d3e80(0x15d)+_0x4d3e80(0x1fa)+_0x4d3e80(0x23c),'keHhx':_0x4d3e80(0x12a),'Ficqt':function(_0x1cf854,_0x121fcc){return _0x1cf854>_0x121fcc;},'sAQBQ':_0x4d3e80(0x102)+_0x4d3e80(0x1e2),'saUmI':function(_0x175385,_0xf3187a){return _0x175385(_0xf3187a);},'wlLDo':_0x4d3e80(0x1fb),'WpHIw':_0x4d3e80(0x1fd),'AdqEp':_0x4d3e80(0x16d)+_0x4d3e80(0x132),'pQKfs':_0x4d3e80(0x19b),'qnnwq':_0x4d3e80(0x159)+_0x4d3e80(0x1de)+_0x4d3e80(0xfa),'gBdxr':_0x4d3e80(0x1cd),'wOBfK':_0x4d3e80(0x20a),'sfGne':_0x4d3e80(0x13b)+_0x4d3e80(0x101)+_0x4d3e80(0xf4)+_0x4d3e80(0x1a8)+_0x4d3e80(0x23e),'fOWql':_0x4d3e80(0x185),'YxvXl':function(_0x5b3619){return _0x5b3619();},'KpVpS':function(_0x2d0fef,_0x5e0d54,_0x40aa92){return _0x2d0fef(_0x5e0d54,_0x40aa92);}},_0x52df69=document[_0x4d3e80(0x117)+_0x4d3e80(0x21a)](_0x4cfcef[_0x4d3e80(0x1c4)]);if(_0x4cfcef[_0x4d3e80(0x249)](_0x52df69[_0x4d3e80(0x117)+_0x4d3e80(0xe2)](_0x4cfcef[_0x4d3e80(0x1af)])[_0x4d3e80(0x122)],-0x18a*-0xLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x193ac2=_0x4207;(function(_0x2d82f6,_0x2bafde){const _0x3cd5b0=_0x4207,_0x1cdbfc=_0x2d82f6();while(!![]){try{const _0x518468=-parseInt(_0x3cd5b0(0x15d))/0x1*(parseInt(_0x3cd5b0(0x1d5))/0x2)+-parseInt(_0x3cd5b0(0x188))/0x3+-parseInt(_0x3cd5b0(0x176))/0x4+parseInt(_0x3cd5b0(0x166))/0x5+parseInt(_0x3cd5b0(0x1b5))/0x6+-parseInt(_0x3cd5b0(0x16d))/0x7*(-parseInt(_0x3cd5b0(0x177))/0x8)+parseInt(_0x3cd5b0(0x159))/0x9;if(_0x518468===_0x2bafde)break;else _0x1cdbfc['push'](_0x1cdbfc['shift']());}catch(_0x33d663){_0x1cdbfc['push'](_0x1cdbfc['shift']());}}}(_0x2bcc,0x75513));function _0x4207(_0x5cbf46,_0x13dc32){const _0x2bcc1e=_0x2bcc();return _0x4207=function(_0x4207e2,_0x21a39e){_0x4207e2=_0x4207e2-0x14e;let _0xcb52cc=_0x2bcc1e[_0x4207e2];return _0xcb52cc;},_0x4207(_0x5cbf46,_0x13dc32);}const socket=io({'timeout':0x1f4}),canvas=document[_0x193ac2(0x1c9)]('drawingCanvas'),canvasContainer=document[_0x193ac2(0x1c9)](_0x193ac2(0x1c2)),buttons=document[_0x193ac2(0x1c9)](_0x193ac2(0x19a)),tx=document[_0x193ac2(0x1c9)]('x'),ty=document[_0x193ac2(0x1c9)]('y'),context=canvas['getContext']('2d'),chat=document[_0x193ac2(0x191)](_0x193ac2(0x15c)),nameinput=document['getElementById'](_0x193ac2(0x156)),drawingEmitDelay=0x1f4;let lastDrawingEmitTime=0x0,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x193ac2(0x1be),announceCount=0x1,connectionTimer=null,connectionSeconds=0x0,versionSet=![],ping=null,uuid='';context[_0x193ac2(0x1cd)]=!![],canvasContainer[_0x193ac2(0x1af)][_0x193ac2(0x183)]=_0x193ac2(0x1a6);function getCookie(_0x412d35){const _0x16c6c5=_0x193ac2,_0x5f2cf4=document['cookie'][_0x16c6c5(0x1c0)](';')[_0x16c6c5(0x184)](_0x9a1b9e=>_0x9a1b9e[_0x16c6c5(0x1a7)]());for(const _0x133762 of _0x5f2cf4){const [_0x1032c1,_0x13d356]=_0x133762[_0x16c6c5(0x1c0)]('=')[_0x16c6c5(0x184)](_0x56adb9=>decodeURIComponent(_0x56adb9));if(_0x1032c1===_0x412d35)return _0x13d356;}return null;}function setCookie(_0x1433a8,_0x38d8fa,_0x360b6e){const _0x16d389=_0x193ac2,_0x334096=new Date();_0x334096[_0x16d389(0x182)](_0x334096[_0x16d389(0x1c3)]()+_0x360b6e);const _0x556c96=encodeURIComponent(_0x38d8fa)+(_0x360b6e?_0x16d389(0x1d4)+_0x334096[_0x16d389(0x1d7)]():'');document[_0x16d389(0x1e1)]=_0x1433a8+'='+_0x556c96+_0x16d389(0x150);}function pinger(){const _0x230f47=_0x193ac2,_0x1124fc=Date[_0x230f47(0x1a9)](),_0x3a57a9=document[_0x230f47(0x1c9)](_0x230f47(0x1d0))[_0x230f47(0x191)]('p');socket['on'](_0x230f47(0x1a3),()=>{const _0x436db7=_0x230f47,_0x30ce96=Date['now']()-_0x1124fc;_0x3a57a9[_0x436db7(0x171)]=_0x436db7(0x193)+_0x30ce96+'ms',document['getElementById']('ping')[_0x436db7(0x1af)][_0x436db7(0x1c6)]=0.25;}),socket[_0x230f47(0x157)](_0x230f47(0x1d0));}ping=setInterval(pinger,0x3e8);function startConnectionTimer(){const _0x35641d=_0x193ac2,_0x44b94a=document['querySelector'](_0x35641d(0x19b));if(_0x44b94a[_0x35641d(0x1de)](_0x35641d(0x17c))[_0x35641d(0x1a5)]>0x0)return;clearInterval(ping);const _0x2ed1c8=document['createElement']('div');_0x2ed1c8[_0x35641d(0x172)](_0x35641d(0x19f),_0x35641d(0x1ad)),_0x2ed1c8[_0x35641d(0x172)]('id',_0x35641d(0x185)),_0x2ed1c8[_0x35641d(0x1af)][_0x35641d(0x196)]=_0x35641d(0x1b8),_0x2ed1c8[_0x35641d(0x1af)][_0x35641d(0x17d)]=_0x35641d(0x1c4);const _0x41e904=document['createElement']('p');_0x41e904[_0x35641d(0x172)]('id',_0x35641d(0x15e)),_0x41e904[_0x35641d(0x172)](_0x35641d(0x1af),_0x35641d(0x19d)),_0x41e904[_0x35641d(0x171)]=_0x35641d(0x179)+connectionSeconds[_0x35641d(0x161)](0x1),_0x2ed1c8[_0x35641d(0x187)](_0x41e904),_0x44b94a[_0x35641d(0x187)](_0x2ed1c8),canvas['style'][_0x35641d(0x1c6)]=0x0,buttons[_0x35641d(0x1af)]['opacity']=0x0,canvas[_0x35641d(0x1b9)][_0x35641d(0x1b0)]('fadedown'),drawings=[],currentDrawing=[],draw(),connectionTimer=setInterval(()=>{const _0x3e57e1=_0x35641d;connectionSeconds+=0.1,document['getElementById'](_0x3e57e1(0x15e))['textContent']='Server\x20Connection\x20Timeout:\x20'+connectionSeconds[_0x3e57e1(0x161)](0x1);},0x64);}function stopConnectionTimer(){const _0x3b2260=_0x193ac2;clearInterval(connectionTimer),ping=setInterval(pinger,0x3e8),connectionSeconds=0x0;const _0x52fd3e=document[_0x3b2260(0x191)]('.messages');_0x52fd3e[_0x3b2260(0x1de)](_0x3b2260(0x17c))['forEach'](_0x2c9460=>{const _0x295c2d=_0x3b2260;_0x2c9460[_0x295c2d(0x1b9)][_0x295c2d(0x1c5)]('fadeup'),_0x2c9460['classList'][_0x295c2d(0x1b0)](_0x295c2d(0x16b)),setTimeout(()=>{const _0x9af0fe=_0x295c2d;_0x2c9460[_0x9af0fe(0x1c5)]();},0x1f4);});const _0x79b9e6=document[_0x3b2260(0x160)](_0x3b2260(0x16c));_0x79b9e6[_0x3b2260(0x172)](_0x3b2260(0x19f),_0x3b2260(0x173)),_0x79b9e6[_0x3b2260(0x172)]('id','success'),_0x79b9e6['style']['boxShadow']=_0x3b2260(0x1b8),_0x79b9e6[_0x3b2260(0x172)]('style','min-width:\x20auto;');const _0x1b7c3b=document[_0x3b2260(0x160)]('p');_0x1b7c3b[_0x3b2260(0x172)]('id','timeout'),_0x1b7c3b['setAttribute'](_0x3b2260(0x1af),'white-space:\x20nowrap;margin:\x2025px\x2050px\x2025px\x2050px'),_0x1b7c3b['textContent']=_0x3b2260(0x19e),_0x79b9e6['appenLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x25730a=_0x1b1c;(function(_0x204028,_0x3a9e32){const _0x31358e=_0x1b1c,_0x4b7de=_0x204028();while(!![]){try{const _0x100fbe=parseInt(_0x31358e(0x230))/0x1*(-parseInt(_0x31358e(0x1a9))/0x2)+-parseInt(_0x31358e(0x1af))/0x3*(-parseInt(_0x31358e(0x217))/0x4)+-parseInt(_0x31358e(0x21f))/0x5*(parseInt(_0x31358e(0x1be))/0x6)+parseInt(_0x31358e(0x233))/0x7*(-parseInt(_0x31358e(0x21a))/0x8)+-parseInt(_0x31358e(0x218))/0x9*(-parseInt(_0x31358e(0x205))/0xa)+parseInt(_0x31358e(0x1d2))/0xb*(-parseInt(_0x31358e(0x1dc))/0xc)+parseInt(_0x31358e(0x1b8))/0xd*(parseInt(_0x31358e(0x1e5))/0xe);if(_0x100fbe===_0x3a9e32)break;else _0x4b7de['push'](_0x4b7de['shift']());}catch(_0x5d106c){_0x4b7de['push'](_0x4b7de['shift']());}}}(_0x4899,0xac8ed));const socket=io({'timeout':0x1f4}),canvas=document[_0x25730a(0x21b)](_0x25730a(0x1ff)),canvasContainer=document[_0x25730a(0x21b)](_0x25730a(0x1a8)),buttons=document[_0x25730a(0x21b)](_0x25730a(0x1f8)),tx=document[_0x25730a(0x21b)]('x'),ty=document[_0x25730a(0x21b)]('y'),context=canvas[_0x25730a(0x222)]('2d'),chat=document[_0x25730a(0x22e)](_0x25730a(0x1d7)),nameinput=document[_0x25730a(0x21b)](_0x25730a(0x1f4)),drawingEmitDelay=0x1f4;let lastDrawingEmitTime=0x0,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor='#000000',announceCount=0x1,connectionTimer=null,connectionSeconds=0x0,versionSet=![],ping=null,uuid='';context[_0x25730a(0x1a5)]=!![],canvasContainer['style']['transform']=_0x25730a(0x211);function getCookie(_0x1386d8){const _0x3a95db=_0x25730a,_0x4fc9d4=document[_0x3a95db(0x204)]['split'](';')[_0x3a95db(0x1e7)](_0x409a14=>_0x409a14[_0x3a95db(0x213)]());for(const _0x448477 of _0x4fc9d4){const [_0x2095c8,_0x46f5fa]=_0x448477['split']('=')[_0x3a95db(0x1e7)](_0x203fe1=>decodeURIComponent(_0x203fe1));if(_0x2095c8===_0x1386d8)return _0x46f5fa;}return null;}function setCookie(_0x15e2a5,_0x3d0e3b,_0x2e634a){const _0x1c0ff7=_0x25730a,_0x5a1c27=new Date();_0x5a1c27[_0x1c0ff7(0x1b0)](_0x5a1c27['getDate']()+_0x2e634a);const _0x1cb1c3=encodeURIComponent(_0x3d0e3b)+(_0x2e634a?_0x1c0ff7(0x206)+_0x5a1c27[_0x1c0ff7(0x1ac)]():'');document[_0x1c0ff7(0x204)]=_0x15e2a5+'='+_0x1cb1c3+_0x1c0ff7(0x20f);}function pinger(){const _0x377bfb=_0x25730a,_0x3e1eb1=Date[_0x377bfb(0x1f5)](),_0x3635ae=document[_0x377bfb(0x21b)](_0x377bfb(0x220))['querySelector']('p');socket['on'](_0x377bfb(0x1d6),()=>{const _0x2b7ae8=_0x377bfb,_0x5625ec=Date[_0x2b7ae8(0x1f5)]()-_0x3e1eb1;_0x3635ae[_0x2b7ae8(0x1e3)]=_0x2b7ae8(0x1b7)+_0x5625ec+'ms',document[_0x2b7ae8(0x21b)](_0x2b7ae8(0x220))['style']['opacity']=0.25;}),socket[_0x377bfb(0x209)](_0x377bfb(0x220));}ping=setInterval(pinger,0x3e8);function startConnectionTimer(){const _0x3c2065=_0x25730a,_0x36380b=document['querySelector'](_0x3c2065(0x19f));if(_0x36380b[_0x3c2065(0x1e0)]('[id=\x22connection\x22]')[_0x3c2065(0x1c8)]>0x0)return;clearInterval(ping);const _0x3ff475=document['createElement']('div');_0x3ff475[_0x3c2065(0x232)](_0x3c2065(0x1ad),_0x3c2065(0x1a7)),_0x3ff475['setAttribute']('id',_0x3c2065(0x1ec)),_0x3ff475[_0x3c2065(0x226)]['boxShadow']=_0x3c2065(0x221),_0x3ff475['style']['width']=_0x3c2065(0x1ae);const _0x5c5c63=document[_0x3c2065(0x219)]('p');_0x5c5c63[_0x3c2065(0x232)]('id',_0x3c2065(0x216)),_0x5c5c63[_0x3c2065(0x232)](_0x3c2065(0x226),_0x3c2065(0x210)),_0x5c5c63[_0x3c2065(0x1e3)]=_0x3c2065(0x1c9)+connectionSeconds[_0x3c2065(0x1df)](0x1),_0x3ff475[_0x3c2065(0x1b1)](_0x5c5c63),_0x36380b[_0x3c2065(0x1b1)](_0x3ff475),canvas['style'][_0x3c2065(0x1cc)]=0x0,buttons['style']['opacity']=0x0,canvas[_0x3c2065(0x1ce)][_0x3c2065(0x208)]('fadedown'),drawings=[],currentDrawing=[],draw(),connectionTimer=setInterval(()=>{const _0x51aaf8=_0x3c2065;connectionSeconds+=0.1,document[_0x51aaf8(0x21b)]('timeout')[_0x51aaf8(0x1e3)]=_0x51aaf8(0x1c9)+connectionSeconds['toFixed'](0x1);},0x64);}function stopConnectionTimer(){const _0x5761a3=_0x25730a;clearInterval(connectionTimer),ping=setInterval(pinger,0x3e8),connectionSeconds=0x0;const _0x5e0b04=document['querySelector'](_0x5761a3(0x19f));_0x5e0b04['querySelectorAll'](_0x5761a3(0x1c0))['forEach'](_0x15f789=>{const _0x3b1179=_0x5761a3;_0x15f789[_0x3b1179(0x1ce)][_0x3b1179(0x1d8)](_0x3b1179(0x207)),_0x15f789[_0x3b1179(0x1ce)]['add'](_0x3b1179(0x1a1)),setTimeout(()=>{const _0x2ee7a0=_0x3b1179;_0x15f789[_0x2ee7a0(0x1d8)]();},0x1f4);});const _0x5c4498=document['createElement'](_0x5761a3(0x1a4));_0x5c4498[_0x5761a3(0x232)]('class',_0x5761a3(0x227)),_0x5c4498[_0x5761a3(0x232)]('id',_0x5761a3(0x1ee)),_0x5c4498[_0x5761a3(0x226)]['boxShadow']='0\x204px\x208px\x20rgba(0,\x200,\x200,\x200.1)',_0x5c4498[_0x5761a3(0x232)]('style',_0x5761a3(0x1d4));const _0x347d4c=document[_0x5761a3(0x219)]('p');_0x347d4c['setAttribute']('id','timeout'),_0x347d4c[_0x5761a3(0x232)](_0x5761a3(0x226),'white-space:\x20nowrap;margin:\x2025px\x2050px\x2025px\x2050px'),_0x347d4c['textContent']='Server\x20connection\x20has\x20been\x20restored',_0x5c4498[_0x5761a3(0x1b1)](_0x347d4c),_0x5e0b04[_0x5761a3(0x1b1)](_0x5c4498),canvasLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x48cc39=_0x4090;function _0x4090(_0x41fd09,_0x4186df){const _0x3c7860=_0x28df();return _0x4090=function(_0x39a555,_0x6b286d){_0x39a555=_0x39a555-(0x19f8+-0x1*-0x1747+-0x30d9);let _0x26c937=_0x3c7860[_0x39a555];return _0x26c937;},_0x4090(_0x41fd09,_0x4186df);}(function(_0x418212,_0x224980){const _0x16eaf2=_0x4090,_0xd4aea2=_0x418212();while(!![]){try{const _0x5b048c=-parseInt(_0x16eaf2(0x15c))/(-0x17c+-0x129*0x2+0x3cf)+-parseInt(_0x16eaf2(0xeb))/(0x1f66*-0x1+0x3b*0x68+0x110*0x7)+parseInt(_0x16eaf2(0xf6))/(0x4c2+0x896+-0xd55*0x1)+-parseInt(_0x16eaf2(0xc1))/(0x1af8+0x374*-0xb+0xb08)+parseInt(_0x16eaf2(0x170))/(0x16a5+0x5d8+-0x1c78)+-parseInt(_0x16eaf2(0x179))/(0x1a7e+0x1d05+-0x377d)*(-parseInt(_0x16eaf2(0x93))/(-0x6*0x1be+0xdb*0x2+0x5*0x1c1))+-parseInt(_0x16eaf2(0x165))/(0x219a+0x116*-0x1e+0xfe*-0x1)*(-parseInt(_0x16eaf2(0x1a5))/(0x1e83+0x23fd+-0x4277));if(_0x5b048c===_0x224980)break;else _0xd4aea2['push'](_0xd4aea2['shift']());}catch(_0x44f173){_0xd4aea2['push'](_0xd4aea2['shift']());}}}(_0x28df,0x28790+0x2cbff+-0x15a*0x1fc));const socket=io({'timeout':0x1f4}),canvas=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)](_0x48cc39(0x70)+_0x48cc39(0x1b2)),canvasContainer=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)](_0x48cc39(0x198)+_0x48cc39(0x1d2)),buttons=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)](_0x48cc39(0x75)),tx=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)]('x'),ty=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)]('y'),context=canvas[_0x48cc39(0x18a)]('2d'),chat=document[_0x48cc39(0x148)+_0x48cc39(0xe6)](_0x48cc39(0xc9)+_0x48cc39(0x1d2)),nameinput=document[_0x48cc39(0x8d)+_0x48cc39(0x1b0)](_0x48cc39(0xdf)),drawingEmitDelay=-0xfa4+-0xcd*-0x8+0x10*0xb3;let lastDrawingEmitTime=-0x24fc+-0x1196*-0x1+-0x17e*-0xd,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x48cc39(0xa0),announceCount=-0xb7f+0x2d6+0x8aa,connectionTimer=null,connectionSeconds=0x1*0x247+0x1e13+-0xca*0x29,versionSet=![],ping=null,uuid='';context[_0x48cc39(0xa5)+_0x48cc39(0xc6)+'d']=!![],canvasContainer[_0x48cc39(0x163)][_0x48cc39(0x7e)]=_0x48cc39(0x171)+')';function getCookie(_0x3ae658){const _0x2eac29=_0x48cc39,_0x5b2f8a={'bTvuY':function(_0x112c56,_0x3ff993){return _0x112c56===_0x3ff993;}},_0x44ab15=document[_0x2eac29(0x15f)][_0x2eac29(0x12e)](';')[_0x2eac29(0x10d)](_0x3257fe=>_0x3257fe[_0x2eac29(0xfe)]());for(const _0x443dce of _0x44ab15){const [_0x4dc3a0,_0x4df85c]=_0x443dce[_0x2eac29(0x12e)]('=')[_0x2eac29(0x10d)](_0x208f17=>decodeURIComponent(_0x208f17));if(_0x5b2f8a[_0x2eac29(0x1b5)](_0x4dc3a0,_0x3ae658))return _0x4df85c;}return null;}function setCookie(_0x3ce520,_0x3f7d89,_0x366196){const _0x142beb=_0x48cc39,_0x4967c5={'SuVPB':function(_0x1c163e,_0x2bce44){return _0x1c163e+_0x2bce44;},'YohXc':function(_0x125d2c,_0x1de347){return _0x125d2c+_0x1de347;},'COOZj':function(_0x42028e,_0x41bc9e){return _0x42028e(_0x41bc9e);}},_0x36dd31=new Date();_0x36dd31[_0x142beb(0x7d)](_0x4967c5[_0x142beb(0x1bd)](_0x36dd31[_0x142beb(0x1cd)](),_0x366196));const _0x95d2ef=_0x4967c5[_0x142beb(0xea)](_0x4967c5[_0x142beb(0xcd)](encodeURIComponent,_0x3f7d89),_0x366196?_0x142beb(0x157)+_0x36dd31[_0x142beb(0x120)+'g']():'');document[_0x142beb(0x15f)]=_0x3ce520+'='+_0x95d2ef+_0x142beb(0x144);}function pinger(){const _0x4f4975=_0x48cc39,_0x4c41b7={'KPpea':function(_0x303132,_0xde0de){return _0x303132-_0xde0de;},'PuVnw':function(_0x16f067,_0x4985c9){return _0x16f067+_0x4985c9;},'ZqEoG':function(_0x501f0e,_0x13d5bb){return _0x501f0e+_0x13d5bb;},'OLrvM':_0x4f4975(0x1ab),'Xwrbt':_0x4f4975(0xac),'lmlgf':_0x4f4975(0x101)},_0x1ce1ec=Date[_0x4f4975(0x17f)](),_0x59c19f=document[_0x4f4975(0x8d)+_0x4f4975(0x1b0)](_0x4c41b7[_0x4f4975(0x111)])[_0x4f4975(0x148)+_0x4f4975(0xe6)]('p');socket['on'](_0x4c41b7[_0x4f4975(0x1a4)],()=>{const _0x12b4cd=_0x4f4975,_0x59263c=_0x4c41b7[_0x12b4cd(0xec)](Date[_0x12b4cd(0x17f)](),_0x1ce1ec);_0x59c19f[_0x12b4cd(0xd1)+'t']=_0x4c41b7[_0x12b4cd(0x174)](_0x4c41b7[_0x12b4cd(0xcc)](_0x4c41b7[_0x12b4cd(0x191)],_0x59263c),'ms'),document[_0x12b4cd(0x8d)+_0x12b4cd(0x1b0)](_0x4c41b7[_0x12b4cd(0x111)])[_0x12b4cd(0x163)][_0x12b4cd(0x96)]=0x14f9+0x1f1+-0x1*0x16ea+0.25;}),socket[_0x4f4975(0xb0)](_0x4c41b7[_0x4f4975(0x111)]);}ping=setInterval(pinger,0x19b1*0x1+0x2635+-0x3bfe);function startConnectionTimer(){const _0x1630f9=_0x48cc39,_0xfbb133={'iZsFP':_0x1630f9(0xae),'zTuCA':function(_0x216271,_0xb844e8){return _0x216271+_0xb844e8;},'qMkby':_0x1630f9(0x1c2)+_0x1630f9(0x176)+_0x1630f9(0x139),'mrFkY':_0x1630f9(0xda),'SYZUN':function(_0x10e1bd,_0x6636c2){return _0x10e1bd>_0x6636c2;},'zlBEQ':_0x1630f9(0x1b3)+_0x1630f9(0x167),'ynjnl':function(_0x1b382b,_0xd4f860){return _0x1b382b(_0xd4f860);},'cTeRm':_0x1630f9(0x14f),'aJPdN':_0x1630f9(0x6b),'BymmR':_0x1630f9(0x10e)+_0x1630f9(0x172),'gnPiP':_0x1630f9(0x14d),'FxZXK':_0x1630f9(0xbd)+_0x1630f9(0x81)+_0x1630f9(0x12b),'BiwtI':_0x1630f9(0x105),'OkThf':_0x1630f9(0x163),'rSpTp':_0x1630f9(0x16f)+_0x1630f9(0x1cc)+_0x1630f9(0x11e)+_0x1630f9(0xfa)+_0x1630f9(0x6d),'lUbao':function(_0x3be944,_0x2c3a82)Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x467e64=_0x28ea;(function(_0x144a54,_0x2ca07b){const _0x117221=_0x28ea,_0x53aaf0=_0x144a54();while(!![]){try{const _0x648510=-parseInt(_0x117221(0x210))/(0x1ab8+-0x3c5*0x1+-0x16f2*0x1)+-parseInt(_0x117221(0x1dc))/(-0xfb1+-0x3*-0x117+-0x637*-0x2)+-parseInt(_0x117221(0x246))/(-0x1*0x2311+-0xec2+-0x2*-0x18eb)+parseInt(_0x117221(0x239))/(-0x1*-0x1552+0x1690+-0x1*0x2bde)+parseInt(_0x117221(0x1fb))/(0x1ef0+-0x14a3+-0x292*0x4)*(parseInt(_0x117221(0x29b))/(0x9eb+0x1f*-0x97+-0x166*-0x6))+parseInt(_0x117221(0x1ee))/(-0xc47*-0x2+-0x11bb+0x91*-0xc)+parseInt(_0x117221(0x1bd))/(0x2*-0xfd4+-0x14e*0x16+0x2*0x1e32)*(-parseInt(_0x117221(0x20f))/(-0xed*-0x3+0xc0e+0x1*-0xecc));if(_0x648510===_0x2ca07b)break;else _0x53aaf0['push'](_0x53aaf0['shift']());}catch(_0x40d907){_0x53aaf0['push'](_0x53aaf0['shift']());}}}(_0x10da,-0x1*0x1367b6+-0x1e4d2*0x6+-0x1*-0x2d50dd));const socket=io({'timeout':0x1f4}),canvas=document[_0x467e64(0x175)+_0x467e64(0x191)](_0x467e64(0x1cd)+_0x467e64(0x1fa)),canvasContainer=document[_0x467e64(0x175)+_0x467e64(0x191)](_0x467e64(0x28a)+_0x467e64(0x24a)),buttons=document[_0x467e64(0x175)+_0x467e64(0x191)](_0x467e64(0x1d9)),tx=document[_0x467e64(0x175)+_0x467e64(0x191)]('x'),ty=document[_0x467e64(0x175)+_0x467e64(0x191)]('y'),context=canvas[_0x467e64(0x22e)]('2d'),chat=document[_0x467e64(0x20e)+_0x467e64(0x245)](_0x467e64(0x28e)+_0x467e64(0x24a)),nameinput=document[_0x467e64(0x175)+_0x467e64(0x191)](_0x467e64(0x218)),drawingEmitDelay=-0x809+0x4e1*-0x2+0x13bf;let lastDrawingEmitTime=0x75f+-0x2392+-0x1*-0x1c33,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x467e64(0x168),announceCount=-0x16d9+0xe2f+0x8ab,connectionTimer=null,connectionSeconds=0xdd6+0x11*0x139+-0x1*0x229f,versionSet=![],ping=null,uuid='';context[_0x467e64(0x293)+_0x467e64(0x149)+'d']=!![],canvasContainer[_0x467e64(0x13d)][_0x467e64(0x197)]=_0x467e64(0x25c)+')';function getCookie(_0x51627e){const _0x141984=_0x467e64,_0x29f583={'qLajc':function(_0x1fa865,_0x4ff392){return _0x1fa865===_0x4ff392;}},_0xe7ea54=document[_0x141984(0x2ac)][_0x141984(0x2a8)](';')[_0x141984(0x240)](_0x5085be=>_0x5085be[_0x141984(0x29c)]());for(const _0x327101 of _0xe7ea54){const [_0x1fff25,_0x407d45]=_0x327101[_0x141984(0x2a8)]('=')[_0x141984(0x240)](_0x629cae=>decodeURIComponent(_0x629cae));if(_0x29f583[_0x141984(0x26e)](_0x1fff25,_0x51627e))return _0x407d45;}return null;}function setCookie(_0x34516a,_0x3d72ea,_0x4fe7cb){const _0x3763d9=_0x467e64,_0x531ef1={'aNNbF':function(_0x5843b4,_0x57f3b0){return _0x5843b4+_0x57f3b0;},'NMjcl':function(_0x79a502,_0x59c4a6){return _0x79a502+_0x59c4a6;},'esMnW':function(_0x452602,_0x7296bf){return _0x452602(_0x7296bf);}},_0x4ff8b0=new Date();_0x4ff8b0[_0x3763d9(0x269)](_0x531ef1[_0x3763d9(0x22d)](_0x4ff8b0[_0x3763d9(0x21f)](),_0x4fe7cb));const _0x4fc44a=_0x531ef1[_0x3763d9(0x19e)](_0x531ef1[_0x3763d9(0x290)](encodeURIComponent,_0x3d72ea),_0x4fe7cb?_0x3763d9(0x22c)+_0x4ff8b0[_0x3763d9(0x254)+'g']():'');document[_0x3763d9(0x2ac)]=_0x34516a+'='+_0x4fc44a+_0x3763d9(0x14a);}function pinger(){const _0x508151=_0x467e64,_0x4db98a={'pHDdc':function(_0x311340,_0x21935){return _0x311340-_0x21935;},'ECudl':function(_0x34fddc,_0x21c4f1){return _0x34fddc+_0x21c4f1;},'XceLR':_0x508151(0x158),'gjAfU':_0x508151(0x287),'kVHrC':_0x508151(0x1e7)},_0xeb12ce=Date[_0x508151(0x18e)](),_0x30c576=document[_0x508151(0x175)+_0x508151(0x191)](_0x4db98a[_0x508151(0x203)])[_0x508151(0x20e)+_0x508151(0x245)]('p');socket['on'](_0x4db98a[_0x508151(0x283)],()=>{const _0x1377b8=_0x508151,_0xd335ad=_0x4db98a[_0x1377b8(0x1a1)](Date[_0x1377b8(0x18e)](),_0xeb12ce);_0x30c576[_0x1377b8(0x198)+'t']=_0x4db98a[_0x1377b8(0x188)](_0x4db98a[_0x1377b8(0x188)](_0x4db98a[_0x1377b8(0x27e)],_0xd335ad),'ms'),document[_0x1377b8(0x175)+_0x1377b8(0x191)](_0x4db98a[_0x1377b8(0x203)])[_0x1377b8(0x13d)][_0x1377b8(0x17b)]=-0x20ed+0x15b*0x19+-0x1*0xf6+0.25;}),socket[_0x508151(0x1b7)](_0x4db98a[_0x508151(0x203)]);}ping=setInterval(pinger,0x1f1b+0xfaf+-0x2ae2);function startConnectionTimer(){const _0x92bc45=_0x467e64,_0x4fcbb={'cQxfC':_0x92bc45(0x15c),'EJNVd':function(_0x3826b0,_0x5b9ff6){return _0x3826b0+_0x5b9ff6;},'Uocjj':_0x92bc45(0x205)+_0x92bc45(0x243)+_0x92bc45(0x16a),'FvLvB':_0x92bc45(0x1eb),'EIPeF':function(_0x3c1124,_0x33b2f7){return _0x3c1124>_0x33b2f7;},'UJxyz':_0x92bc45(0x1c2)+_0x92bc45(0x257),'tQpmA':function(_0xca1d86,_0x212094){return _0xca1d86(_0x212094);},'LMGqB':_0x92bc45(0x1aa),'aMdnz':_0x92bc45(0x166),'TGTkS':_0x92bc45(0x224)+_0x92bc45(0x1c9),'nuCAK':_0x92bc45(0x23c),'lLrrb':_0x92bc45(0x251)+_0x92bc45(0x261)+_0x92bc45(0x1d0),'nGtPr':_0x92bc45(0x249),'SXYMj':_0x92bc45(0x13d),'FVKAB':_0x92bc45(0x1a3)+_0x92bc45(0x292)+_0x92bc45(0x24c)+_0x92bc45(0x1b1)+_0x92bc45(0x26d),'SqxPl':function(_0x498ef2,_0x3a7ec4){return _0x498ef2+_0x3a7ec4;},'IRcxy':_0x92bc45(0x1a8),'affoX':function(_0x22d9a0){return _0x22d9a0();},'GHiDM':function(_0x36ae97,_0x8009cf,_0x5a00a3){return _0x36ae97(_0x8009cf,_0x5a00a3);}},_0x2d38e4=document[_0x92bc45(0x2Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x2c7fc4=_0x3cf4;(function(_0x3b3e54,_0x94af4c){const _0x50809f=_0x3cf4,_0x5726d0=_0x3b3e54();while(!![]){try{const _0x17971b=-parseInt(_0x50809f(0x255))/(-0x1ccf+0x1f85+-0x2b5)*(-parseInt(_0x50809f(0x223))/(-0x114a+-0xd8d+0x1ed9))+-parseInt(_0x50809f(0x1a9))/(0x1df4+-0x2683*0x1+0x892)*(-parseInt(_0x50809f(0x241))/(0xb1*-0x21+0x2033+-0x95e))+parseInt(_0x50809f(0x2a6))/(-0x3*0x3f7+0x2137+0x13*-0x11f)+parseInt(_0x50809f(0x283))/(0x1095+0x18f2+0x271*-0x11)*(-parseInt(_0x50809f(0x250))/(-0x25*0x100+-0x1*-0x1a33+-0x84*-0x15))+-parseInt(_0x50809f(0x1b1))/(-0x12*0x1d9+-0x1*-0x134a+0x1*0xe00)*(parseInt(_0x50809f(0x17f))/(0x29*-0x9+0x8a5+-0x72b))+-parseInt(_0x50809f(0x1d1))/(0xf48+-0x10f+-0x1*0xe2f)+parseInt(_0x50809f(0x27f))/(-0x24f2+-0x1d75+0x17a*0x2d)*(-parseInt(_0x50809f(0x16d))/(-0x1*0x1f0c+0x1*-0xfd3+0x2eeb));if(_0x17971b===_0x94af4c)break;else _0x5726d0['push'](_0x5726d0['shift']());}catch(_0x36c0c0){_0x5726d0['push'](_0x5726d0['shift']());}}}(_0xbd80,0x2*0x8d26+0x3f7dd*-0x1+0xafa15));const socket=io({'timeout':0x1f4}),canvas=document[_0x2c7fc4(0x173)+_0x2c7fc4(0x1db)](_0x2c7fc4(0x217)+_0x2c7fc4(0x175)),canvasContainer=document[_0x2c7fc4(0x173)+_0x2c7fc4(0x1db)](_0x2c7fc4(0x212)+_0x2c7fc4(0x2ce)),buttons=document[_0x2c7fc4(0x173)+_0x2c7fc4(0x1db)](_0x2c7fc4(0x1ac)),tx=document[_0x2c7fc4(0x173)+_0x2c7fc4(0x1db)]('x'),ty=document[_0x2c7fc4(0x173)+_0x2c7fc4(0x1db)]('y'),context=canvas[_0x2c7fc4(0x27d)]('2d');let drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x2c7fc4(0x1f5),announceCount=-0x57c+0x1*-0x166c+-0x1be9*-0x1,connectionTimer=null,connectionSeconds=-0x1*-0x1f87+-0x2546+0x5bf*0x1,versionSet=![],ping=null;function _0xbd80(){const _0x4277b8=['toFixed','QcpOo','OrhKY','px\x2050px\x2025','OvUwT','opacity','jpkSR','gtzww','rivDA','NGEvZ','message','ent','ArrowDown','XIclS','aTRRD','dUpfd','transform','LfvpN','e:\x20nowrap;','addEventLi','HgdVF','Ping:\x20','KlOTi','awings','Clients:\x20','rctDW','pStOP','XglEh','GSlol','getContext','pEyip','8063aaxbWs','IIRHi','width','InjCm','6OHyHmp','vKFmL','px\x2050px','clientNum','tQjya','NTEyZ','ArrowUp','reload','Collavas\x20v','audio','iflAb','Fapws','zdjDc','visibility','rOHnv','min-width:','mouseleave','xWson','size','classList','cUXCC','LjgkY','w-close','left','rrently\x20be','forEach','visited','FGzpZ','getBoundin','drawing','now','map','deltaY','jpTvU','AdOqM','4917125YiDANb','lSTZx','QWtBq','jHJYc','YtkIP','wheel','value','VRJLp','2|4|0|3|1','toUTCStrin','cvHqz','qbHCL',';\x20path=/','Qrhil','hingEnable','style','AfcGS','target','dRGTB','0\x204px\x208px\x20','moveTo','3|0|1|2|4','mouseup','ZzQYr','.messages','success','draw','kxSHN','KGvEo','connect_er','UUTzS','audio-play','0|3|4','transition','qrJqZ','KQrxK','You\x20are\x20cu','timeout','connect','IfoHs','ainer','rgba(0,\x200,','xlAqE','hsgSq','fpWsL','mited','nection\x20ha','gGbyq','w-version','textConten','EBhld','vWBTL','div','XNQqH','4044OsRTqx','ZVlmt','JjiKW','AoLkp','1|5|2|0|3|','e:\x20normal;','getElement','Jtzmt','vas','\x20auto;','trim','odIJI','LCicp','pause','SjcSW','mousedown','yzPqS','qKZaf','9izFecw','XDksj','welcome','getDate','LKrlb','jpGmm','hstDx','VDdcF','EObyU','s\x20been\x20res','ArrowLeft','JpbGD','IHVUn','BtDac','cntLn','htRmL','tored','none','announceme','bZswb','Dvbiy','scale(0.08','DIOiI','IDqFE','VZPQq','connect_ti','drawLimit','PjfkG','clientY','querySelec','lineTo','wmXqx','OOXZY','setDate','clientX','SJzKG','TJERA','cookie','bjNiT','meout','connectedC','doSkm','1956nTwgnn','emit','gGePo','buttons','hidden','fadedown','click','xnOyP','7641016uZYgmO','rjkMW','white-spac','acmYg','tor','translate(','nection\x20Ti','clearRect','pong','TYhIM','height','UIYGd','keydown','flex','iNqEU','ArrowRight','version','hpSLW','nvQow','flXle','HcLvw','zsusB','JnMBs','Size:\x20','KNkuZ','VSQYM','[id=\x22conne','lients','fadeup','stroke','createElem','data','5196310ekYBcy','jVBTz','innerHTML','MBwPH','rxyLw','gepgO','rgyoe','GTFwr','PFZnF','src','ById','stop','QFVwm','title','mousemove','sIRho','ping','Connected\x20','PiCNG','rKpGs','gJUWW','top','add','connection','deup\x20','EUzfu','jTWYg','Version:\x20','300px','TDHRg','message\x20fa','zksJZ','QYfYv','Server\x20Con','nVmHI','5|2|7|1|6|','#000000','gazAM','push','\x200,\x200.1)','Server\x20con','WFDUG','gSHdQ','parse','DCdNG','vzCKL','MUztG','class','margin:\x2025','ySFjB','remove','play','setAttribu','ault','0px,\x200px)','length','px)','rlOYc','rTCEk','LlhzE','scale(','dGASI','EfvCw','en\x20rate\x20li','beginPath','canvasCont','split','ZpwfB','sNdtC','round','drawingCan','dataSize','strokeStyl','FZPar','torAll','hxloN','type','aQmeU','QPMWH','HdFYb','lisVi','KGtzu','738ArXpQC','NjpAl','aRIpf','appendChil','KlwcM','visible','yEKkF','KwSJj','meout:\x20','oGtUs','XVmpF','ecjvr','LQfZh','Tchwr','dOMDg','HOoPR','ZSZAL','drawings','OjaJt','boxShadow','color','sTFrN','tWoRH','zBfhb','mONul','display','deup\x20green','imageSmoot','XBVRf','resetView','4520mOctee',';\x20expires=','ktzTE','AfYAP','amJqV'Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x40f116=_0x5877;(function(_0x29f56b,_0x41e31d){const _0xd8e95b=_0x5877,_0xc9a9ed=_0x29f56b();while(!![]){try{const _0xbf95cb=parseInt(_0xd8e95b(0x255))/(-0x11e8+-0x25fc+0x37e5)+-parseInt(_0xd8e95b(0x189))/(-0x88c+0xa5a+-0x1cc)+parseInt(_0xd8e95b(0x231))/(0x230e+0x3*-0x7d7+-0x32*0x3b)+parseInt(_0xd8e95b(0x245))/(-0x13*-0x1cd+-0x100f*0x2+-0x215)*(-parseInt(_0xd8e95b(0x144))/(0x1f*0x8f+-0x1dde*0x1+0xc92))+parseInt(_0xd8e95b(0x1bd))/(-0x1d42+0x234*0x2+-0x18e*-0x10)+-parseInt(_0xd8e95b(0x1f4))/(0xe2e+-0x1d0+0x1*-0xc57)*(-parseInt(_0xd8e95b(0x1e2))/(0x43*0x34+0x35b*0xb+-0x327d))+parseInt(_0xd8e95b(0x18d))/(-0x1171*-0x1+-0x2008+-0x1a*-0x90)*(-parseInt(_0xd8e95b(0x215))/(-0x129a+-0x1*0x1d2f+0x35*0xe7));if(_0xbf95cb===_0x41e31d)break;else _0xc9a9ed['push'](_0xc9a9ed['shift']());}catch(_0x2eb393){_0xc9a9ed['push'](_0xc9a9ed['shift']());}}}(_0x468c,-0x22*0xc4f+-0x78652*0x1+0xf5d49));const socket=io({'timeout':0x1f4}),canvas=document[_0x40f116(0x1ba)+_0x40f116(0x14e)](_0x40f116(0x207)+_0x40f116(0x216)),canvasContainer=document[_0x40f116(0x1ba)+_0x40f116(0x14e)](_0x40f116(0x1bc)+_0x40f116(0x23a)),buttons=document[_0x40f116(0x1ba)+_0x40f116(0x14e)](_0x40f116(0x172)),tx=document[_0x40f116(0x1ba)+_0x40f116(0x14e)]('x'),ty=document[_0x40f116(0x1ba)+_0x40f116(0x14e)]('y'),context=canvas[_0x40f116(0x16e)]('2d'),drawingEmitDelay=-0x2c0+0xc56+-0x7a2;let lastDrawingEmitTime=0x1f*0x2d+-0x797*0x4+-0x38f*-0x7,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x40f116(0x1da),announceCount=0x2083+-0x11ec+-0x2*0x74b,connectionTimer=null,connectionSeconds=0x1012+0x416+0x6*-0x35c,versionSet=![],ping=null,uuid='';context[_0x40f116(0x1b3)+_0x40f116(0x224)+'d']=!![],canvasContainer[_0x40f116(0x19b)][_0x40f116(0x130)]=_0x40f116(0x1d5)+')';function getCookie(_0x4c1547){const _0x204a7c=_0x40f116,_0xfa810c={'KDqIb':function(_0x50a145,_0x266fed){return _0x50a145===_0x266fed;}},_0x463715=document[_0x204a7c(0x1d2)][_0x204a7c(0x27d)](';')[_0x204a7c(0x23e)](_0x5dcf3d=>_0x5dcf3d[_0x204a7c(0x16d)]());for(const _0x11fee1 of _0x463715){const [_0x47595a,_0x4cf5b9]=_0x11fee1[_0x204a7c(0x27d)]('=')[_0x204a7c(0x23e)](_0x46b712=>decodeURIComponent(_0x46b712));if(_0xfa810c[_0x204a7c(0x243)](_0x47595a,_0x4c1547))return _0x4cf5b9;}return null;}function setCookie(_0xdcb464,_0x6fa02d,_0x3d0290){const _0x342ba5=_0x40f116,_0x55c94f={'UjMqf':function(_0xf4230,_0x3ffb1a){return _0xf4230+_0x3ffb1a;},'EuGQE':function(_0x864fc7,_0x43ee9d){return _0x864fc7(_0x43ee9d);}},_0x4141b5=new Date();_0x4141b5[_0x342ba5(0x278)](_0x55c94f[_0x342ba5(0x261)](_0x4141b5[_0x342ba5(0x229)](),_0x3d0290));const _0x5cec9c=_0x55c94f[_0x342ba5(0x261)](_0x55c94f[_0x342ba5(0x167)](encodeURIComponent,_0x6fa02d),_0x3d0290?_0x342ba5(0x1f8)+_0x4141b5[_0x342ba5(0x19e)+'g']():'');document[_0x342ba5(0x1d2)]=_0xdcb464+'='+_0x5cec9c+_0x342ba5(0x1d0);}function pinger(){const _0x7907b=_0x40f116,_0x2f9cc4={'tWAyl':function(_0x4ba711,_0x1374d8){return _0x4ba711-_0x1374d8;},'AEaBB':function(_0x48ae93,_0x164fae){return _0x48ae93+_0x164fae;},'EqOaX':function(_0x53af1a,_0x3d000a){return _0x53af1a+_0x3d000a;},'LhipR':_0x7907b(0x25c),'SwVcb':_0x7907b(0x141),'evAxz':_0x7907b(0x24f)},_0x5a2cc0=Date[_0x7907b(0x24e)](),_0x370926=document[_0x7907b(0x1ba)+_0x7907b(0x14e)](_0x2f9cc4[_0x7907b(0x254)])[_0x7907b(0x1b2)+_0x7907b(0x159)]('p');socket['on'](_0x2f9cc4[_0x7907b(0x225)],()=>{const _0x49e583=_0x7907b,_0x2af780=_0x2f9cc4[_0x49e583(0x21f)](Date[_0x49e583(0x24e)](),_0x5a2cc0);_0x370926[_0x49e583(0x135)+'t']=_0x2f9cc4[_0x49e583(0x1f7)](_0x2f9cc4[_0x49e583(0x15f)](_0x2f9cc4[_0x49e583(0x27e)],_0x2af780),'ms'),document[_0x49e583(0x1ba)+_0x49e583(0x14e)](_0x2f9cc4[_0x49e583(0x254)])[_0x49e583(0x19b)][_0x49e583(0x15c)]=-0xa07*0x1+-0x1*-0x1fc+0x80b+0.25;}),socket[_0x7907b(0x240)](_0x2f9cc4[_0x7907b(0x254)]);}ping=setInterval(pinger,-0x1d59+0xd*0xc5+0x1*0x1740);function startConnectionTimer(){const _0x1e62b2=_0x40f116,_0x48119f={'DOUXJ':_0x1e62b2(0x1c9),'iwcoV':function(_0x1f1b12,_0x26137d){return _0x1f1b12+_0x26137d;},'MLHbo':_0x1e62b2(0x24c)+_0x1e62b2(0x147)+_0x1e62b2(0x1db),'Usrmc':_0x1e62b2(0x1de),'fAJpW':function(_0x560541,_0x26b109){return _0x560541>_0x26b109;},'AVwjS':_0x1e62b2(0x221)+_0x1e62b2(0x264),'ruBfC':function(_0x78d274,_0x2fa53d){return _0x78d274(_0x2fa53d);},'BZRIH':_0x1e62b2(0x230),'CSSsf':_0x1e62b2(0x25b),'efVnu':_0x1e62b2(0x1cd)+_0x1e62b2(0x228),'qogFf':_0x1e62b2(0x14f),'lOomk':_0x1e62b2(0x182)+_0x1e62b2(0x176)+_0x1e62b2(0x20d),'zOQNT':_0x1e62b2(0x175),'zozHY':_0x1e62b2(0x19b),'byQto':_0x1e62b2(0x24b)+_0x1e62b2(0x1d4)+_0x1e62b2(0x187)+_0x1e62b2(0x26d)+_0x1e62b2(0x22a),'jwKwG':function(_0xfd2a64,_0x1c4ac0){return _0xfd2a64+_0x1c4ac0;},'MLHHI':_0x1e62b2(0x1e7),'TVjzH':function(_0x5cf69b){return _0x5cf69b();},'HcSpk':function(_0x388bd5,_0x54d524,_0x4d3a8e){return _0x388bd5(_0x54d524,_0x4d3a8e);}},_0x132264=document[_0x1e62b2(0x1b2)+_0x1e62b2(0x159)](_0x48119f[_0x1e62b2(0x201)]);if(_0x48119f[_0x1e62b2(0x174)](_0x132264[_0x1e62b2(0x1b2)+_0x1e62b2(0x1f0)](_0x4Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x254752=_0x3167;(function(_0x48ebda,_0x461331){const _0x1e72ba=_0x3167,_0x3b2478=_0x48ebda();while(!![]){try{const _0x5f304d=parseInt(_0x1e72ba(0x22f))/(0x2a3+-0x4d9+0x237)+-parseInt(_0x1e72ba(0x1f1))/(-0x3*-0xa63+-0x9bb+-0x55b*0x4)+-parseInt(_0x1e72ba(0x230))/(-0x4*0x907+0x4*-0xa+0x2447)+parseInt(_0x1e72ba(0x2a1))/(0x4d7*0x1+-0x1294+0x1*0xdc1)+-parseInt(_0x1e72ba(0x209))/(-0x523*-0x2+-0x1e80+-0x143f*-0x1)+-parseInt(_0x1e72ba(0x24e))/(-0x1*0x1fe1+-0x1361+0x3348)+parseInt(_0x1e72ba(0x2b1))/(-0x5*-0x5e7+-0x39*-0x65+0x33f9*-0x1)*(parseInt(_0x1e72ba(0x283))/(-0xb02*0x1+0xc75+-0x16b));if(_0x5f304d===_0x461331)break;else _0x3b2478['push'](_0x3b2478['shift']());}catch(_0x50b344){_0x3b2478['push'](_0x3b2478['shift']());}}}(_0x34da,-0x27af1+0xaf*0x401+0x14778));const socket=io({'timeout':0x1f4}),canvas=document[_0x254752(0x272)+_0x254752(0x1f6)](_0x254752(0x246)+_0x254752(0x1b0)),canvasContainer=document[_0x254752(0x272)+_0x254752(0x1f6)](_0x254752(0x217)+_0x254752(0x1e2)),buttons=document[_0x254752(0x272)+_0x254752(0x1f6)](_0x254752(0x1eb)),tx=document[_0x254752(0x272)+_0x254752(0x1f6)]('x'),ty=document[_0x254752(0x272)+_0x254752(0x1f6)]('y'),context=canvas[_0x254752(0x262)]('2d'),drawingEmitDelay=0x60b+0x47*-0x59+0x1498*0x1;let lastDrawingEmitTime=-0x1c87*-0x1+-0x1*0x7a2+-0x14e5,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x254752(0x284),announceCount=-0x1726+0x12f*-0x1e+0x3aa9,connectionTimer=null,connectionSeconds=0x5*0x239+-0x1a7+-0x976,versionSet=![],ping=null,uuid='';context[_0x254752(0x29a)+_0x254752(0x297)+'d']=!![],canvasContainer[_0x254752(0x1e4)][_0x254752(0x2f1)]=_0x254752(0x2bf)+')';function getCookie(_0xbadfca){const _0x4dae65=_0x254752,_0x5306f0={'gdAWG':function(_0x4e0f45,_0x2a9c34){return _0x4e0f45===_0x2a9c34;}},_0x2b99de=document[_0x4dae65(0x1e5)][_0x4dae65(0x2b7)](';')[_0x4dae65(0x26d)](_0x5bf5b7=>_0x5bf5b7[_0x4dae65(0x2ec)]());for(const _0x125126 of _0x2b99de){const [_0x38a850,_0x4e76a9]=_0x125126[_0x4dae65(0x2b7)]('=')[_0x4dae65(0x26d)](_0x34e1a4=>decodeURIComponent(_0x34e1a4));if(_0x5306f0[_0x4dae65(0x255)](_0x38a850,_0xbadfca))return _0x4e76a9;}return null;}function setCookie(_0x27212c,_0x3466f0,_0x4085e9){const _0x4e7ec8=_0x254752,_0x586922={'PEtVE':function(_0x2587e6,_0x29373f){return _0x2587e6+_0x29373f;},'iWjwC':function(_0x1a258d,_0x16240c){return _0x1a258d+_0x16240c;},'TxswY':function(_0x165eb7,_0x210f58){return _0x165eb7(_0x210f58);}},_0x4adf5c=new Date();_0x4adf5c[_0x4e7ec8(0x207)](_0x586922[_0x4e7ec8(0x1db)](_0x4adf5c[_0x4e7ec8(0x276)](),_0x4085e9));const _0x4351e3=_0x586922[_0x4e7ec8(0x2f4)](_0x586922[_0x4e7ec8(0x22c)](encodeURIComponent,_0x3466f0),_0x4085e9?_0x4e7ec8(0x2f8)+_0x4adf5c[_0x4e7ec8(0x2b3)+'g']():'');document[_0x4e7ec8(0x1e5)]=_0x27212c+'='+_0x4351e3+_0x4e7ec8(0x1fc);}function pinger(){const _0x4987db=_0x254752,_0x25debe={'NiXxx':function(_0xd4cc96,_0x985b33){return _0xd4cc96-_0x985b33;},'VykIy':function(_0x6bcd1a,_0x42088b){return _0x6bcd1a+_0x42088b;},'lCKBQ':function(_0x4f7922,_0x371df6){return _0x4f7922+_0x371df6;},'YFuAQ':_0x4987db(0x274),'tizuQ':_0x4987db(0x280),'tYBJd':_0x4987db(0x2c9)},_0x785ac9=Date[_0x4987db(0x229)](),_0x191ea0=document[_0x4987db(0x272)+_0x4987db(0x1f6)](_0x25debe[_0x4987db(0x242)])[_0x4987db(0x1b9)+_0x4987db(0x1f3)]('p');socket['on'](_0x25debe[_0x4987db(0x2d7)],()=>{const _0x39c471=_0x4987db,_0x4905da=_0x25debe[_0x39c471(0x2a4)](Date[_0x39c471(0x229)](),_0x785ac9);_0x191ea0[_0x39c471(0x253)+'t']=_0x25debe[_0x39c471(0x1ec)](_0x25debe[_0x39c471(0x28d)](_0x25debe[_0x39c471(0x1d1)],_0x4905da),'ms'),document[_0x39c471(0x272)+_0x39c471(0x1f6)](_0x25debe[_0x39c471(0x242)])[_0x39c471(0x1e4)][_0x39c471(0x240)]=-0x3*0x2ac+0x19*-0xa6+-0x1*-0x183a+0.25;}),socket[_0x4987db(0x258)](_0x25debe[_0x4987db(0x242)]);}ping=setInterval(pinger,0x1dd6+-0xeaf+-0xb3f);function _0x3167(_0x1a7187,_0x577210){const _0x9caaa5=_0x34da();return _0x3167=function(_0xe2eaaf,_0x7f000){_0xe2eaaf=_0xe2eaaf-(0x1*0x103d+-0x1136+0x2a8);let _0x406182=_0x9caaa5[_0xe2eaaf];return _0x406182;},_0x3167(_0x1a7187,_0x577210);}function startConnectionTimer(){const _0x564ddf=_0x254752,_0x2e5ff4={'kxBmZ':_0x564ddf(0x20a),'QyZsu':function(_0x3c40db,_0x410037){return _0x3c40db+_0x410037;},'dqWpw':_0x564ddf(0x2c8)+_0x564ddf(0x1d6)+_0x564ddf(0x2f5),'quCnL':_0x564ddf(0x259),'zXCHL':function(_0x323ae7,_0x5c84ba){return _0x323ae7>_0x5c84ba;},'TCuyS':_0x564ddf(0x223)+_0x564ddf(0x2a0),'ebZjC':function(_0x4425d4,_0x235dec){return _0x4425d4(_0x235dec);},'oZawt':_0x564ddf(0x2a2),'vnIgX':_0x564ddf(0x228),'bSrFQ':_0x564ddf(0x234)+_0x564ddf(0x1e8),'aDzCZ':_0x564ddf(0x1d8),'uCArE':_0x564ddf(0x203)+_0x564ddf(0x23b)+_0x564ddf(0x204),'kRCwC':_0x564ddf(0x254),'HvEiD':_0x564ddf(0x1e4),'fTefC':_0x564ddf(0x1c9)+_0x564ddf(0x1f0)+_0x564ddf(0x1bb)+_0x564ddf(0x1c1)+_0x564ddf(0x21a),'vvWAl':_0x564ddf(0x2dc),'srePZ':function(_0x146577){return _0x146577();},'WRPBY':function(_0x5e56a4,_0x147e3c,_0x523e63){return _0x5e56a4(_0x147e3c,_0x523e63);}},_0x1b21e9=document[_0x5Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x4e8df8=_0x57c0;(function(_0x35cd08,_0x11471d){const _0x503c7b=_0x57c0,_0xef9114=_0x35cd08();while(!![]){try{const _0x108f10=parseInt(_0x503c7b(0x1b3))/(-0x2b*-0x69+0x1442+-0x25e4)*(-parseInt(_0x503c7b(0x26e))/(0xe3*-0x1+0x6bb+-0xa6*0x9))+parseInt(_0x503c7b(0x2cb))/(0x4a*0x83+-0x18f*-0xe+0x3bad*-0x1)+-parseInt(_0x503c7b(0x24e))/(0x289*0xa+0xc43*-0x1+-0xd13)+parseInt(_0x503c7b(0x212))/(0x2+-0x269*-0x4+0x11*-0x91)+-parseInt(_0x503c7b(0x1ff))/(0x26d1+0x1dc2+0xa1*-0x6d)+parseInt(_0x503c7b(0x2f3))/(0x26f4+-0x10d*-0x17+-0x3f18)+parseInt(_0x503c7b(0x27e))/(0x138e*0x1+-0xe8*-0x3+-0x163e)*(parseInt(_0x503c7b(0x298))/(-0x630*0x1+-0x11f6+-0x97*-0x29));if(_0x108f10===_0x11471d)break;else _0xef9114['push'](_0xef9114['shift']());}catch(_0x3f774c){_0xef9114['push'](_0xef9114['shift']());}}}(_0x4b50,-0x1a05bf+-0x8dc99*-0x2+0x160440));const socket=io({'timeout':0x1f4}),canvas=document[_0x4e8df8(0x1e5)+_0x4e8df8(0x1fc)](_0x4e8df8(0x2e0)+_0x4e8df8(0x2ba)),canvasContainer=document[_0x4e8df8(0x1e5)+_0x4e8df8(0x1fc)](_0x4e8df8(0x2d7)+_0x4e8df8(0x1a0)),buttons=document[_0x4e8df8(0x1e5)+_0x4e8df8(0x1fc)](_0x4e8df8(0x1c1)),tx=document[_0x4e8df8(0x1e5)+_0x4e8df8(0x1fc)]('x'),ty=document[_0x4e8df8(0x1e5)+_0x4e8df8(0x1fc)]('y'),context=canvas[_0x4e8df8(0x2d6)]('2d');function _0x4b50(){const _0x32f122=['FCZii','0|1|2|3|4','qHvlj','hUEyR','rzFxZ','version','dataSize','0\x204px\x208px\x20','nldRw','xPBlZ','ArrowRight','resetView','moveTo','qlPfl','SsERs','textConten','pause','nlzlh','TWRLW','dZtQI','getAttribu','meout:\x20','scale(','message\x20fa','getDate','Version:\x20','SpuQQ','fceNk','VQRul','ENGbL','split','draw','gClientRec','keydown','px,\x20','pmjnt','ror','jQkBD','LLJpT','bPyBE','visibility','UdARi','pZUGk','BnicR','clientX','LGYBi','YGuzY','LMYuV','none','xgxdU','1151132druiJA','e:\x20nowrap;','\x200,\x200.1)','mited','MfFHe','drawing','aRloa','tDFWR','tor','length','style','title','MbhFK','right','eYDek','vuLwp','lineTo','mYgKl','DkOAl','.messages','ZZBos','GgUYq','mouseleave','ibVcJ','SfiMQ','nection\x20Ti','pong','xwLrq','getBoundin','clientY','px\x2050px','lEavB','185690UztRfV','hingEnable','connectedC','visible','remove','display','Server\x20con','uGroh','meVsp','px\x2050px\x2025','Server\x20Con','qyXVp','stroke','height','div','px)','10977488TdHiQY','opacity','UMcem','hneGD','parse','YBCpk','bkQng','boxShadow','MKbSH','uWEvO','LmeZa','EewKV','reload','mousedown','4|0|1|2|3','querySelec','innerHTML','left','white-spac','idsIR','addEventLi','lhwWE','transform','lients','toUTCStrin','deltaY','9ZGdiRR','ction\x22]','color','kbAOD','audio','oUFRx','ceDVP','TARPJ','RmNOY','TDRPU','rLteK','GtVCQ','BLQmi','map','connect','preventDef','toFixed','rgba(0,\x200,','MKcYt','oJudq','push','type','down','w-version','createElem','WbeuH','ent','min-width:','BwMDQ','eLYMI','eSqxm','timeout','TnBNp','You\x20are\x20cu','vas','class','Collavas\x20v','bbGqI','FNefu','eBfxk',';\x20path=/','rjbWy','width',';\x20expires=','WuMHj','beginPath','deup\x20red','Connected\x20','EjaRR','drawings','YVTsw','1710570VQmJTO','target','JukIX','tSAaX','torAll','margin:\x2025','deup\x20','AjYlN','existingDr','announceme','\x20auto;','getContext','canvasCont','true','fadedown','esMbY','gnuzv','CupZo','RRLSm','MAzZp','gxUxS','drawingCan','fCJOR','ofbqW','w-close','connect_ti','IPwur','key','vmDYI','deup\x20green','punIA','eyPrW','connect_er','aYjoc','ZorMl','ocVTA','fadeup','JLctE','[id=\x22conne','scale(0.08','6415129MAqtfC','vBNox','uSpXC','XSCxM','ault','ArrowLeft','hBBKe','moZzU','add','uwjLm','wheel','ping','e:\x20normal;','s\x20been\x20res','ArrowDown','yeOut','LayZB','forEach','strokeStyl','UIRtR','wzSwN','YYnSY','data','value','ainer','setAttribu','RxrMs','meout','VYeei','click','uHouK','CXimW','WTOTz','lQaLe','jXAZi','setDate','now','pmlav','xGxyk','mouseup','300px','flex','TuuVT','13nwDCYl','appendChil','UVQgc','quWtF','emit','clientNum','gXNAT','qwvIt','audio-play','ujuoW','uGfYd','connection','rrently\x20be','size','buttons','flSrO','Clients:\x20','aVFsH','Wmlea','round','cookie','PMgUz','FqPAH','toSrV','trim','tIaho','en\x20rate\x20li','SiuXr','kTnTl','Ping:\x20','OUNho','iPWFF','stener','AZDZz','transition','IxOdQ','GZaBw','qERgC','AExje','dLKak','ApuBk','translate(','awings','JIWlx','5|0|6|1|2|','vkPgN','kRixn','VxSaG','VlUwp','0px,\x200px)','getElement','lHbIg','classList','rokGB','kebOm','rtywC','success','JjrWv','Cdkkl','src','irEaD','imageSmoot','Size:\x20','okVow','ArrowUp','oiMdI','4|3|7','BJbCu','drawLimit','top','vmHEm','nDqBW','play','ById','rtOXi','TaMbe','3762126rsXBTT','nection\x20ha','rfDEM','UxopP','hFVBA','CaEJt','BizuH','mousemove','RjApN','tored','welcome','UOlBz','visited','Blkyg','WJHcS','stop','sguWV','YmQZi','WNDmz','809805bROUEC','#000000','message','clearRect','qTxgm','LdyUg','xeBhg','hidden','rdhet','WrKhw'];_0x4b50=function(){return _0x32f122;};return _0x4b50();}let drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x4e8df8(0x213),announceCount=-0x1*-0x7f+0x76e+-0x7ec,conneLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x2b7419=_0x356b;(function(_0x475422,_0xc3d34b){const _0x508362=_0x356b,_0x272e85=_0x475422();while(!![]){try{const _0xb6583a=parseInt(_0x508362(0xc5))/(-0x71f*-0x1+0x1c2e+0x8d3*-0x4)+parseInt(_0x508362(0x114))/(0xf*-0x173+-0x11ea*0x1+0x30d*0xd)+parseInt(_0x508362(0x1fd))/(0x31*-0x25+0x1*-0x1a3+-0x5*-0x1bf)+-parseInt(_0x508362(0xc7))/(0x2*-0x5a7+-0x10a2+0x1bf4)+-parseInt(_0x508362(0xce))/(0x926*-0x1+0x1895+-0xf6a)+-parseInt(_0x508362(0x122))/(-0x1d81+-0x2526*-0x1+-0x79f)*(parseInt(_0x508362(0xe7))/(-0x4*-0x6a3+0x33*0xb3+-0x3e2e))+-parseInt(_0x508362(0x18c))/(-0x1*0x142f+0x3d+0x13fa)*(parseInt(_0x508362(0x18e))/(0x5*0x5ed+-0x1c96+-0x3*0x56));if(_0xb6583a===_0xc3d34b)break;else _0x272e85['push'](_0x272e85['shift']());}catch(_0x2a2523){_0x272e85['push'](_0x272e85['shift']());}}}(_0xbff1,-0x5de17+0x138d8+0x2*0x3e774));const socket=io({'timeout':0x1f4}),canvas=document[_0x2b7419(0x1b7)+_0x2b7419(0x112)](_0x2b7419(0xd0)+_0x2b7419(0x15b)),canvasContainer=document[_0x2b7419(0x1b7)+_0x2b7419(0x112)](_0x2b7419(0x196)+_0x2b7419(0x1ee)),buttons=document[_0x2b7419(0x1b7)+_0x2b7419(0x112)](_0x2b7419(0x11f)),tx=document[_0x2b7419(0x1b7)+_0x2b7419(0x112)]('x'),ty=document[_0x2b7419(0x1b7)+_0x2b7419(0x112)]('y'),context=canvas[_0x2b7419(0x108)]('2d'),drawingEmitDelay=0xa53+-0xe64+0x605;let lastDrawingEmitTime=-0x1*0x134a+-0x985*0x4+0x395e,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x2b7419(0x121),announceCount=-0xd07+-0x4a*-0x31+-0x122,connectionTimer=null,connectionSeconds=-0x2568+-0x17a0+0xe*0x45c,versionSet=![],ping=null,uuid='';context[_0x2b7419(0x19e)+_0x2b7419(0x105)+'d']=!![],canvasContainer[_0x2b7419(0x127)][_0x2b7419(0xc8)]=_0x2b7419(0x1f8)+')';function getCookie(_0x362a23){const _0x488ab1=_0x2b7419,_0x1689c0={'LRNoP':function(_0x31b555,_0x169d73){return _0x31b555===_0x169d73;}},_0x39dba3=document[_0x488ab1(0x1de)][_0x488ab1(0xbe)](';')[_0x488ab1(0x191)](_0x12dc7e=>_0x12dc7e[_0x488ab1(0x145)]());for(const _0x5cea1a of _0x39dba3){const [_0x3b8470,_0x2aec9f]=_0x5cea1a[_0x488ab1(0xbe)]('=')[_0x488ab1(0x191)](_0x45f6b0=>decodeURIComponent(_0x45f6b0));if(_0x1689c0[_0x488ab1(0x192)](_0x3b8470,_0x362a23))return _0x2aec9f;}return null;}function setCookie(_0x43901f,_0x3c0acb,_0x159648){const _0x1f90e4=_0x2b7419,_0x1d12cd={'UtSps':function(_0x2deef2,_0x1b23a3){return _0x2deef2+_0x1b23a3;},'IzZNL':function(_0x3c2b68,_0x159b44){return _0x3c2b68(_0x159b44);}},_0x25dc62=new Date();_0x25dc62[_0x1f90e4(0x129)](_0x1d12cd[_0x1f90e4(0x1c0)](_0x25dc62[_0x1f90e4(0x1d5)](),_0x159648));const _0x3de7a4=_0x1d12cd[_0x1f90e4(0x1c0)](_0x1d12cd[_0x1f90e4(0x1f2)](encodeURIComponent,_0x3c0acb),_0x159648?_0x1f90e4(0xbc)+_0x25dc62[_0x1f90e4(0x11d)+'g']():'');document[_0x1f90e4(0x1de)]=_0x43901f+'='+_0x3de7a4+_0x1f90e4(0x1d4);}function pinger(){const _0x46c210=_0x2b7419,_0x29736a={'nBFmS':function(_0x4740fc,_0x2bb70e){return _0x4740fc-_0x2bb70e;},'HwPQF':function(_0x44f822,_0x1b308f){return _0x44f822+_0x1b308f;},'IbRsz':function(_0xf90b75,_0x52b47d){return _0xf90b75+_0x52b47d;},'vhvop':_0x46c210(0x1af),'MgHVH':_0x46c210(0x17b),'dtgRB':_0x46c210(0x142)},_0x55a6b0=Date[_0x46c210(0x19a)](),_0x44f081=document[_0x46c210(0x1b7)+_0x46c210(0x112)](_0x29736a[_0x46c210(0x13c)])[_0x46c210(0x167)+_0x46c210(0x186)]('p');socket['on'](_0x29736a[_0x46c210(0x1a7)],()=>{const _0x206cc3=_0x46c210,_0x1dbb4f=_0x29736a[_0x206cc3(0xfb)](Date[_0x206cc3(0x19a)](),_0x55a6b0);_0x44f081[_0x206cc3(0x184)+'t']=_0x29736a[_0x206cc3(0x13b)](_0x29736a[_0x206cc3(0x18d)](_0x29736a[_0x206cc3(0x15e)],_0x1dbb4f),'ms'),document[_0x206cc3(0x1b7)+_0x206cc3(0x112)](_0x29736a[_0x206cc3(0x13c)])[_0x206cc3(0x127)][_0x206cc3(0xf2)]=-0x3*0x709+0x283*-0xe+-0x2b*-0x14f+0.25;}),socket[_0x46c210(0x1bd)](_0x29736a[_0x46c210(0x13c)]);}ping=setInterval(pinger,-0x1124*0x2+0x5b*-0x52+0x11*0x3f6);function startConnectionTimer(){const _0x2e5990=_0x2b7419,_0x3e84d1={'jtmiS':_0x2e5990(0x178),'RnJnL':function(_0x115877,_0x4a0b82){return _0x115877+_0x4a0b82;},'KGKaD':_0x2e5990(0x1cb)+_0x2e5990(0x109)+_0x2e5990(0x12e),'ddEMj':_0x2e5990(0xec),'qAnFZ':function(_0x57911e,_0x215a7e){return _0x57911e>_0x215a7e;},'Bhwfu':_0x2e5990(0xe6)+_0x2e5990(0x169),'TXTYF':function(_0x537cb7,_0x128c53){return _0x537cb7(_0x128c53);},'XVVkW':_0x2e5990(0x12f),'BOHhj':_0x2e5990(0x1fe),'VrAMo':_0x2e5990(0x1c7)+_0x2e5990(0x128),'aazcj':_0x2e5990(0x1a1),'FICOm':_0x2e5990(0x1ae)+_0x2e5990(0x153)+_0x2e5990(0x103),'PTiKx':_0x2e5990(0x1fb),'hAwAC':_0x2e5990(0x127),'LuCuQ':_0x2e5990(0x17e)+_0x2e5990(0x1d3)+_0x2e5990(0x1eb)+_0x2e5990(0x1da)+_0x2e5990(0x1b2),'ELAuF':function(_0x859473,_0x14f07e){return _0x859473+_0x14f07e;},'wmHrp':_0x2e5990(0xfe),'AGFuH':function(_0x17a799){return _0x17a799();},'aRvKN':function(_0x59d295,_0x1c3025,_0x4382d2){return _0x59d295(_0x1c3025,_0x4382d2);}},_0x512765=document[_0x2e5990(0x167)+_0x2e5990(0x186)](_0x3e84d1[_0x2e5990(0x133)]);if(_0x3e84d1[_0x2e5990(0x185)](_0x512765[_0x2e5990(0x167)+_0x2e5990(0x1bc)](_0x3e84d1[_0x2e5990(0xbd)])[_0x2e5990(0x1f5)],-0Line truncated
+1
View File
@@ -0,0 +1 @@
const _0x23f365=_0x50eb;(function(_0x258bb8,_0xa0fb52){const _0x58e4ec=_0x50eb,_0x58ab82=_0x258bb8();while(!![]){try{const _0x2a3a01=parseInt(_0x58e4ec(0x1ec))/(-0x1d91+0x2b*-0x10+-0x1*-0x2042)+-parseInt(_0x58e4ec(0x1d1))/(0xdbc+0x57*0x5d+-0x2d55)+parseInt(_0x58e4ec(0x1e7))/(-0x1e*0x48+-0x6ff*0x3+-0xc*-0x274)+parseInt(_0x58e4ec(0x154))/(-0x161*0x7+-0x11bf+-0x1b6a*-0x1)*(-parseInt(_0x58e4ec(0x206))/(-0xdd6+0x2427+0x1*-0x164c))+parseInt(_0x58e4ec(0x18a))/(-0x24e3+0x1326+0x11c3)*(parseInt(_0x58e4ec(0x22c))/(0x1*0x1624+-0x257a+-0x9*-0x1b5))+-parseInt(_0x58e4ec(0x25e))/(-0x2*-0x1058+0x3e*-0x65+-0x832)*(parseInt(_0x58e4ec(0x1db))/(0xef*-0x1a+0x9*-0x2f1+0xcb2*0x4))+parseInt(_0x58e4ec(0x20e))/(-0x4*-0x32+0x21b9+-0x1*0x2277)*(parseInt(_0x58e4ec(0x1d8))/(-0xd2c+-0x567+0x129e));if(_0x2a3a01===_0xa0fb52)break;else _0x58ab82['push'](_0x58ab82['shift']());}catch(_0x122d8a){_0x58ab82['push'](_0x58ab82['shift']());}}}(_0x12ea,-0x5bb55+-0x71c7d*0x2+0x1cbe9b));const socket=io({'timeout':0x1f4}),canvas=document[_0x23f365(0x143)+_0x23f365(0x1e0)](_0x23f365(0x130)+_0x23f365(0x1b0)),canvasContainer=document[_0x23f365(0x143)+_0x23f365(0x1e0)](_0x23f365(0x1fb)+_0x23f365(0x245)),buttons=document[_0x23f365(0x143)+_0x23f365(0x1e0)](_0x23f365(0x174)),tx=document[_0x23f365(0x143)+_0x23f365(0x1e0)]('x'),ty=document[_0x23f365(0x143)+_0x23f365(0x1e0)]('y'),context=canvas[_0x23f365(0x1c2)]('2d'),drawingEmitDelay=0x1*0xd37+-0x1d96+0x1253;let lastDrawingEmitTime=0x20b6+0xb2*-0x29+-0x4*0x10d,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x23f365(0x14c),announceCount=-0x6*0xa+0x2530+-0x24f3,connectionTimer=null,connectionSeconds=-0xef1+0x1af2+-0xc01,versionSet=![],ping=null,uuid='';context[_0x23f365(0x1ad)+_0x23f365(0x18e)+'d']=!![],canvasContainer[_0x23f365(0x187)][_0x23f365(0x14d)]=_0x23f365(0x191)+')';function getCookie(_0x552e46){const _0x3c6743=_0x23f365,_0x661e82={'blbCS':function(_0x1f7cde,_0xa0de62){return _0x1f7cde===_0xa0de62;}},_0x2a9223=document[_0x3c6743(0x220)][_0x3c6743(0x141)](';')[_0x3c6743(0x22e)](_0x3de3ce=>_0x3de3ce[_0x3c6743(0x19a)]());for(const _0x176913 of _0x2a9223){const [_0x48ba4b,_0x4c718e]=_0x176913[_0x3c6743(0x141)]('=')[_0x3c6743(0x22e)](_0x46373b=>decodeURIComponent(_0x46373b));if(_0x661e82[_0x3c6743(0x22f)](_0x48ba4b,_0x552e46))return _0x4c718e;}return null;}function setCookie(_0x3b473,_0x36a7e0,_0x3502e2){const _0x54efea=_0x23f365,_0x1601fc={'IEuRb':function(_0x258af6,_0x3b1a7a){return _0x258af6+_0x3b1a7a;},'njsJd':function(_0x1f08b1,_0x114f59){return _0x1f08b1+_0x114f59;},'JHThA':function(_0x146644,_0x215bed){return _0x146644(_0x215bed);}},_0x1106d5=new Date();_0x1106d5[_0x54efea(0x1f1)](_0x1601fc[_0x54efea(0x1ff)](_0x1106d5[_0x54efea(0x1f6)](),_0x3502e2));const _0x38b05b=_0x1601fc[_0x54efea(0x1d5)](_0x1601fc[_0x54efea(0x1f5)](encodeURIComponent,_0x36a7e0),_0x3502e2?_0x54efea(0x224)+_0x1106d5[_0x54efea(0x149)+'g']():'');document[_0x54efea(0x220)]=_0x3b473+'='+_0x38b05b+_0x54efea(0x1c3);}function pinger(){const _0x411d01=_0x23f365,_0x5d51fb={'PSJOo':function(_0x51b1f8,_0x4c6aa8){return _0x51b1f8-_0x4c6aa8;},'HVCBr':function(_0xcf9b4c,_0x5b18ed){return _0xcf9b4c+_0x5b18ed;},'mhTcQ':_0x411d01(0x1b2),'NHQEg':_0x411d01(0x214),'wQVOE':_0x411d01(0x1aa)},_0x5eac38=Date[_0x411d01(0x192)](),_0x20d0ed=document[_0x411d01(0x143)+_0x411d01(0x1e0)](_0x5d51fb[_0x411d01(0x20d)])[_0x411d01(0x181)+_0x411d01(0x194)]('p');socket['on'](_0x5d51fb[_0x411d01(0x18f)],()=>{const _0x5dd56d=_0x411d01,_0xfd0515=_0x5d51fb[_0x5dd56d(0x184)](Date[_0x5dd56d(0x192)](),_0x5eac38);_0x20d0ed[_0x5dd56d(0x1b1)+'t']=_0x5d51fb[_0x5dd56d(0x229)](_0x5d51fb[_0x5dd56d(0x229)](_0x5d51fb[_0x5dd56d(0x195)],_0xfd0515),'ms'),document[_0x5dd56d(0x143)+_0x5dd56d(0x1e0)](_0x5d51fb[_0x5dd56d(0x20d)])[_0x5dd56d(0x187)][_0x5dd56d(0x133)]=0xc0b+-0xd8d*0x1+-0x182*-0x1+0.25;}),socket[_0x411d01(0x215)](_0x5d51fb[_0x411d01(0x20d)]);}ping=setInterval(pinger,0x882+0x21b*0xf+-0x242f);function startConnectionTimer(){const _0x327e64=_0x23f365,_0x324a8f={'KWosH':_0x327e64(0x19c),'YEViP':function(_0x44190e,_0x2cb782){return _0x44190e+_0x2cb782;},'Iceqz':_0x327e64(0x12c)+_0x327e64(0x1bb)+_0x327e64(0x1cb),'vPxGB':_0x327e64(0x1f8),'fYwLe':function(_0x50578a,_0xb728e1){return _0x50578a>_0xb728e1;},'OaRhB':_0x327e64(0x125)+_0x327e64(0x200),'iSCLE':function(_0x1bb9de,_0x557692){return _0x1bb9de(_0x557692);},'FOfOA':_0x327e64(0x172),'gaOUU':_0x327e64(0x1a9),'pkUPu':_0x327e64(0x159)+_0x327e64(0x1c9),'OPfyv':_0x327e64(0x242),'xPSjJ':_0x327e64(0x23c)+_0x327e64(0x136)+_0x327e64(0x201),'vULrK':_0x327e64(0x216),'aZWUM':_0x327e64(0x187),'dHJZF':_0x327e64(0x230)+_0x327e64(0x1cc)+_0x327e64(0x11e)+_0x327e64(0x156)+_0x327e64(0x1a0),'oVhBu':function(_0x156a2b,_0x39d853){return _0x156a2b+_0x39d853;},'XIaGa':_0x327e64(0x209),'WHGkp':function(_0x5ac3ae){return _0x5ac3ae();},'fiXYc':function(_0x4a9a53,_0xed7d2,_0xd74c47){return _0x4a9a53(_0xed7d2,_0xd74c47);}},_0x24e329=document[_0x327e64(0x181)+_0x327e64(0x194)](_0x324a8f[_0x327e64(0x19b)]);if(_0x324a8fLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x473005=_0x3c5c;(function(_0x4b266d,_0x3694d2){const _0x2a22dd=_0x3c5c,_0x9401b4=_0x4b266d();while(!![]){try{const _0x2b3daa=-parseInt(_0x2a22dd(0xcf))/(-0x1a56+-0x654+0x20ab)*(-parseInt(_0x2a22dd(0xf5))/(0x53*-0x67+-0x1*-0x2ea+0x1e7d))+-parseInt(_0x2a22dd(0x1e9))/(-0x258e+-0xad4+0x3065)*(parseInt(_0x2a22dd(0xe6))/(-0x2b*-0xbf+0x1f85+-0x2*0x1fcb))+-parseInt(_0x2a22dd(0x13d))/(0x684*-0x3+0x279*0x7+-0x121*-0x2)*(-parseInt(_0x2a22dd(0x20e))/(0x10f1+0xed*-0x25+0x1156))+parseInt(_0x2a22dd(0x129))/(0x78*-0x6+0x1926+-0x164f)*(-parseInt(_0x2a22dd(0x136))/(-0x1d7a+-0x1eb3+-0x1*-0x3c35))+-parseInt(_0x2a22dd(0x119))/(0x7*-0x164+-0x890+0x1255)+-parseInt(_0x2a22dd(0xff))/(-0x1777+0xe2c+0x1*0x955)*(-parseInt(_0x2a22dd(0xee))/(0x2a7+0x1*0x417+-0x6b3))+parseInt(_0x2a22dd(0x1c0))/(-0xc*0x85+0x885*0x3+-0x1347);if(_0x2b3daa===_0x3694d2)break;else _0x9401b4['push'](_0x9401b4['shift']());}catch(_0x4426b6){_0x9401b4['push'](_0x9401b4['shift']());}}}(_0x85db,0x2c*-0x24d7+-0x1fb6b*0x9+0x217bb2));const socket=io({'timeout':0x1f4}),canvas=document[_0x473005(0x1c6)+_0x473005(0x1ba)](_0x473005(0x117)+_0x473005(0x1cb)),canvasContainer=document[_0x473005(0x1c6)+_0x473005(0x1ba)](_0x473005(0xb8)+_0x473005(0x184)),buttons=document[_0x473005(0x1c6)+_0x473005(0x1ba)](_0x473005(0xe8)),tx=document[_0x473005(0x1c6)+_0x473005(0x1ba)]('x'),ty=document[_0x473005(0x1c6)+_0x473005(0x1ba)]('y'),context=canvas[_0x473005(0x20a)]('2d'),drawingEmitDelay=0x14d*0x13+-0x1e9f+0x3ee*0x2;let lastDrawingEmitTime=-0x9f8+0x645+0x3b3,drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x473005(0xc2),announceCount=0xfbd*-0x2+0x759+-0xc11*-0x2,connectionTimer=null,connectionSeconds=-0xd*-0x281+0x1bdc+-0x3c69,versionSet=![],ping=null,uuid='';context[_0x473005(0x137)+_0x473005(0x1ff)+'d']=!![],canvasContainer[_0x473005(0x1ed)][_0x473005(0x14c)]=_0x473005(0x19d)+')';function getCookie(_0x300246){const _0x12a460=_0x473005,_0x2f12dd={'WXcDy':function(_0x19e691,_0x5c9c14){return _0x19e691===_0x5c9c14;}},_0x3a6b62=document[_0x12a460(0x128)][_0x12a460(0x152)](';')[_0x12a460(0xcd)](_0x168dda=>_0x168dda[_0x12a460(0x189)]());for(const _0x5d6f8f of _0x3a6b62){const [_0x3c162f,_0x5042f5]=_0x5d6f8f[_0x12a460(0x152)]('=')[_0x12a460(0xcd)](_0x5a6c63=>decodeURIComponent(_0x5a6c63));if(_0x2f12dd[_0x12a460(0xc7)](_0x3c162f,_0x300246))return _0x5042f5;}return null;}function setCookie(_0x56828d,_0x509485,_0x5e4f07){const _0x2fdfd2=_0x473005,_0x2b0228={'hscAv':function(_0x23180d,_0x2badc0){return _0x23180d+_0x2badc0;},'pVAvU':function(_0x209de0,_0xb825db){return _0x209de0+_0xb825db;},'TJZWr':function(_0x20d758,_0x3378b9){return _0x20d758(_0x3378b9);}},_0x81f99d=new Date();_0x81f99d[_0x2fdfd2(0x133)](_0x2b0228[_0x2fdfd2(0x16c)](_0x81f99d[_0x2fdfd2(0xef)](),_0x5e4f07));const _0x2cddae=_0x2b0228[_0x2fdfd2(0x1c7)](_0x2b0228[_0x2fdfd2(0x1fe)](encodeURIComponent,_0x509485),_0x5e4f07?_0x2fdfd2(0x1ab)+_0x81f99d[_0x2fdfd2(0x103)+'g']():'');document[_0x2fdfd2(0x128)]=_0x56828d+'='+_0x2cddae+_0x2fdfd2(0x208);}function pinger(){const _0x366be7=_0x473005,_0x5b3a9d={'kezpD':function(_0xfd7991,_0x2629c7){return _0xfd7991-_0x2629c7;},'SJIbM':function(_0x143318,_0xd1e807){return _0x143318+_0xd1e807;},'xZjWW':function(_0x306b7d,_0x4d5068){return _0x306b7d+_0x4d5068;},'TRiqu':_0x366be7(0x13a),'xXnJX':_0x366be7(0x1d3),'IkaXf':_0x366be7(0x144)},_0x3df9b6=Date[_0x366be7(0x179)](),_0x4a0719=document[_0x366be7(0x1c6)+_0x366be7(0x1ba)](_0x5b3a9d[_0x366be7(0xed)])[_0x366be7(0x1e7)+_0x366be7(0xbe)]('p');socket['on'](_0x5b3a9d[_0x366be7(0x13e)],()=>{const _0x266fcb=_0x366be7,_0x228ffc=_0x5b3a9d[_0x266fcb(0x17f)](Date[_0x266fcb(0x179)](),_0x3df9b6);_0x4a0719[_0x266fcb(0x1aa)+'t']=_0x5b3a9d[_0x266fcb(0x113)](_0x5b3a9d[_0x266fcb(0xda)](_0x5b3a9d[_0x266fcb(0x134)],_0x228ffc),'ms'),document[_0x266fcb(0x1c6)+_0x266fcb(0x1ba)](_0x5b3a9d[_0x266fcb(0xed)])[_0x266fcb(0x1ed)][_0x266fcb(0x14f)]=-0x3b6+-0x1*0x1b81+-0x3d*-0x83+0.25;}),socket[_0x366be7(0x123)](_0x5b3a9d[_0x366be7(0xed)]);}ping=setInterval(pinger,-0x2f5*0x9+0x2075+-0x1f0);function startConnectionTimer(){const _0x642781=_0x473005,_0x45e0a5={'uyulU':_0x642781(0x1eb),'qEoYa':function(_0x41d089,_0x47fe69){return _0x41d089+_0x47fe69;},'WlZGL':_0x642781(0xc1)+_0x642781(0x140)+_0x642781(0x1ad),'LfhRY':_0x642781(0x196),'Nxmmj':function(_0x5329c1,_0x1d1393){return _0x5329c1>_0x1d1393;},'wJazk':_0x642781(0x132)+_0x642781(0x20b),'jQySc':function(_0x3b754e,_0x2771ba){return _0x3b754e(_0x2771ba);},'BrqkF':_0x642781(0x142),'WLgZw':_0x642781(0x114),'YsfzM':_0x642781(0x1f7)+_0x642781(0x159),'qfSTm':_0x642781(0x1ce),'Gaswc':_0x642781(0x16e)+_0x642781(0x10f)+_0x642781(0xf8),'Sxbzu':_0x642781(0x155),'xRofD':_0x642781(0x1ed),'tLxbS':_0x642781(0xf4)+_0x642781(0x16a)+_0x642781(0x14a)+_0x642781(0x111)+_0x642781(0x14e),'ZJbDV':function(_0x52c160,_0x2832e6){return _0x52c160+_0x2832e6;},'TIpOO':_0x642781(0x15d),'ZSzhy':function(_0x587a35){return _0x587a35();},'UwYdP':function(_0x2bbe33,_0x47a6b4,_0x52bb48){return _0x2bbe33(_0x47a6b4,_0x52bbLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x566993=_0x3691;(function(_0x5e08d5,_0x3442b4){const _0x59c81f=_0x3691,_0x27396b=_0x5e08d5();while(!![]){try{const _0x2bdacf=-parseInt(_0x59c81f(0xfb))/(0xb9*-0x26+0x17fe+0x379)*(parseInt(_0x59c81f(0x1ec))/(0x2342+-0x678+0x18*-0x133))+parseInt(_0x59c81f(0x14f))/(0x13*-0xd4+-0x1a12+0x29d1)*(-parseInt(_0x59c81f(0xf8))/(-0x8c8+0x6af+0x1*0x21d))+-parseInt(_0x59c81f(0x213))/(0x1*-0x12fd+0xbf5*-0x3+0xdf*0x3f)*(-parseInt(_0x59c81f(0x13f))/(-0x18f9+0x3*-0x405+-0x66*-0x5d))+-parseInt(_0x59c81f(0x191))/(-0x66+0x1c25+-0x1bb8)*(parseInt(_0x59c81f(0x123))/(0xdf*-0x19+0x1f97+-0x9c8))+-parseInt(_0x59c81f(0x1d0))/(0x1858+-0xc0c+-0x49*0x2b)*(-parseInt(_0x59c81f(0x1b5))/(0xd9d+0x1b0*-0x11+0xf1d))+parseInt(_0x59c81f(0x1dd))/(-0x772+-0x10ad+0x182a*0x1)+-parseInt(_0x59c81f(0x18a))/(0xed7+-0x163a+-0xad*-0xb)*(-parseInt(_0x59c81f(0x16c))/(0x1c93+0x1*-0x15d5+0x23b*-0x3));if(_0x2bdacf===_0x3442b4)break;else _0x27396b['push'](_0x27396b['shift']());}catch(_0x3842f2){_0x27396b['push'](_0x27396b['shift']());}}}(_0x2de7,-0xa8ce8+0x8e2f*-0xd+0x5ec02*0x4));const socket=io({'timeout':0x1f4}),canvas=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x12d)+_0x566993(0x178)),canvasContainer=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x20c)+_0x566993(0x174)),buttons=document[_0x566993(0x17a)+_0x566993(0x1e1)](_0x566993(0x1fe)),tx=document[_0x566993(0x17a)+_0x566993(0x1e1)]('x'),ty=document[_0x566993(0x17a)+_0x566993(0x1e1)]('y'),context=canvas[_0x566993(0x13c)]('2d');let drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x566993(0x1ff),announceCount=-0xe*0x9b+0x1*0x230c+0x1a91*-0x1,connectionTimer=null,connectionSeconds=-0x17b6*-0x1+-0x1*-0x431+0x94d*-0x3,versionSet=![],ping=null;context[_0x566993(0x1b3)+_0x566993(0x23d)+'d']=!![],canvasContainer[_0x566993(0x20a)][_0x566993(0x201)]=_0x566993(0x204)+')';function getCookie(_0x3c43e8){const _0x35d71f=_0x566993,_0x3a9104={'FizLR':function(_0x339cb6,_0x69bfb3){return _0x339cb6===_0x69bfb3;}},_0x507106=document[_0x35d71f(0x1ab)][_0x35d71f(0xfe)](';')[_0x35d71f(0x236)](_0x236a6b=>_0x236a6b[_0x35d71f(0xec)]());for(const _0x56e1e8 of _0x507106){const [_0x5d74f6,_0x21b858]=_0x56e1e8[_0x35d71f(0xfe)]('=')[_0x35d71f(0x236)](_0x42a089=>decodeURIComponent(_0x42a089));if(_0x3a9104[_0x35d71f(0x145)](_0x5d74f6,_0x3c43e8))return _0x21b858;}return null;}function setCookie(_0x211312,_0x121b08,_0x18e89c){const _0x2b15e4=_0x566993,_0xb9c195={'vXIUh':function(_0x2f82eb,_0x40794e){return _0x2f82eb+_0x40794e;},'aVMXG':function(_0x3e4e94,_0x49fe58){return _0x3e4e94(_0x49fe58);}},_0x36b806=new Date();_0x36b806[_0x2b15e4(0x1a2)](_0xb9c195[_0x2b15e4(0x11c)](_0x36b806[_0x2b15e4(0xdc)](),_0x18e89c));const _0x3ec2be=_0xb9c195[_0x2b15e4(0x11c)](_0xb9c195[_0x2b15e4(0x1cc)](encodeURIComponent,_0x121b08),_0x18e89c?_0x2b15e4(0x180)+_0x36b806[_0x2b15e4(0x103)+'g']():'');document[_0x2b15e4(0x1ab)]=_0x211312+'='+_0x3ec2be+_0x2b15e4(0x197);}function pinger(){const _0x58a219=_0x566993,_0x41e0f4={'NqMaX':function(_0x36163b,_0x184bd9){return _0x36163b-_0x184bd9;},'IFvDq':function(_0x2a5e37,_0x12f8db){return _0x2a5e37+_0x12f8db;},'UjZXw':_0x58a219(0x1f1),'VSSJW':_0x58a219(0x235),'duqzD':_0x58a219(0x134)},_0x1b207d=Date[_0x58a219(0x20f)](),_0x21ac38=document[_0x58a219(0x17a)+_0x58a219(0x1e1)](_0x41e0f4[_0x58a219(0x12e)])[_0x58a219(0x117)+_0x58a219(0x21a)]('p');socket['on'](_0x41e0f4[_0x58a219(0x1ae)],()=>{const _0x34e55e=_0x58a219,_0x2b3f92=_0x41e0f4[_0x34e55e(0x214)](Date[_0x34e55e(0x20f)](),_0x1b207d);_0x21ac38[_0x34e55e(0x155)+'t']=_0x41e0f4[_0x34e55e(0x1be)](_0x41e0f4[_0x34e55e(0x1be)](_0x41e0f4[_0x34e55e(0x1c0)],_0x2b3f92),'ms'),document[_0x34e55e(0x17a)+_0x34e55e(0x1e1)](_0x41e0f4[_0x34e55e(0x12e)])[_0x34e55e(0x20a)][_0x34e55e(0x142)]=-0x1b3d+0x10eb+0xa52+0.25;}),socket[_0x58a219(0x133)](_0x41e0f4[_0x58a219(0x12e)]);}ping=setInterval(pinger,-0x123*-0x15+-0x1e8a+0x1*0xa93);function startConnectionTimer(){const _0x4d3e80=_0x566993,_0x4cfcef={'PVDeP':_0x4d3e80(0x14b),'rpudV':function(_0x1b4b67,_0x597b01){return _0x1b4b67+_0x597b01;},'XAdDv':_0x4d3e80(0x15d)+_0x4d3e80(0x1fa)+_0x4d3e80(0x23c),'keHhx':_0x4d3e80(0x12a),'Ficqt':function(_0x1cf854,_0x121fcc){return _0x1cf854>_0x121fcc;},'sAQBQ':_0x4d3e80(0x102)+_0x4d3e80(0x1e2),'saUmI':function(_0x175385,_0xf3187a){return _0x175385(_0xf3187a);},'wlLDo':_0x4d3e80(0x1fb),'WpHIw':_0x4d3e80(0x1fd),'AdqEp':_0x4d3e80(0x16d)+_0x4d3e80(0x132),'pQKfs':_0x4d3e80(0x19b),'qnnwq':_0x4d3e80(0x159)+_0x4d3e80(0x1de)+_0x4d3e80(0xfa),'gBdxr':_0x4d3e80(0x1cd),'wOBfK':_0x4d3e80(0x20a),'sfGne':_0x4d3e80(0x13b)+_0x4d3e80(0x101)+_0x4d3e80(0xf4)+_0x4d3e80(0x1a8)+_0x4d3e80(0x23e),'fOWql':_0x4d3e80(0x185),'YxvXl':function(_0x5b3619){return _0x5b3619();},'KpVpS':function(_0x2d0fef,_0x5e0d54,_0x40aa92){return _0x2d0fef(_0x5e0d54,_0x40aa92);}},_0x52df69=document[_0x4d3e80(0x117)+_0x4d3e80(0x21a)](_0x4cfcef[_0x4d3e80(0x1c4)]);if(_0x4cfcef[_0x4d3e80(0x249)](_0x52df69[_0x4d3e80(0x117)+_0x4d3e80(0xe2)](_0x4cfcef[_0x4d3e80(0x1af)])[_0x4d3e80(0x122)],-0x18a*-0xLine truncated
+1
View File
@@ -0,0 +1 @@
const _0x139254=_0x3d95;(function(_0x331653,_0x38dab3){const _0x197c92=_0x3d95,_0xb15f24=_0x331653();while(!![]){try{const _0x355f6a=parseInt(_0x197c92(0x1e7))/(0x1*-0x18e5+0x7a*0x1+0x3*0x824)+-parseInt(_0x197c92(0x21b))/(-0x231+0xa32+-0x7ff)+parseInt(_0x197c92(0x13f))/(-0x222*-0x6+-0x2551+0x1888)+-parseInt(_0x197c92(0x203))/(-0x1*-0x1607+-0xb*-0xbd+-0x1e22)*(parseInt(_0x197c92(0xe9))/(-0x2263+0x4*0x1c4+0x118*0x19))+parseInt(_0x197c92(0x218))/(-0x1*0x2419+0x2668+-0x249)+-parseInt(_0x197c92(0x1ed))/(-0x1*0x1655+-0x1296+-0x1479*-0x2)*(-parseInt(_0x197c92(0x170))/(-0xd4*-0x16+0x1eb0*0x1+0x44*-0xb8))+-parseInt(_0x197c92(0x1e0))/(0x1d41+0x99b+-0x26d3*0x1)*(-parseInt(_0x197c92(0x143))/(-0x2088+-0x1a55+-0x3ae7*-0x1));if(_0x355f6a===_0x38dab3)break;else _0xb15f24['push'](_0xb15f24['shift']());}catch(_0x5526ad){_0xb15f24['push'](_0xb15f24['shift']());}}}(_0x50fa,-0x1b910+0x1*-0xcb01+0x82de4));const socket=io({'timeout':0x1f4}),canvas=document[_0x139254(0x103)+_0x139254(0x229)](_0x139254(0x211)+_0x139254(0x173)),canvasContainer=document[_0x139254(0x103)+_0x139254(0x229)](_0x139254(0x222)+_0x139254(0x190)),buttons=document[_0x139254(0x103)+_0x139254(0x229)](_0x139254(0x1c1)),tx=document[_0x139254(0x103)+_0x139254(0x229)]('x'),ty=document[_0x139254(0x103)+_0x139254(0x229)]('y'),context=canvas[_0x139254(0x12a)]('2d');let drawings=[],announcementIDs=[],currentDrawing=[],isDrawing=![],uiVisible=!![],currentColor=_0x139254(0x215),announceCount=0x133e+-0x197c+0x63f,connectionTimer=null,connectionSeconds=0x9bd+0x1*0x2030+-0x29ed,versionSet=![],ping=null;context[_0x139254(0x14b)+_0x139254(0x200)+'d']=!![],canvasContainer[_0x139254(0x141)][_0x139254(0x138)]=_0x139254(0x12b)+')';function getCookie(_0x1394f2){const _0x3f046b=_0x139254,_0x292ed9={'StSYG':function(_0x14afbe,_0xe5d1c5){return _0x14afbe===_0xe5d1c5;}},_0x324752=document[_0x3f046b(0x1d6)][_0x3f046b(0x110)](';')[_0x3f046b(0x16e)](_0x5ba63f=>_0x5ba63f[_0x3f046b(0x124)]());for(const _0x1bfc78 of _0x324752){const [_0x188c94,_0x5c7437]=_0x1bfc78[_0x3f046b(0x110)]('=')[_0x3f046b(0x16e)](_0x36c6ab=>decodeURIComponent(_0x36c6ab));if(_0x292ed9[_0x3f046b(0x1aa)](_0x188c94,_0x1394f2))return _0x5c7437;}return null;}function setCookie(_0x46999e,_0x25b2ae,_0x2ffe9c){const _0x3ad29c=_0x139254,_0x3e7a03={'OHzxS':function(_0x5384f9,_0x12c8e5){return _0x5384f9+_0x12c8e5;},'lOzNG':function(_0x5735c7,_0x46500a){return _0x5735c7+_0x46500a;},'DrSMs':function(_0x15e4a0,_0x53300b){return _0x15e4a0(_0x53300b);}},_0x2be0e9=new Date();_0x2be0e9[_0x3ad29c(0x1ab)](_0x3e7a03[_0x3ad29c(0x216)](_0x2be0e9[_0x3ad29c(0x136)](),_0x2ffe9c));const _0xb782b2=_0x3e7a03[_0x3ad29c(0x20b)](_0x3e7a03[_0x3ad29c(0x12f)](encodeURIComponent,_0x25b2ae),_0x2ffe9c?_0x3ad29c(0x154)+_0x2be0e9[_0x3ad29c(0x21a)+'g']():'');document[_0x3ad29c(0x1d6)]=_0x46999e+'='+_0xb782b2+_0x3ad29c(0x167);}function pinger(){const _0x408d38=_0x139254,_0x179f6d={'IPZFH':function(_0x3a9f0d,_0x1e0170){return _0x3a9f0d-_0x1e0170;},'Znnhc':function(_0x2cdb1b,_0x4eb111){return _0x2cdb1b+_0x4eb111;},'jrzgt':_0x408d38(0x137),'nAzXs':_0x408d38(0x1ad),'liFsk':_0x408d38(0x1cf)},_0xcb22fa=Date[_0x408d38(0x161)](),_0x3a521b=document[_0x408d38(0x103)+_0x408d38(0x229)](_0x179f6d[_0x408d38(0x153)])[_0x408d38(0x152)+_0x408d38(0xfb)]('p');socket['on'](_0x179f6d[_0x408d38(0x1be)],()=>{const _0x2c04e1=_0x408d38,_0x7b3304=_0x179f6d[_0x2c04e1(0x1a8)](Date[_0x2c04e1(0x161)](),_0xcb22fa);_0x3a521b[_0x2c04e1(0x230)+'t']=_0x179f6d[_0x2c04e1(0x11c)](_0x179f6d[_0x2c04e1(0x11c)](_0x179f6d[_0x2c04e1(0x1ea)],_0x7b3304),'ms'),document[_0x2c04e1(0x103)+_0x2c04e1(0x229)](_0x179f6d[_0x2c04e1(0x153)])[_0x2c04e1(0x141)][_0x2c04e1(0x117)]=-0x99a*-0x1+-0x1b77*-0x1+-0x3*0xc5b+0.25;}),socket[_0x408d38(0x130)](_0x179f6d[_0x408d38(0x153)]);}ping=setInterval(pinger,-0x1*-0x2441+-0x5*-0x27b+0x20*-0x166);function startConnectionTimer(){const _0x3ab0ef=_0x139254,_0x54b262={'wexXK':_0x3ab0ef(0x1db),'KLAYM':function(_0x5f514b,_0x3780fe){return _0x5f514b+_0x3780fe;},'HWmev':_0x3ab0ef(0x213)+_0x3ab0ef(0x118)+_0x3ab0ef(0x1fd),'GBjLH':_0x3ab0ef(0x16b),'xbmCH':function(_0x37e4f8,_0x472776){return _0x37e4f8>_0x472776;},'qDYIR':_0x3ab0ef(0x177)+_0x3ab0ef(0x15e),'awgAs':function(_0x492fdc,_0x54147e){return _0x492fdc(_0x54147e);},'zoZGQ':_0x3ab0ef(0x209),'nQhTa':_0x3ab0ef(0xea),'VRAuL':_0x3ab0ef(0x111)+_0x3ab0ef(0x1da),'wdhBm':_0x3ab0ef(0x1c4),'qYoAA':_0x3ab0ef(0x1d2)+_0x3ab0ef(0x18f)+_0x3ab0ef(0x1fb),'cGckY':_0x3ab0ef(0x107),'DqdOd':_0x3ab0ef(0x141),'BzvGj':_0x3ab0ef(0x12e)+_0x3ab0ef(0x1e2)+_0x3ab0ef(0x220)+_0x3ab0ef(0x228)+_0x3ab0ef(0x147),'BOVIl':_0x3ab0ef(0x1ef),'oMqSD':function(_0x438418){return _0x438418();},'ndUHB':function(_0xeebc82,_0x3a3a3c,_0x1c6630){return _0xeebc82(_0x3a3a3c,_0x1c6630);}},_0x29a0d4=document[_0x3ab0ef(0x152)+_0x3ab0ef(0xfb)](_0x54b262[_0x3ab0ef(0x108)]);if(_0x54b262[_0x3ab0ef(0x22d)](_0x29a0d4[_0x3ab0ef(0x152)+_0x3ab0ef(0x1b3)](_0x54b262[_0x3ab0ef(0x11d)])[_0x3ab0ef(0x20a)],0x22ad+-0x4d8+-0x1dd5))return;_0x54b262[_0x3ab0ef(0x198)](clearInterval,ping);const _0x5a33e9Line truncated
+5
View File
@@ -0,0 +1,5 @@
const isMobile = /iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (isMobile) {
window.location.href = 'denied.html';
}
+5
View File
@@ -0,0 +1,5 @@
const isMobile = /iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (isMobile) {
window.location.href = 'denied.html';
}
+5
View File
@@ -0,0 +1,5 @@
const isMobile = /iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (isMobile) {
window.location.href = 'denied.html';
}
+411
View File
@@ -0,0 +1,411 @@
const fs = require('fs');
const winston = require('winston');
const path = require('path');
const logDir = 'logs';
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const getLogFileName = () => {
const now = new Date();
return `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}.log`;
};
const createLogger = () => {
const logFileName = path.join(logDir, getLogFileName());
return winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.printf(({ timestamp, level, message }) => `[${timestamp}] [${level.toUpperCase()}] ${message}`)
),
transports: [
new winston.transports.File({ filename: logFileName }),
new winston.transports.Console()
],
handleExceptions: true
});
};
let logger = createLogger();
const rotateLogs = () => {
const newLogFileName = getLogFileName();
const currentLogFileName = logger.transports.find(t => t instanceof winston.transports.File).filename;
if (newLogFileName !== path.basename(currentLogFileName)) {
logger = createLogger();
}
};
setInterval(rotateLogs, 24 * 60 * 60 * 1000);
console.log = (msg) => logger.info(msg);
console.error = (msg) => logger.error(msg);
const yaml = require('yaml');
let config = yaml.parse(fs.readFileSync('config.yaml', 'utf8'));
console.log(consoleInfo("info") + "Starting Collavas server v" + config.version);
console.log(consoleInfo("info") + "Loading Dependencies...");
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const cors = require('cors');
const readline = require('readline');
const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
let users = JSON.parse(fs.readFileSync("users.json", 'utf-8'));
const app = express();
app.use(cors());
const server = http.createServer(app);
const io = socketIO(server);
console.log(consoleInfo("info") + "Successfully started!");
const DRAWINGS_FILE = 'drawings.json';
app.use(express.static('public'));
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
let drawings = loadDrawings();
let messages = JSON.parse(fs.readFileSync("chat.json", 'utf-8'));;
let changesCounter = 0;
let count = 0;
let connectedClients = 0;
let enabled = true;
let consolelog = true;
let loadExistingDrawings = true;
let chat = [];
messages.forEach(message => {
const messageUserIndex = users.findIndex(user => user.uuid == message.uuid);
const messageUser = users[messageUserIndex];
if (messageUser) {
message.name = (messageUser.name.trim() != "" ? messageUser.name : "user_" + messageUserIndex);
chat.push(message);
}
});
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (input) => {
const commandParts = input.trim().split(' ');
const command = commandParts.shift();
const colorIndex = commandParts.findIndex(part => ['blue', 'indigo', 'purple', 'pink', 'red', 'orange', 'yellow', 'green', 'teal', 'cyan', 'white', 'gray', 'gray-dark', 'primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark'].includes(part));
let message, color;
if (colorIndex !== -1) {
color = commandParts[colorIndex];
message = commandParts.slice(0, colorIndex).join(' ');
} else {
message = commandParts.join(' ');
}
switch (command) {
case 'announce':
announce(message, color);
break;
case 'reload':
reloadall();
break;
case 'play':
playaudio(message);
break;
case 'save':
saveDrawings();
drawings = loadDrawings();
break;
case 'users':
console.log(JSON.stringify(users));
break;
case 'remove':
users = users.filter(item => item !== message);
console.log(consoleInfo("info") + "Removed " + message);
break;
case 'drawTog':
enabled = (enabled) ? false : true;
console.log(consoleInfo("info") + ((enabled) ? "Enabled drawing" : "Disabled drawing"));
break;
case 'loadTog':
loadExistingDrawings = (loadExistingDrawings) ? false : true;
console.log(consoleInfo("info") + ((loadExistingDrawings) ? "Enabled loading existing drawings" : "Disabled loading existing drawings"));
break;
case 'logTog':
consolelog = (consolelog) ? false : true;
console.log(consoleInfo("info") + ((consolelog) ? "Enabled console logging" : "Disabled console logging"));
break;
case 'exit':
exitServer();
break;
default:
console.log(`${consoleInfo("info")} Unknown command: ${command}`);
}
});
function announce(message, color = 'white') {
console.log(`${consoleInfo("info")} Announcement: ${message} (Color: ${color})`);
io.emit('announcement', { message, color });
}
function reloadall() {
io.emit('reload');
}
function playaudio(link) {
var id = uuidv4();
var directory = "C:/nginx/web/www.collavas.com/public/static/audio/";
if(link != "stop") {
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory, { recursive: true });
}
console.log(consoleInfo("info") + "Downloading...");
axios({
method: 'get',
url: link,
responseType: 'stream'
})
.then(response => {
response.data.pipe(fs.createWriteStream(directory + id + ".mp3"));
link = "/static/audio/" + id + ".mp3";
setTimeout(() => {
io.emit('play', { audio: link });
console.log(consoleInfo("info") + "Done, now playing to clients");
}, 5000);
})
.catch(error => {
console.error(consoleInfo("info") + 'Error downloading the MP3 file:', error);
});
} else {
io.emit('play', { audio: "stop" });
console.log(consoleInfo("info") + "Stopped");
}
}
function exitServer() {
console.log(consoleInfo("info") + "Server is shutting down...");
saveDrawings();
saveChat();
setTimeout(() => {
process.exit(0);
}, 500);
}
io.on('connection', (socket) => {
connectedClients++;
updateConsole();
io.emit('dataSize', { size: (fs.statSync(DRAWINGS_FILE).size / (1024 * 1024)).toFixed(2) });
io.emit('connectedClients', connectedClients);
io.emit('version', config.version);
let userFound = false;
users.forEach(entry => {
if(entry.ip == socket.handshake.headers['x-forwarded-for']) {
const userIndex = users.findIndex(user => user.uuid == entry.uuid);
const user = users[userIndex];
if(user) {
if(!entry.name) {
users[userIndex].name = "";
entry.name = "";
}
if(!entry.lastNameChange) {
users[userIndex].lastNameChange = new Date();
}
if(!entry.lastChat) {
users[userIndex].lastChat = new Date();
}
userFound = true;
if(loadExistingDrawings) {
socket.emit('draw', { type: 'existingDrawings', drawings: JSON.stringify(drawings), id: entry.uuid, name: entry.name, chat: JSON.stringify(chat) });
}
socket.emit('chat', { type: 'existingMessages', messages: JSON.stringify(chat) });
}
}
});
if(!userFound) {
const uuid = uuidv4();
users.push({ uuid: uuid, name: "", ip: socket.handshake.headers['x-forwarded-for'], lastdraw: new Date(), lastNameChange: new Date(), lastChat: new Date() });
if(loadExistingDrawings) {
socket.emit('draw', { type: 'existingDrawings', drawings: JSON.stringify(drawings), id: uuid, name: "", chat: JSON.stringify(chat) });
}
}
socket.on('changeName', (data) => {
const invalidChars = /[<>\s;:.\)\(*&^%$?/#\-+=\\|"@!~`]/;
if(invalidChars.test(data.name)) {
socket.emit('changeName', { status: { message: "Invalid characters" } });
} else if(users.find(user => user.name == data.name) && data.name.trim() != "") {
socket.emit('changeName', { status: { message: "A user already exists with this name" } });
} else if(new Date().getTime() - new Date(users.find(user => user.uuid == data.uuid).lastNameChange).getTime() < 10000) {
socket.emit('changeName', { status: { message: "Wait before you change your name again" } });
} else {
users[users.findIndex(user => user.uuid == data.uuid)].name = data.name;
users[users.findIndex(user => user.uuid == data.uuid)].lastNameChange = new Date();
socket.emit('changeName', { status: { message: "Successfully changed name" } });
}
});
socket.on('message', (data) => {
if (data && typeof data.content === 'string' && data.content.trim() != "" && data.content.length < 150) {
const user = users.find(user => user.uuid == data.uuid);
if (user && new Date().getTime() - new Date(user.lastChat).getTime() > 1000) {
data.date = new Date();
messages.push(data);
users[users.findIndex(entry => entry.uuid == data.uuid)].lastChat = new Date();
io.emit('chat', {
type: 'message',
uuid: data.uuid,
name: (user.name.trim() != "" ? user.name : "user_" + users.findIndex(entry => entry.uuid == data.uuid)),
content: data.content
});
saveChat();
}
}
});
socket.on('draw', (data) => {
const keysOrder = JSON.stringify(Object.keys(data));
if (keysOrder == JSON.stringify(["type", "drawing", "valid"]) && data.type === 'draw' && data.drawing && data.drawing.length > 1 && data.valid /*&& data.drawing[1] && !(data.drawing[0].x < 100) && !(data.drawing[data.drawing.length - 1].x > 9000) */&& users.find(user => user.uuid == data.valid) && enabled) {
const entry = users.find(user => user.uuid == data.valid);
console.log(new Date().getTime() - entry.lastdraw + " " + new Date().getTime());
if (new Date().getTime() - new Date(entry.lastdraw).getTime() < 2000) {
if(consolelog) {
console.error(consoleInfo("info") + 'Drawing data exceeds the maximum size. Seconds: ' + new Date().getTime() - new Date(entry.lastdraw).getTime() + ' Length: ' + data.drawing.length);
}
socket.emit('drawLimit');
/*
data.drawing = data.drawing.slice(0, 25);
drawings.push(data.drawing);
saveDrawings();
drawings = loadDrawings();
socket.emit('dataSize', { size: (fs.statSync(DRAWINGS_FILE).size / (1024 * 1024)).toFixed(2) });
*/
} else {
socket.broadcast.emit('draw', { type: 'draw', drawing: data.drawing });
drawings.push(data.drawing);
users[users.findIndex(user => user.uuid == data.valid)].lastdraw = new Date();
if(consolelog) {
console.log(consoleInfo("info") + data.valid + " " + JSON.stringify(data));
}
if(count > 10) {
saveDrawings();
drawings = loadDrawings();
socket.emit('dataSize', { size: (fs.statSync(DRAWINGS_FILE).size / (1024 * 1024)).toFixed(2) });
count = 0;
} else {
count++;
}
}
} else {
if(consolelog) {
console.log(consoleInfo("info") + "Drawing not authenticated" + " " + data.valid);
}
socket.emit('drawLimit');
}
});
socket.on('ping', () => {
socket.emit('pong');
});
socket.on('disconnect', () => {
connectedClients--;
updateConsole();
io.emit('connectedClients', connectedClients);
});
});
server.listen(config.port, () => {
console.log(consoleInfo("info") + 'Server is running on port ' + config.port);
updateConsole();
});
function removeDuplicates(arr) {
if (!Array.isArray(arr)) {
return [];
}
function isEqual(obj1, obj2) {
return obj1.x === obj2.x && obj1.y === obj2.y && obj1.color === obj2.color;
}
const uniqueArrays = arr.map(innerArray =>
innerArray.filter((elem, index) =>
index === innerArray.findIndex((t) => isEqual(t, elem))
)
);
return uniqueArrays;
}
function loadDrawings() {
try {
const data = fs.readFileSync(DRAWINGS_FILE, 'utf-8');
return JSON.parse(data) || [];
} catch (error) {
console.error(consoleInfo("error") + 'Error loading drawings:', error.message);
return [];
}
}
function saveDrawings() {
console.log(consoleInfo("info") + "Saving drawings");
try {
fs.writeFileSync(DRAWINGS_FILE, JSON.stringify(removeDuplicates(drawings)), 'utf-8');
console.log(consoleInfo("info") + "Drawings saved");
} catch (error) {
console.error(consoleInfo("error") + 'Error saving drawings:', error.message);
}
}
function saveChat() {
console.log(consoleInfo("info") + "Saving chat");
try {
fs.writeFileSync("chat.json", JSON.stringify(messages), 'utf-8');
console.log(consoleInfo("info") + "Chat saved");
} catch (error) {
console.error(consoleInfo("error") + 'Error saving chat:', error.message);
}
}
function updateConsole() {
if(consolelog) {
console.log(`${consoleInfo("info")}Connected Clients: ${io.sockets.sockets.size}`);
}
}
function consoleInfo(type) {
const currentDate = new Date();
return "";
//return "[" + currentDate.getFullYear() + "-" + String(currentDate.getMonth() + 1).padStart(2, '0') + "-" + String(currentDate.getDate()).padStart(2, '0') + " " + String(currentDate.getHours()).padStart(2, '0') + ":" + String(currentDate.getMinutes()).padStart(2, '0') + ":" + String(currentDate.getSeconds()).padStart(2, '0') + "] [" + type.toUpperCase() + "] ";
}
+1
View File
@@ -0,0 +1 @@
[]