}
});
}
//将某个用户的消息广播到同聊天室下的其他用户
function handleMessageBroadcasting(socket){
socket.on('message',function(message){
console.log('message:---'+JSON.stringify(message));
socket.broadcast.to(message.room).emit('message',{
text:nickNames[socket.id]+ ': '+message.text
});
});
}
//加入/创建某个聊天室
function handleRoomJoining(socket){
socket.on('join',function(room){
var temp=currentRoom[socket.id];
delete currentRoom[socket.id];
socket.leave(temp);
var num=--allRooms[temp];
if(num==0)
delete allRooms[temp];
joinRoom(socket,room.newRoom);
});
}
//socket断线处理
function handleClientDisconnection(socket){
socket.on('disconnect',function(){
console.log("xxxx disconnect");
allRooms[currentRoom[socket.id]]--;
delete namesUsed[nickNames[socket.id]];
delete nickNames[socket.id];
delete currentRoom[socket.id];
})
}
3、客户端实现socket.io
1、chat.js处理发送消息,变更房间,聊天命令。
var Chat=function(socket){
this.socket=socket;//绑定socket
}
//发送消息
Chat.prototype.sendMessage=function(room,text){
var message={
room:room,
text:text
};
this.socket.emit('message',message);
};
//变更房间
Chat.prototype.changeRoom=function(room){
this.socket.emit('join',{
newRoom:room
});
};
//处理聊天命令
Chat.prototype.processCommand=function(command){
var words=command.split(' ');
var command=words[0].substring(1,words[0].length).toLowerCase();
var message=false;
switch(command){
case 'join':
words.shift();
var room=words.join(' ');
this.changeRoom(room);
break;
case 'nick':
words.shift();
var name=words.join(' ');
this.socket.emit('nameAttempt',name);
break;
default:
message='Unrecognized command.';
break;
}
return message;
};2、chat_ui.js 处理用户输入,根据输入调用chat.js的不同方法发送消息给服务器
function divEscapedContentElement(message){
return $('<div></div>').text(message);
}
function divSystemContentElement(message){
return $('<div></div>').html('<i>'+message+'</i>');
}
function processUserInput(chatApp,socket){
var message=$('#send-message').val();
var systemMessage;
if(message.charAt(0)=='/'){
systemMessage=chatApp.processCommand(message);
if(systemMessage){
$('#messages').append(divSystemContentElement(systemMessage));









