예제 #1
0
파일: server.c 프로젝트: stanbery/atlantis
static void reports(void)
{
    FILE * F;
    ql_iter fli;

    _mkdir("reports");

    for (fli = qli_init(&factions); qli_more(fli);) {
        faction * f = (faction *)qli_next(&fli);
        cJSON * json;
        char buf[256];
        stream strm;

        sprintf(buf, "reports/%d-%d.json", turn, f->no);
        fstream_init(&strm, fopen(buf, "w"));
        json = json_report(f);
        json_write(json, &strm);
        cJSON_Delete(json);
        fstream_done(&strm);

        report(f);
    }
    F = fopen("send", "w");
    puts("Writing send file...");

    for (fli = qli_init(&factions); qli_more(fli);) {
        faction * f = (faction *)qli_next(&fli);
        const char * addr = faction_getaddr(f);
        if (addr) {
            fprintf(F, "mail %d-%d.r\n", turn, f->no);
            fprintf(F, "in%%\"%s\"\n", addr);
            fprintf(F, "Atlantis Report for %s\n", gamedate());
        }
    }

    fclose(F);

    F = fopen("maillist", "w");
    puts("Writing maillist file...");

    for (fli = qli_init(&factions); qli_more(fli);) {
        faction * f = (faction *)qli_next(&fli);
        const char * addr = faction_getaddr(f);
        if (addr) {
            fprintf(F, "%s\n", addr);
        }
    }

    fclose(F);
}
예제 #2
0
static void test_json_report(CuTest * tc) {
    region * r;
    faction * f;
    unit * u;
    cJSON * json;

    cleargame(true);
    turn = 0;
    r = create_region(0, 1, 1, create_terrain("plain"));
    f = addplayer(r, 0, 0);
    u = r->units;
    update_world(0, 0, 1, 1);

    json = json_report(f);
    CuAssertIntEquals(tc, turn, cJSON_GetObjectItem(json, "turn")->valueint);
    free(json);
}
예제 #3
0
void spawner_new_c::print_report() {
    if (runners.empty()) {
        std::string report = "Error: " + get_error_text();
        maybe_write_to_file(base_options.report_file, report);
        if (!base_options.hide_report)
            std::cout << report;
        return;
    }
    rapidjson::StringBuffer s;
    rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF16<> > report_writer(s);
    report_writer.StartArray();
    for (auto i : runners) {
        report_class rep = i->get_report();
        options_class options_item = i->get_options();
        std::cout.flush();
        if (!options_item.hide_report || options_item.report_file.length()) {
            std::string report;
            json_report(i, report_writer);

            if (options_item.login.length() > 0)
            {
                pull_shm_report(options_item.shared_memory.c_str(), report);
            }

            if (report.length() == 0)
            {
                if (!options_item.json)
                {
                    report = GenerateSpawnerReport(
                        rep, options_item,
                        i->get_restrictions()
                    );
                }
                else
                {
                    rapidjson::StringBuffer sub_report;
                    rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF16<> > report_item_writer(sub_report);
                    report_item_writer.StartArray();
                    json_report(i, report_item_writer);
                    report_item_writer.EndArray();
                    report = sub_report.GetString();
                }
            }

            if (options_item.delegated)
            {
                push_shm_report(options_item.shared_memory.c_str(), report);
            }
            else
            {
                if (!options_item.hide_report && runners.size() == 1)
                {
                    std::cout << report;
                }
                maybe_write_to_file(options_item.report_file, report);
            }
        }
    }
    report_writer.EndArray();
    if (base_options.json && runners.size() > 1) {
        std::string report = s.GetString();
        maybe_write_to_file(base_options.report_file, report);
        if (!base_options.hide_report) {
            std::cout << report;
        }
    }
}
예제 #4
0
void spawner_new_c::print_report() {
    rapidjson::StringBuffer s;
    rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF16<> > report_writer(s);
    report_writer.StartArray();
    for (auto i = runners.begin(); i != runners.end(); i++) {
        report_class rep = (*i)->get_report();
        options_class options_item = (*i)->get_options();
        std::cout.flush();
        if (!options_item.hide_report || options_item.report_file.length()) {
            std::string report;
            json_report(*i, report_writer);

            if (options_item.login.length() > 0)
            {
                pull_shm_report(options_item.shared_memory.c_str(), report);
            }

            if (report.length() == 0)
            {
                if (!options_item.json)
                {
                    report = GenerateSpawnerReport(
                                 rep, options_item,
                                 (*i)->get_restrictions()
                             );
                }
                else
                {
                    rapidjson::StringBuffer sub_report;
                    rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF16<> > report_item_writer(sub_report);
                    report_item_writer.StartArray();
                    json_report(*i, report_item_writer);
                    report_item_writer.EndArray();
                    report = sub_report.GetString();
                }
            }

            if (options_item.delegated)
            {
                push_shm_report(options_item.shared_memory.c_str(), report);
            }
            else
            {
                if (!options_item.hide_report && runners.size() == 1)
                {
                    std::cout << report;
                }

                if (options_item.report_file.length())
                {
                    std::ofstream fo(options_item.report_file.c_str());
                    fo << report;
                    fo.close();
                }
            }
        }
    }
    report_writer.EndArray();
    if (base_options.json && runners.size() > 1) {
        std::string report = s.GetString();
        if (base_options.report_file.length()) {
            std::ofstream fo(base_options.report_file.c_str());
            fo << report;
            fo.close();
        }
        if (!base_options.hide_report) {
            std::cout << report;
        }
    }
}