In this example:
- All clients share a common status, commonStatus.
- Will info new client his id, socket.id.
- Server will broadcast all clients if any new client connected, io.sockets.emit(). Also info the number of client connected, io.sockets.clients().length.
- Info the current common status to new connected client.
- Info all clients if a client disconnected, socket.on('disconnect', function).
//$ npm install socket.io
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
//All clients have a common status
var commonStatus = 'ON';
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
//Send client with his socket id
socket.emit('your id',
{ id: socket.id});
//Info all clients a new client caaonnected
io.sockets.emit('on connection',
{ client: socket.id,
clientCount: io.sockets.clients().length,
});
//Set the current common status to the new client
socket.emit('ack button status', { status: commonStatus });
socket.on('button update event', function (data) {
console.log(data.status);
//acknowledge with inverted status,
//to toggle button text in client
if(data.status == 'ON'){
console.log("ON->OFF");
commonStatus = 'OFF';
}else{
console.log("OFF->ON");
commonStatus = 'ON';
}
io.sockets.emit('ack button status',
{ status: commonStatus,
by: socket.id
});
});
//Info all clients if this client disconnect
socket.on('disconnect', function () {
io.sockets.emit('on disconnect',
{ client: socket.id,
clientCount: io.sockets.clients().length-1,
});
});
});
index.html
<html>
<head></head>
<body>
<hi>Test Node.js with socket.io</hi>
<form action="">
<input type="button" id="buttonToggle" value="ON" style="color:blue"
onclick="toggle(this);">
</form>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(document.location.href);
var myId;
socket.on('on connection', function (data) {
console.log("on connection: " + data.client);
console.log("Number of client connected: " + data.clientCount);
});
socket.on('on disconnect',function(data) {
console.log("on disconnect: " + data.client);
console.log("Number of client connected: " + data.clientCount);
});
socket.on('your id',function(data) {
console.log("your id: " + data.id);
myId = data.id;
});
socket.on('ack button status', function (data) {
console.log("status: " + data.status);
if(myId==data.by){
console.log("by YOU");
}else{
console.log("by: " + data.by);
}
if(data.status =='ON'){
document.getElementById("buttonToggle").value="ON";
}else{
document.getElementById("buttonToggle").value="OFF";
}
});
function toggle(button)
{
if(document.getElementById("buttonToggle").value=="OFF"){
socket.emit('button update event', { status: 'OFF' });
}
else if(document.getElementById("buttonToggle").value=="ON"){
socket.emit('button update event', { status: 'ON' });
}
}
</script>
</body>
</html>
No comments:
Post a Comment