METEOR JS:多个用户的动作

时间:2015-08-23 11:27:37

标签: node.js meteor meteor-blaze

我有2个聊天室,每个房间我有5个用户和input字段,每个用户都可以输入一些数字,submit它可以在服务器上验证,如果数字相等(例如)至5比此房间中的用户获胜,而其他房间的用户输了,所以我有5个用户赢了,5个输了。

所以,我想要的是:当一个团队赢了,而不是将赢得的用户重定向到某个WIN页面,同时将丢失到LOSE页面的用户重定向。并且!这一点非常重要!如果某些用户离线但他的团队输了或输了,那么下次用户登录时会显示LOSEWIN页面,这取决于他的球队是否获胜。

所以我看到3个问题,我找不到解决方案:

  1. 重定向用户组(我使用Iron Router
  2. 跟踪团队中的哪一个获胜(跟踪所有玩游戏的用户)(Blaze if不合适)
  3. 如果某个团队获胜且用户为offline,那么下次用户登录时会显示LOSEWIN
  4. 我知道很多问题并且它们非常广泛,但找不到解决方案,请帮助某人!

2 个答案:

答案 0 :(得分:1)

在组级别跟踪这个可能更简单,然后只需要一个模板助手来跟踪组的获胜/失败状态。您甚至不需要会话变量,所有参与者都会立即获得正确的通知或延迟通知。例如:

HTML:

<template name="wrapper">
  {{#if state.inProgress}}
    {{> gameTemplate}}
  {{else}}
    {{#if state.won}}
      {{> winnnerTemplate}}
    {{else}}
      {{> loserTemplate}}
    {{/if}}
  {{/if}}
</template>

JS:

Template.wrapper.helpers({
  state: function(){
    var myGroupId = Meteor.user().myGroupId;
    var outcome = Groups.find({ _id: myGroupId }).outcome;
    return { inProgress: ( outcome === 'in progress'), won: ( outcome === 'won' ) };
  }
});

这里我从帮助器返回一个对象而不是 inProgress won 的单独变量,以避免搜索组两次。

我还将每个用户建模为属于一个组,其中 groupId 是用户对象中的一个键。这显然允许您在每个组中拥有任意数量的人以及任意数量的组。

我遗漏的是服务器端逻辑,它在Group文档中设置结果键。您必须在同一服务器方法中将一个组设置为 won ,将另一个组设置为 lost

答案 1 :(得分:0)

您遇到了设计问题。

  1. 和2.如果您想在应用中跟踪“群组”(如果他们输了或赢,重定向到输赢),您必须创建一个群组来管理您的“状态”游戏(我认为你的应用程序就像一个游戏)。

  2. 使用群组集合,您可以向成员显示信息,即如果我在群组中,即使我在您的应用程序中登录时处于离线状态,我也可以查看群组记录中的内容

  3. 它是一个设计问题,并且知道如何管理流星中的数据和事件