我正在使用meteor.js构建一个基于回合制的多人游戏。该应用程序将处理多个游戏,因此我想将我的用户分成几个房间。 我在使用socket.io频道之前已经完成了它,但是我很难理解它应该如何在Meteor中完成。
我想要实现的目标是:
我使用" sessionId"对外部API进行服务器端调用。作为参数,获取用户的userId,他指定的roomId以及此房间允许的userId数组
我想为用户创建一个带roomId的房间,或者将他加入现有房间。我知道我应该创建一个' Rooms'收藏,但我不知道如何将用户绑在我的房间,只向在给定房间里的人发布消息。
我想避免使用'帐户'包裹,因为我不需要我的授权 - 它将由上面提到的第2步处理 - 但如果最简单和最干净的方法是添加这个包,我可以改变主意。
答案 0 :(得分:1)
您的Rooms
收藏品可能如下:
{
_id: "<auto-generated>",
roomId: "roomId",
users: [ "user1", "user2", "user3", ... ],
messages: [
{ message: "", userId: "" },
{ message: "", userId: "" },
{ message: "", userId: "" },
...
]
}
服务器端API调用返回
userId
和roomId
以及其他信息。
所以你可以做一个
Rooms.update({ roomId: roomId }, { $push: { users: userId } }, { upsert: true });
这会将用户推入现有房间或创建新房间并添加用户。
您的发布功能可能如下所示:
Meteor.publish("room", function(roomId) {
// Since you are not using accounts package, you will have to get the userId using the sessionId that you've specified or some other way.
// Let us assume your function getUserId does just that.
userId: getUserId( sessionId );
return Rooms.find({ roomId: roomId, users: userId });
// Only the room's users will get the data now.
});
希望这有帮助。