void OnlineTimeAward::acceptAward(const std::function<bool(bool,int, int)>& callback)
{
    if (_leftDuration == 0 && callback(true, _awardsNum, _itemType)) {
        restartCount();
    }else{
        callback(false, _awardsNum, _itemType);
    }
}
void IntervalAward::acceptAward(const std::function<bool(bool,int, int)>& callback)
{
    if (_lefttime == 0 &&
        callback(true, _awardsNum, _itemType)) {
        restartCount();
    }else{
        callback(false, _awardsNum, _itemType);
    }
}
Exemple #3
0
QueryData genOsqueryEvents(QueryContext& context) {
  QueryData results;

  auto publishers = EventFactory::publisherTypes();
  for (const auto& publisher : publishers) {
    Row r;
    r["name"] = publisher;
    r["publisher"] = publisher;
    r["type"] = "publisher";

    auto pubref = EventFactory::getEventPublisher(publisher);
    if (pubref != nullptr) {
      r["subscriptions"] = INTEGER(pubref->numSubscriptions());
      r["events"] = INTEGER(pubref->numEvents());
      r["restarts"] = INTEGER(pubref->restartCount());
      r["active"] = (pubref->hasStarted() && !pubref->isEnding()) ? "1" : "0";
    } else {
      r["subscriptions"] = "0";
      r["events"] = "0";
      r["restarts"] = "0";
      r["active"] = "-1";
    }
    results.push_back(r);
  }

  auto subscribers = EventFactory::subscriberNames();
  for (const auto& subscriber : subscribers) {
    Row r;
    r["name"] = subscriber;
    r["type"] = "subscriber";
    // Subscribers will never 'restart'.
    r["restarts"] = "0";

    auto subref = EventFactory::getEventSubscriber(subscriber);
    if (subref != nullptr) {
      r["publisher"] = subref->getType();
      r["subscriptions"] = INTEGER(subref->numSubscriptions());
      r["events"] = INTEGER(subref->numEvents());

      // Subscribers are always active, even if their publisher is not.
      r["active"] = (subref->state() == SUBSCRIBER_RUNNING) ? "1" : "0";
    } else {
      r["subscriptions"] = "0";
      r["events"] = "0";
      r["active"] = "-1";
    }
    results.push_back(r);
  }

  return results;
}
void IntervalAward::loadAward(const rapidjson::Value& value)
{
    _id = value["id"].GetInt();
    
    _interval = value["interval"].GetInt() * 60;  ///cast minutes to secs
    _awardsNum = value["awardsNum"].GetInt();
    _itemType = value["itemType"].GetInt();
    
    auto& doc = LOCAL_VAR->getDocument(config_file);
    sprintf(_key, "interval_%d", _id);
    if (doc.HasMember(_key)) {
        _starttime_solid = doc[_key].GetUint64();
    }else {
        restartCount();
    }
}