Exemple #1
0
int main(int, char*[])
{
    util::BackgroundScheduler poller;
    util::WorkerThreadPool wtp(util::WorkerThreadPool::NORMAL);

    util::http::Client wc;
    util::http::Server ws(&poller, &wtp);

    unsigned rc = ws.Init();

    EchoContentFactory ecf;
    ws.AddContentFactory("/", &ecf);

    assert(rc == 0);

    std::string url = (boost::format("http://127.0.0.1:%u/zootle/wurdle.html")
		       % ws.GetPort()
	).str();

    util::CountedPointer<FetchTask> ft(new FetchTask(url, &wc, &poller));

    wtp.PushTask(util::Bind(ft).To<&FetchTask::Run>());

    time_t start = time(NULL);
    time_t finish = start+5;
    time_t now;

    do {
	now = time(NULL);
	if (now < finish)
	{
//	    TRACE << "polling for " << (finish-now)*1000 << "ms\n";
	    poller.Poll((unsigned)(finish-now)*1000);
	}
    } while (now < finish && !ft->IsDone());

//    TRACE << "Got '" << ft->GetContents() << "' (len "
//	  << strlen(ft->GetContents().c_str()) << " sz "
//	  << ft->GetContents().length() << ")\n";
    assert(ft->GetContents() == "/zootle/wurdle.html");

    return 0;
}
Exemple #2
0
void Test2(util::WorkerThreadPool::Priority p, unsigned int n)
{
    s_created = s_destroyed = s_run = 0;

    util::WorkerThreadPool wtp(p, n);

//    TRACE << "Created, pushing\n";

    for (unsigned int i=0; i<n*2; ++i)
    {
	wtp.PushTask(util::Bind(SnoozePtr(new Snooze)).To<&Snooze::Run>());
    }

//    TRACE << "Shutting down\n";

    wtp.Shutdown();

//    TRACE << "Shutdown complete\n";

    assert(s_created == s_destroyed);

//    TRACE << "Test(" << n << ") done\n";
}
Exemple #3
0
int main()
{
//    cpu_set_t cpus;
//    CPU_ZERO(&cpus);
//    CPU_SET(0, &cpus);
//    int rc0 = sched_setaffinity(0, sizeof(cpus), &cpus);
//    TRACE << "ssa returned " << rc0 << "\n";

    util::MemoryStream ms;

    util::WorkerThreadPool wtp(util::WorkerThreadPool::NORMAL);
    util::AsyncWriteBuffer asp(&ms, &wtp);
    TestSeekableStream(&asp);

    std::unique_ptr<util::Stream> fsp;

    unsigned int rc = util::OpenFileStream("test2.tmp", util::TEMP, &fsp);
    assert(rc == 0);

    util::AsyncWriteBuffer asp2(fsp.get(), &wtp);
    TestSeekableStream(&asp2);

    return 0;
}
Exemple #4
0
int main(int argc, char *argv[])
{
    static const struct option options[] =
    {
	{ "help",  no_argument, NULL, 'h' },
	{ "karma",  no_argument, NULL, 'k' },
	{ "threads", required_argument, NULL, 't' },
	{ "dbfile", required_argument, NULL, 'f' },
	{ NULL, 0, NULL, 0 }
    };

    int nthreads = 0;
    const char *dbfile = DEFAULT_DB_FILE;
    bool karma = false;

    int option_index;
    int option;
    while ((option = getopt_long(argc, argv, "ht:f:k", options, &option_index))
	   != -1)
    {
	switch (option)
	{
	case 'h':
	    Usage(stdout);
	    return 0;
	case 't':
	    nthreads = (int)strtoul(optarg, NULL, 10);
	    break;
	case 'f':
	    dbfile = optarg;
	    break;
        case 'k':
            karma = true;
            break;
	default:
	    Usage(stderr);
	    return 1;
	}
    }

    int nargs = argc-optind;
    if (nargs < 2 || nargs > 3 || nthreads < 0)
    {
	Usage(stderr);
	return 1;
    }

    if (!nthreads)
	nthreads = util::CountCPUs() * 2;

    const char *outputdir = argv[optind];
    const char *mediaroot = argv[optind+1];
    const char *flacroot  = argv[optind+2];
    if (!flacroot)
	flacroot = "";

    db::steam::Database sdb(mediadb::FIELD_COUNT);
    sdb.SetFieldInfo(mediadb::ID, 
		     db::steam::FIELD_INT|db::steam::FIELD_INDEXED);
    sdb.SetFieldInfo(mediadb::PATH,
		     db::steam::FIELD_STRING|db::steam::FIELD_INDEXED);

    TRACE << "reading\n";

    mediadb::ReadXML(&sdb, "db.xml");

    TRACE << "scanning\n";

    util::WorkerThreadPool wtp(util::WorkerThreadPool::NORMAL, nthreads);

    util::http::Client http_client;
    db::local::Database ldb(&sdb, &http_client);

#if HAVE_TAGLIB
    db::local::FileScanner ifs(mediaroot, flacroot, &sdb, &ldb, &wtp);

    ifs.Scan();

    TRACE << "writing\n";

    FILE *f = fopen("db.xml", "wb");
    mediadb::WriteXML(&sdb, 1, f);
    fclose(f);

    TRACE << "arranging\n";

    WriteFIDStructure(outputdir, &sdb, karma);
#endif

    return 0;
}
Exemple #5
0
int Main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    static const struct option options[] =
    {
	{ "help", no_argument, NULL, 'h' },
	{ "threads", required_argument, NULL, 't' },
	{ NULL, 0, NULL, 0 }
    };

    unsigned int nthreads = 32;

    int option_index;
    int option;
    while ((option = getopt_long(argc, argv, "ht:", options, &option_index))
	   != -1)
    {
	switch (option)
	{
	case 'h':
	    Usage(stdout);
	    return 0;
	case 't':
	    nthreads = (unsigned int)strtoul(optarg, NULL, 10);
	    break;
	default:
	    Usage(stderr);
	    return 1;
	}
    }

    const char *media_root;
    const char *flac_root = "";

    switch ((int)(argc-optind)) // How many more arguments?
    {
    case 2:
	media_root = argv[optind];
	flac_root  = argv[optind+1];
	break;
    case 1:
	media_root = argv[optind];
	break;
    default:
	Usage(stderr);
	return 1;
    }

    util::http::Client http_client;
    db::steam::Database sdb(mediadb::FIELD_COUNT);
    sdb.SetFieldInfo(mediadb::ID, 
		     db::steam::FIELD_INT|db::steam::FIELD_INDEXED);
    sdb.SetFieldInfo(mediadb::PATH,
		     db::steam::FIELD_STRING|db::steam::FIELD_INDEXED);
    sdb.SetFieldInfo(mediadb::ARTIST,
		     db::steam::FIELD_STRING|db::steam::FIELD_INDEXED);
    sdb.SetFieldInfo(mediadb::ALBUM,
		     db::steam::FIELD_STRING|db::steam::FIELD_INDEXED);
    sdb.SetFieldInfo(mediadb::GENRE,
		     db::steam::FIELD_STRING|db::steam::FIELD_INDEXED);

    util::WorkerThreadPool wtp(util::WorkerThreadPool::LOW, nthreads);
    db::local::Database db(&sdb, &http_client, &wtp);

    db::local::FileScanner ifs(media_root, flac_root, &sdb, &db, &wtp);

    mediadb::Registry registry;

    ScanProgressDialog spd(&db, &registry);
    spd.show();
    ifs.AddObserver(&spd);

    unsigned int rc = ifs.StartScan();
    assert(rc == 0);
    if (rc)
    {
	fprintf(stderr, "Scanning failed: %u\n", rc);
	exit(1);
    }

    return app.exec();
}
Exemple #6
0
int main()
{
    TestServiceImpl tsi;

    DoTest(&tsi);

    // Now via UPnP

    util::WorkerThreadPool wtp(util::WorkerThreadPool::NORMAL);
    util::BackgroundScheduler poller;
    wtp.PushTask(util::SchedulerTask::Create(&poller));
    util::http::Client wc;
    util::http::Server ws(&poller, &wtp);
    upnp::ssdp::Responder ssdp(&poller, NULL);

    ws.Init();
    upnp::Server server(&poller, &wc, &ws, &ssdp);

    TestDevice dev;
    dev.Init(&server, "/");

    unsigned rc = server.Init();
    assert(rc == 0);

    std::string descurl = (boost::format("http://127.0.0.1:%u/upnp/description.xml")
			      % ws.GetPort()).str();

    upnp::DeviceClient client(&wc, &ws, &poller);
    rc = client.Init(descurl, dev.GetUDN());
    assert(rc == 0);

    upnp::TestServiceClient tsc(&client, s_test_service_id);
    rc = tsc.Init();
    assert(rc == 0);

    DoTest(&tsc);

    // Async version

    upnp::DeviceClient client2(&wc, &ws, &poller);
    AsyncTest at(&client2);
    at.Run(descurl, dev.GetUDN());

    int tries = 0;
    for (;;)
    {
	if (at.IsDone())
	    break;
	
	assert(++tries < 30);

#ifdef WIN32
	Sleep(1000);
#else
	sleep(1);
#endif
    }

//    TRACE << "Shutdown begins\n";

    poller.Shutdown();
    wtp.Shutdown();

    return 0;
}
    void DevilImageReader::updateResult(DataContainer& data) {
        const std::string& url = p_url.getValue();
        std::string directory = cgt::FileSystem::dirName(url);
        std::string base = cgt::FileSystem::baseName(url);
        std::string ext = cgt::FileSystem::fileExtension(url);

        // check whether we open an image series
        size_t suffixPos = base.find_last_not_of("0123456789");
        if (suffixPos != std::string::npos)
            ++suffixPos;
        size_t suffixLength = (suffixPos == std::string::npos) ? 0 : base.length() - suffixPos;

        // assemble the list of files to read
        std::vector<std::string> files;
        if (suffixLength == 0 || !p_importSimilar.getValue()) {
            files.push_back(url);
        }
        else {
            std::string prefix = base.substr(0, suffixPos);
            int index = StringUtils::fromString<int>(base.substr(suffixPos));

            while (cgt::FileSystem::fileExists(directory + "/" + prefix + StringUtils::toString(index, suffixLength, '0') + "." + ext)) {
                files.push_back(directory + "/" + prefix + StringUtils::toString(index, suffixLength, '0') + "." + ext);
                ++index;
            }
        }

        if (files.empty())
            return;

        cgt::ivec3 imageSize(0, 0, static_cast<int>(files.size()));
        uint8_t* buffer = nullptr;

        ILint devilFormat = 0;
        if (p_importType.getOptionValue() == "localIntensity") 
            devilFormat = IL_LUMINANCE;
        else if (p_importType.getOptionValue() == "localIntensity3") 
            devilFormat = IL_RGB;
        else if (p_importType.getOptionValue() == "rt") 
            devilFormat = IL_RGBA;

        ILint devilDataType = 0;
        WeaklyTypedPointer::BaseType campvisDataType = WeaklyTypedPointer::UINT8;
        size_t numChannels = 1;

        // start reading
        for (size_t i = 0; i < files.size(); ++i) {
            // prepare DevIL
            ILuint img;
            ilGenImages(1, &img);
            ilBindImage(img);

            // try load file
            if (! ilLoadImage(files[i].c_str())) {
                LERROR("Could not load image: " << files[i]);
                delete [] buffer;
                return;
            }

            // prepare buffer and perform dimensions check
            if (i == 0) {
                imageSize.x = ilGetInteger(IL_IMAGE_WIDTH);
                imageSize.y = ilGetInteger(IL_IMAGE_HEIGHT);

                if (devilFormat == 0)
                    devilFormat = ilGetInteger(IL_IMAGE_FORMAT);

                switch (ilGetInteger(IL_IMAGE_TYPE)) {
                    case IL_UNSIGNED_BYTE:
                        devilDataType = IL_UNSIGNED_BYTE;
                        campvisDataType = WeaklyTypedPointer::UINT8;
                        break;
                    case IL_BYTE:
                        devilDataType = IL_BYTE;
                        campvisDataType = WeaklyTypedPointer::INT8;
                        break;
                    case IL_UNSIGNED_SHORT:
                        devilDataType = IL_UNSIGNED_SHORT;
                        campvisDataType = WeaklyTypedPointer::UINT16;
                        break;
                    case IL_SHORT:
                        devilDataType = IL_SHORT;
                        campvisDataType = WeaklyTypedPointer::INT16;
                        break;
                    case IL_UNSIGNED_INT:
                        devilDataType = IL_UNSIGNED_INT;
                        campvisDataType = WeaklyTypedPointer::UINT32;
                        break;
                    case IL_INT:
                        devilDataType = IL_INT;
                        campvisDataType = WeaklyTypedPointer::INT32;
                        break;
                    case IL_FLOAT:
                        devilDataType = IL_FLOAT;
                        campvisDataType = WeaklyTypedPointer::FLOAT;
                        break;
                    default:
                        LERROR("unsupported data type: " << ilGetInteger(IL_IMAGE_TYPE) << " (" << files[i] << ")");
                        return;
                }

                switch (devilFormat) {
                    case IL_LUMINANCE:
                        numChannels = 1;
                        break;
                    case IL_LUMINANCE_ALPHA:
                        numChannels = 2;
                        break;
                    case IL_RGB:
                        numChannels = 3;
                        break;
                    case IL_RGBA:
                        numChannels = 4;
                        break;
                    default:
                        LERROR("unsupported image format: " << devilFormat << " (" << files[i] << ")");
                        return;
                }
                buffer = new uint8_t[cgt::hmul(imageSize) * WeaklyTypedPointer::numBytes(campvisDataType, numChannels)];
            }
            else {
                if (imageSize.x != ilGetInteger(IL_IMAGE_WIDTH)) {
                    LERROR("Could not load images: widths do not match!");
                    delete [] buffer;
                    return;
                }
                if (imageSize.y != ilGetInteger(IL_IMAGE_HEIGHT)) {
                    LERROR("Could not load images: heights do not match!");
                    delete [] buffer;
                    return;
                }
            }

            // get data from image and transform to single intensity image:
            ilCopyPixels(0, 0, 0, imageSize.x, imageSize.y, 1, devilFormat, devilDataType, buffer + (WeaklyTypedPointer::numBytes(campvisDataType, numChannels) * i * imageSize.x * imageSize.y));
            ILint err = ilGetError();
            if (err != IL_NO_ERROR) {
                LERROR("Error during conversion: " << iluErrorString(err));
                delete [] buffer;
                return;
            }

            ilDeleteImage(img);
        }

        size_t dimensionality = 3;
        if (imageSize.z == 1)
            dimensionality = 2;
        if (imageSize.y == 1)
            dimensionality = 1;


        ImageData* id = new ImageData(dimensionality, imageSize, numChannels);
        WeaklyTypedPointer wtp(campvisDataType, numChannels, buffer);
        ImageRepresentationLocal::create(id, wtp);
        //id->setMappingInformation(ImageMappingInformation(imageSize, p_imageOffset.getValue(), p_voxelSize.getValue()));

        if (p_importType.getOptionValue() == "rt") {
            RenderData* rd = new RenderData();
            rd->addColorTexture(id);

            // create fake depth image
            ImageData* idDepth = new ImageData(dimensionality, imageSize, 1);
            float* ptr = new float[cgt::hmul(imageSize)];
            memset(ptr, 0, cgt::hmul(imageSize) * sizeof(float));
            WeaklyTypedPointer wtpDepth(campvisDataType, 1, ptr);
            ImageRepresentationLocal::create(idDepth, wtpDepth);
            rd->setDepthTexture(idDepth);

            data.addData(p_targetImageID.getValue(), rd);
        }
        else {
            data.addData(p_targetImageID.getValue(), id);
        }
    }