Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
39
rated 0 times [  44] [ 5]  / answers: 1 / hits: 24411  / 9 Years ago, fri, september 18, 2015, 12:00:00

I want to write a simple chat for practical experience.



All right, but I can't get a socket.nickname for notice a join/leave from the room. (when I tried pass its, he always sad a 'undefined').



Now all right, tried to create list of rooms



UPDATE CODE:



client.js:



$('#roomForm').submit(function() {
socket.emit('createRoom', $('#roomName').val());
$('#roomForm').hide();
$('#chatForm').show();
return false;
});

socket.on('message', function(data) {
newMessage(data);
});

socket.on('showRooms', function(rooms) {
console.log(rooms);
for(var i = 0; i < rooms.length; i++) {
$('#rooms').append($('<li>')
.append($('<form id=freeRoom>')
.append($('<span id=room>').text(rooms[i] + ' ///'))
.append($('<button>').text('connect'))));
};
});

$('#freeRoom').submit(function() {
socket.emit('connectToRoom', $('#room').text());
return false;
});


server.js:



io.on('connection', function(socket) {
socket.on('sendNickname', function(username) {
socket.username = username;
users.push(socket.username);
socket.emit('showRooms', rooms);
});

socket.on('disconnect', function() {
socket.broadcast.to(socket.room).emit('notice', socket.username + ' has left the room');
users.splice(users.indexOf(socket.username), 1);
socket.emit('showRooms', rooms);
});

socket.on('message', function(data) {
socket.broadcast.to(socket.room).emit('message', data);
});

socket.on('createRoom', function(room) {
socket.leave(socket.room);
socket.room = room;
rooms.push(socket.room);
socket.join(socket.room);
socket.emit('showRooms', rooms);
console.log('Rooms: ' + rooms);
socket.broadcast.to(socket.room).emit('notice', socket.username + ' has joined to room');
});

socket.on('connectToRoom', function(room) {
console.log('Will connect to that room: ' + room);
socket.join(room);
});
});


**UPD 2: **
Tried to connect free created room:



$('#freeRoom').submit(function() {
socket.emit('connectToRoom', $('#room').text());
return false;
});


P.S. And... Sorry for my english >.<


More From » node.js

 Answers
18

The event name that you emit, that is 'connect' is reserved in Socket.io along with 'message' and 'disconnect':



http://socket.io/docs/#sending-and-receiving-events




Socket.IO allows you to emit and receive custom events. Besides
connect, message and disconnect, you can emit custom events:

...




Change it to something else, e.g:



Server.js:



io.on('connection', function(socket) {
socket.on('send-nickname', function(nickname) {
socket.nickname = nickname;
users.push(socket.nickname);
console.log(users);
});
...


Client.js



socket.emit('send-nickname', nickname);

[#65004] Thursday, September 17, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
angelicajayleneh

Total Points: 216
Total Questions: 110
Total Answers: 100

Location: Sudan
Member since Tue, Aug 3, 2021
3 Years ago
;