2017-01-31 10 views
0

Ich bin socket.io auf Knoten js und mein Ziel ist es, Raum zu schaffen und Raumereignisse an den Server zu verbinden und dann an diejenigen, die dem Raum beigetreten. Ich erschaffe erfolgreich das Zimmer, das ich denke, aber wenn ich irgendetwas mit .to() schicke, funktioniert es nicht.socket.io Zimmer funktionieren nicht

index.html

<html> 

<head> 
    <script src="/socket.io/socket.io.js"></script> 
</head> 

<body> 
    <label for="joinRoom"> Join room</label> 
    <form id="joinRoom"> 
     <input id="room" /><button>Send</button> 
    </form> 
    <label for="createRoom"> Create room</label> 
    <form id="createRoom"> 
     <input id="players" /><button>Send</button> 
    </form> 
    <script src="/client.js"></script> 
</body> 

</html> 

Client.js

const socket = io(); 

socket.on('test', (data) => console.log(data)); 

document.getElementById('joinRoom').onsubmit =() => { 
    socket.emit('joinRoom', document.getElementById('room').val()); 
    return false; 
}; 

socket.on('roomCreated', (id) => { 
    console.log(id); 
    // 
}); 

document.getElementById('createRoom').onsubmit =() => { 
    socket.emit('createRoom', document.getElementById('players').value); 
    return false; 
}; 

server.js

const express = require('express'); 
const app = express(); 
const server = require('http').createServer(app); 
const io = require('socket.io').listen(server); 

app.use(express.static('public')); 

server.listen(3000,() => { 
    console.log('listening...'); 
}); 

let currentRoomID = 0; 
const rooms = []; 

io.on('connection', (socket) => { 
    function joinRoom(room) { 
     socket.join(room.toString()); 
    } 
    socket.on('createRoom',() => { 
     const roomID = currentRoomID++; 
     rooms[roomID] = `foo ${roomID}`; 
     joinRoom(roomID, socket.id); 
     io.sockets.emit('roomCreated', roomID); 
     socket.to(roomID.toString()).emit('test', rooms[roomID]); 
    }); 
    socket.on('joinRoom', (room) => { 
     joinRoom(room, socket.id); 
    }); 
}); 

Antwort

1

Wenn Sie eine bestimmte Botschaft an die Menschen in einem bestimmten Raum emittieren möchten Sie kaltes tun:

io.sockets.in(room).emit('something', something); 

Oder wenn Sie etwas zu einem bestimmten Sockel emittieren möchten, können Sie tun:

io.to(socket).emit('something', something);