var userName; // 在用户页面中显示消息及可用房间 function divEscapedContentElement(message, isRoom) { if (isRoom) { return '
' + message + '
' } else { return '
' + '
' + userName + ':' + '
' + '
' + message + '
' + '
' } } function divSystemContentElement(message) { return $('
').html('' + message + ""); } // 处理原始的用户输入 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)); } } else { // 将非命令输入广播给其他用户 chatApp.sendMessage($('#room').text(), message); $('#messages').append(divEscapedContentElement(message)); $('#messages').scrollTop($('#messages')[0].scrollHeight); } $('#send-message').val(''); } // 客户端程序初始化逻辑 console.log(io) var socket = io.connect(); $(function () { var chatApp = new Chat(socket); // 显示更名尝试的结果 socket.on('nameResult', function (result) { var message; if (result.success) { userName = result.name; message = '你的初始用户名为: ' + result.name + '.'; } else { message = result.message; } ; $('#messages').append(divSystemContentElement(message)); }); // 显示房间变更的结果 socket.on('joinResult', function (result) { $('#room').text(result.room); $('#messages').append(divSystemContentElement('已进入房间: ' + result.room)); }); // 显示接收到的消息 socket.on('message', function (message) { var newElement = $('
').text(message.text); $('#messages').append(newElement); }); // 显示可用房间列表 socket.on('rooms', function (rooms) { $('#room-list').empty(); // debugger; for (var room in rooms) { room = room.substring(1, room.length); if (room != '') { $('#room-list').append(divEscapedContentElement(room, true)); } } // 点击房间名可用换到那个房间中 $('#room-list div').click(function () { chatApp.processCommand('/join ' + $(this).text()); $('#send-message').focus(); }); }); setInterval(function () { socket.emit('rooms') }, 1000); $('#send-message').focus(); $('#send-form').submit(function () { processUserInput(chatApp, socket); return false; }); });