Я решил изучить socket.io, чтобы создать игру в покерный чат, в которую можно играть, выполняя команды для бота.
Это то, что я хочу: - пользователь заходит на сайт - пользователь хочет создать новая игра с командой: !create
- с этого момента пользователь пишет вещи только в новой комнате (созданной как generi c id)
Код на данный момент:
index.js
(бэкэнд):
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3000;
const games = new Map();
const generalRoom = 'generalRoom';
function Player() {
}
function Game(creator) {
players = new Map();
players.set(creator, Player());
}
function generate() {
return (new Date()).getTime().toString(36)
}
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log(socket.id);
socket.join(generalRoom);
socket.on('chat message', function(msg){
console.log('chat message: ' + msg);
io.emit('chat message', msg);
});
socket.on('cmd', function(command){
console.log('command ' + command + ' send by ' + socket.id);
if(command === '!create') {
const roomId = generate();
games.set(roomId, new Game(socket.id));
socket.emit('chat message', 'you sent this command ' + command);
socket.emit('chat message', 'the id to pass to your friend is: ' + roomId);
socket.emit('chat message', 'I will move you on the new room... ');
socket.leaveAll();
socket.join(roomId);
socket.emit('chat message', 'can everyone read this?');
}
});
});
http.listen(port, function(){
console.log('listening on *:' + port);
});
и index.html
(фронтэнд):
<code><!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font: 13px Helvetica, Arial; }
form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
#messages { list-style-type: none; margin: 0; padding: 0; }
#messages li { padding: 5px 10px; }
#messages li:nth-child(odd) { background: #eee; }
#messages { margin-bottom: 40px }
</style>
</head>
<body>
<div>
<p>What you can do:</p>
<ul>
<li>send a normal message</li>
<li>send a command, you need to put a ! in front of the command:
<ul>
<li>
<pre>!create
позволяет создать новое совпадение. Бот даст код для отправки вашему другу
!join $code
позволяет присоединиться к матчу. Только владелец может начать матч.