server.js
var app = require("express")();
var http = require("http").Server(app);
var io = require("socket.io")(http);
app.get("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});
var clientCount = 0;
io.on("connection", (socket) => {
console.log(`A user connected: id = ${socket.id}`);
io.to(socket.id).emit(
"message box",
`Server says: Welcome to the chat room, id ${socket.id}`
); // Send to specific guy.
// List all active user's socket ids.
// io.sockets.sockets.forEach( client => {
// console.log(`Send welcome message to ${client.id}`);
// });
io.sockets.emit("client count", ++clientCount); // Send to every one.
socket.broadcast.emit("message box", `There is a new guy joined! `); // Send to every one but the one himself.
socket.on("chat message", (msgObj) => {
io.sockets.emit(
"message box",
`(id:${msgObj.id}) ${msgObj.name} says: ${msgObj.message}`
); // Send to every one.
});
socket.on("disconnect", () => {
console.log(`User with id = ${socket.id} disconnected.`);
io.sockets.emit("client count", --clientCount); // Send to every one.
});
});
http.listen(3000, () => {
console.log("Server is listening on *:3000");
});
index.html
<body>
<p><b>User: <span id="username"></span></b></p>
<hr />
<div>
Current total users online: <span id="total-user-count"></span>.
<hr />
</div>
<form id="form">
<input id="input" type="text" />
<input type="submit" value="send"/>
</form>
<div>
<p><b>Message Box:</b></p>
<p><hr /></p>
<div id="msg-box"></div>
<p><hr /></p>
</div>
<script src="/socket.io/socket.io.js"></script>
<script>
var urlParams = new URLSearchParams(window.location.search);
var username = urlParams.get('name');
var socket = io();
var form = document.getElementById('form');
var input = document.getElementById('input');
var usernameBox = document.getElementById('username');
var msgBox = document.getElementById('msg-box');
var userCountBox = document.getElementById('total-user-count');
if(username){
usernameBox.textContent = username;
}
else{
console.error('Must set a valid username!');
document.body.innerHTML = '';
document.write('Must set a valid username!');
socket.disconnect();
}
socket.on('client count', function(msg) {
userCountBox.textContent = msg;
});
socket.on('message box', function(msg) {
var item = document.createElement('p');
item.textContent = msg;
msgBox.appendChild(item);
});
form.addEventListener('submit', function(e) {
e.preventDefault();
if (input.value) {
socket.emit('chat message', {name: username, message: input.value, id: socket.id});
input.value = '';
}
});
</script>
</body>
Good Sources:




