0

以下のようなエントリがあります。

{
  "__v": 10,
  "_id": "50f8050ed714645500000002",
  "sid": "DI7gZ0sprJ",
  "lines": [
    {
      "text": "Well that's what some people say anyway",
      "_id": "50f80526d714645500000003",
      "user": "Player456"
    },
    {
      "text": "They're people just like the rest of us",
      "_id": "50f805925543712caf000005",
      "user": "Player123"
    },
  ],
  "title": "Test",
  "maxlines": 0
}

以下のような socket.io スクリプトがあります。

socket.on('sendchat', function (data) {
    Story.findOne({ sid: socket.room }, function(err, story){
        if (err) {
            console.log(err);
        }
        else if(story == null) {
            console.log(err);
        }
        else {
            io.sockets.in(socket.room).emit('updatechat', socket.username, data);
            story.maxlines = story.maxlines - 1;

            if (story.maxlines == 0) {
                // End Game Script - Redirect to view page
                io.sockets.in(socket.room).emit('gameover', slugs(story.title), socket.room);
            }
            //Save Story to DB
            story.lines.push({
                user: socket.username,
                text: data
            });
            story.save(function(err, story){
                if (err) {
                    console.log(err);
                }
                else {
                    console.log("Story Updated");
                }
            });
        };
    });
});

socket.username が、入力された最新の行のユーザーと等しいかどうかを確認する方法はありますか?

たとえば、上記の Player123 は最後にラインに入ったので、Player123 が再試行してもエラーが発生しますが、Player456 がラインに入ると、Player123 は再度入力できます。

私は単純なターンベースのゲームを作成しようとしています。これは、自分の番ではないときに人がラインに入ることができないことを確認するためにチェックします

4

1 に答える 1

1

linesオブジェクト内の配列の最後のエントリを直接確認できstoryます。次のように:

if (story.lines.length &&
    story.lines[story.lines.length-1].user === socket.username) {
    // error, same user is trying to enter another line
}
于 2013-02-23T17:43:55.143 に答える