ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

『実践Node.jsプログラミング』誤植訂正

Kindle版『実践Node.jsプログラミング』のコードに誤植があったので、気づいた範囲で書いておきます。

実践Node.js プログラミング (Programmer's SELECTION)

第2章

2.4.1 Socket.IOサーバーを設定する(p.31)

変数宣言部。 左辺のオブジェクトリテラルが消えているので追加。

// lib/chat_server.js
var socketio = require('socket.io');
var io;
var guestNumber = 1;
var nickNames = {};
var namesUsed = [];
var currentRoom = {};

リスト2-7:Socket.IOサーバーを始動する(p.32)

assignGuestName()の引数nickNames?nickNamesになっていたので削除。

// lib/chat_server.js
guestNumber = assignGuestName(socket, gutstNumber, nickNames, namesUsed);

チャットメッセージの送信(p.36)

これは誤植というわけではないのですが、broadcastリクエストを投げてきたクライアント以外のクライアントに対してブロードキャストする仕様になっているので、サンプルコードのままだと自分の発言がチャットルームに表示されません。

というわけで、以下のように書き換えました。

// lib/chat_server.js
function handleMessageBroadcasting(socket) {
  socket.on('message', function(message) {
    var response = {text: nickNames[socket.id] + ': ' + message.text};
    socket.emit('message', response);
    socket.broadcast.to(message.room).emit('message', response);
    console.log(nickNames[socket.id] + '@' + message.room + ': ' + message.text); // server log
  });
}