Пишу игру игру для тестового задания.
Как должно быть: Два пользователя заходят на сервер, выбирают один из предложенных вариантов, кликают по "Жми, если выбор сделан!" и им приходит ответ: если результат совпадает, то появляется alert "Ты выиграл!" у обоих игроков.
Как есть на самом деле: игроки кликают одинаковый результат и ничего не происходит.
Почему так?
Сам код здесь: https://repl.it/repls/PapayawhipRundownShell
// подключение express и socket.io
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var path = require('path');
var port = 8080;
var connections = [];
var playerOne;
var playerTwo;
// массив для хранения текущих подключений
var connections = [];
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
// установка соединения
io.on('connection', function (socket) {
connections.push(socket.id);
if (connections.length > 0) {
console.log('Connected: %s sockets connected', connections.length);
console.log(connections);
}
if (connections.length != 2) {
socket.emit('wait', 'Вас должно быть двое. Ни больше - ни меньше.' );
}
else {
socket.on('send message', function (data) {
if (socket.id = connections[0]) {
playerOne = data;
console.log(playerOne);
} else if (socket.id = connections[1]) {
playerTwo = data;
console.log(playerTwo);
}
})
if ((playerOne) && (playerTwo)){
socket.emit('answer', 'Ты выиграл!' );
}
}
})
server.listen(port, function () {
console.log('app running on port ' + port);
})
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Камень, ножницы, бумага, ящерица, спок.</title>
</head>
<body >
<div>
<fieldset class="ad-form__element">
<label class="ad-form__label" for="type">Выбирай жест!</label>
<select id="type" name="type">
<option value="Спок">Спок</option>
<option value="Камень">Камень</option>
<option value="Ножницы">Ножницы</option>
<option value="Ящерица">Ящерица</option>
<option value="Бумага">Бумага</option>
</select>
</fieldset>
<button class="ad-form__submit" type="submit">Жми, если выбор сделан!</button>
<div id="output"></div>
</div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script>
var socket = io();
var usersChoise = document.querySelector('#type').value;
var btn = document.querySelector('.ad-form__submit');
btn.onclick = function () {
console.log(document.querySelector('#type').value);
// сгенерировать событие отправки сообщения
socket.emit('send message', document.querySelector('#type').value);
}
socket.on('answer', function (data) {
alert(data);
})
</script>
</html>
UPD: я узнал, что из-за срабатывающего выше события 'wait', не приходит ответ с того клиента, у которого он появился. Если его закомментировать, то к серверу приходит оба сообщения, но даже если закомментировать его, то не срабатывает условие для победы.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости