ios_app_v2/index2.html
2025-10-21 02:39:48 +03:00

160 lines
6.5 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Test Client</title>
<style>
body { font-family: sans-serif; display: flex; flex-direction: column; max-width: 800px; margin: auto; }
.controls, .message-box { border: 1px solid #ccc; padding: 10px; margin-bottom: 10px; border-radius: 5px; }
input[type="text"] { width: calc(100% - 100px); padding: 8px; margin-right: 5px; }
button { padding: 8px 12px; }
#messages { border: 1px solid #eee; padding: 10px; height: 300px; overflow-y: scroll; background-color: #f9f9f9; }
.msg { margin: 5px 0; padding: 5px; border-radius: 3px; }
.server-msg { background-color: #e1f5fe; }
.client-msg { background-color: #c8e6c9; text-align: right; }
.status-msg { background-color: #fff9c4; text-align: center; font-style: italic; }
</style>
</head>
<body>
<h1>Socket.IO Test Client</h1>
<div class="controls">
<h3>Подключение</h3>
<input type="text" id="url" placeholder="Сервер URL" value="https://127.0.0.1:5205/">
<input type="text" id="token" placeholder="Токен (для auth)" value="my-secret-token-123">
<button id="connectBtn">Подключиться</button>
<button id="disconnectBtn" disabled>Отключиться</button>
</div>
<div class="message-box">
<h3>Отправка клиентского сообщения</h3>
<input type="text" id="message" placeholder="Введите сообщение" disabled>
<button id="sendBtn" disabled>Отправить</button>
</div>
<div class="controls">
<h3>Настройки</h3>
<label>
<input type="checkbox" id="invertLogs">
Новый сверху (инвертировать лог)
</label>
</div>
<h3>Логи <button id="clearLogBtn" style="font-size: 0.8em; float: right;">Очистить</button></h3>
<div id="messages"></div>
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<script>
const urlInput = document.getElementById('url');
const tokenInput = document.getElementById('token');
const connectBtn = document.getElementById('connectBtn');
const disconnectBtn = document.getElementById('disconnectBtn');
const messageInput = document.getElementById('message');
const sendBtn = document.getElementById('sendBtn');
const messagesDiv = document.getElementById('messages');
const clearLogBtn = document.getElementById('clearLogBtn');
const invertLogsCheckbox = document.getElementById('invertLogs');
let socket = null;
function logMessage(message, type = 'status') {
const ts = new Date().toLocaleTimeString();
const newLogEntry = `<div class="msg ${type}-msg">[${ts}] ${message}</div>`;
if (invertLogsCheckbox.checked) {
messagesDiv.innerHTML = newLogEntry + messagesDiv.innerHTML;
messagesDiv.scrollTop = 0;
} else {
messagesDiv.innerHTML += newLogEntry;
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
}
function connectToServer() {
if (socket) {
logMessage('Уже подключены. Сначала отключитесь.', 'status');
return;
}
const token = tokenInput.value;
const url = urlInput.value || 'https://127.0.0.1:5205/';
logMessage('Подключаемся к серверу...', 'status');
socket = io(url, {
auth: {
token: token || null
}
});
// Универсальный перехват всех событий
socket.onAny((event, ...args) => {
try {
logMessage(`onAny -> ${event}: ${JSON.stringify(args[0])}`, 'server');
} catch (e) {
logMessage(`onAny -> ${event}: <unserializable>`, 'server');
}
});
socket.on('connect', () => {
logMessage(`Успешное подключение! SID: ${socket.id}`, 'status');
connectBtn.disabled = true;
disconnectBtn.disabled = false;
messageInput.disabled = false;
sendBtn.disabled = false;
});
socket.on('disconnect', () => {
logMessage('Отключено от сервера.', 'status');
connectBtn.disabled = false;
disconnectBtn.disabled = true;
messageInput.disabled = true;
sendBtn.disabled = true;
socket = null;
});
// Часто используемые события
socket.on('message', (data) => {
logMessage(`message: ${JSON.stringify(data)}`, 'server');
});
socket.on('connected', (data) => {
logMessage(`connected: ${JSON.stringify(data)}`, 'server');
});
socket.on('chat:new_message', (data) => {
logMessage(`chat:new_message: ${JSON.stringify(data)}`, 'server');
});
socket.on('achievement:received', (data) => {
logMessage(`achievement:received: ${JSON.stringify(data)}`, 'server');
});
socket.on('achievement:progress', (data) => {
logMessage(`achievement:progress: ${JSON.stringify(data)}`, 'server');
});
socket.on('connect_error', (err) => {
logMessage(`Ошибка подключения: ${err.message}`, 'status');
socket = null;
});
}
function sendMessage() {
const message = messageInput.value;
if (socket && message) {
socket.emit('client_message', { data: message });
logMessage(`Я: ${message}`, 'client');
messageInput.value = '';
}
}
connectBtn.addEventListener('click', connectToServer);
disconnectBtn.addEventListener('click', () => {
if (socket) socket.disconnect();
});
sendBtn.addEventListener('click', sendMessage);
messageInput.addEventListener('keyup', (event) => {
if (event.key === 'Enter') {
sendMessage();
}
});
clearLogBtn.addEventListener('click', () => {
messagesDiv.innerHTML = '';
});
</script>
</body>
</html>