コード例 #1
0
ファイル: source.cpp プロジェクト: hundeboll/rlncd
int main(int argc, char **argv)
{
    std::string usage("Encode packets with Random Linear Network Coding\n");
    FLAGS_alsologtostderr = true;
    FLAGS_colorlogtostderr = true;
    google::HandleCommandLineCompletions();
    google::SetUsageMessage(usage);
    google::ParseCommandLineFlags(&argc, &argv, true);
    google::InitGoogleLogging(argv[0]);
    google::InstallFailureSignalHandler();

    signal(SIGINT, sigint);
    signal(SIGTERM, sigint);

    counters_base::pointer c(new counters_base);
    ctrl_tracker::pointer ack_tracker(new ctrl_tracker(FLAGS_ack_timeout*1000));
    ctrl_tracker::pointer req_tracker(new ctrl_tracker(FLAGS_req_timeout*1000));
    io::pointer i(new io);
    encoder_map::pointer enc_map(new encoder_map);
    decoder_map::pointer dec_map(new decoder_map);

    enc_map->set_io(i);
    enc_map->counters(c);
    enc_map->init(FLAGS_encoders);

    dec_map->set_io(i);
    dec_map->counters(c);
    dec_map->ctrl_trackers(ctrl_tracker_api::ACK, ack_tracker);
    dec_map->ctrl_trackers(ctrl_tracker_api::REQ, req_tracker);

    i->counters(c);
    i->set_encoder_map(enc_map);
    i->set_decoder_map(dec_map);
    i->netlink_open();
    i->netlink_register();
    i->start();

    std::chrono::milliseconds interval(100);
    while (running)
        std::this_thread::sleep_for(interval);

    std::cout << "ack avg: " << ack_tracker->get_rtt() << std::endl;
    std::cout << "req avg: " << req_tracker->get_rtt() << std::endl;
    c->print();
    i->stop();
    enc_map.reset();
    dec_map.reset();
    i.reset();
    c.reset();

    return 0;
}
コード例 #2
0
ファイル: encode.c プロジェクト: alepharchives/erljson_bench
int
enc_json(Encoder* enc, ERL_NIF_TERM term)
{
    int ival;
    unsigned int uival;
    long lval;
    unsigned long ulval;
    double dval;
    ERL_NIF_TERM head;
    ERL_NIF_TERM tail;
    int arity;
    const ERL_NIF_TERM* tuple;
    
    if(enif_is_atom(enc->env, term))
    {
        return enc_atom(enc, term);
    }
    
    if(enif_is_binary(enc->env, term))
    {
        return enc_binary(enc, term);
    }
    
    if(enif_get_int(enc->env, term, &ival))
    {
        if(yajl_gen_integer(enc->handle, ival) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "bad_integer");
            return ERROR;
        }
        return OK;
    }
    
    if(enif_get_uint(enc->env, term, &uival))
    {
        if(yajl_gen_integer(enc->handle, uival) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "bad_unsigned_integer");
            return ERROR;
        }
        return OK;
    }
    
    if(enif_get_long(enc->env, term, &lval))
    {
        if(yajl_gen_integer(enc->handle, lval) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "bad_long");
            return ERROR;
        }
        return OK;
    }
    
    if(enif_get_ulong(enc->env, term, &ulval))
    {
        if(yajl_gen_integer(enc->handle, ulval) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "bad_unsigned_long");
            return ERROR;
        }
        return OK;
    }

    if(enif_get_double(enc->env, term, &dval))
    {
        if(yajl_gen_double(enc->handle, dval) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "bad_double");
            return ERROR;
        }
        return OK;
    }

    if(enif_is_empty_list(enc->env, term))
    {
        if(yajl_gen_array_open(enc->handle) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "failed_to_open_empty_list");
            return ERROR;
        }
        if(yajl_gen_array_close(enc->handle) != yajl_gen_status_ok)
        {
            enc->error = enif_make_atom(enc->env, "failed_to_close_empty_list");
            return ERROR;
        }
        return OK;
    }

    if(enif_get_list_cell(enc->env, term, &head, &tail))
    {
        return enc_array(enc, head, tail);
    }
    
    if(enif_get_tuple(enc->env, term, &arity, &tuple))
    {
        if(arity == 1)
        {
            if(enif_is_empty_list(enc->env, tuple[0]))
            {
                if(yajl_gen_map_open(enc->handle) != yajl_gen_status_ok)
                {
                    enc->error = enif_make_atom(enc->env,
                                                "failed_to_open_empty_map");
                    return ERROR;
                }
                if(yajl_gen_map_close(enc->handle) != yajl_gen_status_ok)
                {
                    enc->error = enif_make_atom(enc->env,
                                                "failed_to_close_empty_map");
                    return ERROR;
                }
                return OK;
            }
            else if(enif_get_list_cell(enc->env, tuple[0], &head, &tail))
            {
                return enc_map(enc, head, tail);
            }
        }
    }

    enc->error = enif_make_tuple(enc->env, 2,
        enif_make_atom(enc->env, "badarg"),
        term
    );
    return ERROR;
}