コード例 #1
0
ファイル: tag.c プロジェクト: denever/shell-fm
void sendtag(char key, char * tagstring, struct hash data) {
	unsigned nsplt = 0;
	int result = 0;
	char ** splt = NULL;

	if(tagstring) {
		unsigned length = strlen(tagstring);
		/* remove trailing commas */
		while(tagstring[length-1] == ',')
			tagstring[--length] = 0;

		splt = split(tagstring, ",\n", & nsplt);
	}

	switch(key) {
		case 'a':
			result =
				xmlrpc("tagArtist", "sas", value(& data, "creator"), splt, "set");
			break;

		case 'l':
			result = xmlrpc(
					"tagAlbum", "ssas",
					value(& data, "creator"),
					value(& data, "album"),
					splt, "set"
					);
			break;

		case 't':
			result = xmlrpc(
					"tagTrack", "ssas",
					value(& data, "creator"),
					value(& data, "title"),
					splt, "set"
					);
			break;
	}

	if(!enabled(QUIET))
		puts(result ? "Tagged." : "Sorry, failed.");

	purge(splt);
	splt = NULL;
}
コード例 #2
0
int main(int argc, char* argv[])
{
  try
  {
    log_init("rpcbenchclient.properties");

    cxxtools::Arg<std::string> ip(argc, argv, 'i');
    cxxtools::Arg<unsigned> threads(argc, argv, 't', 4);
    cxxtools::Arg<unsigned> concurrentRequestsPerThread(argc, argv, 'c', 4);
    cxxtools::Arg<bool> xmlrpc(argc, argv, 'x');
    cxxtools::Arg<bool> binary(argc, argv, 'b');
    cxxtools::Arg<bool> json(argc, argv, 'j');
    cxxtools::Arg<bool> jsonhttp(argc, argv, 'J');
    cxxtools::Arg<unsigned short> port(argc, argv, 'p', binary ? 7003 : json ? 7004 : 7002);
    BenchClient::numRequests(cxxtools::Arg<unsigned>(argc, argv, 'n', 10000));
    BenchClient::vectorSize(cxxtools::Arg<unsigned>(argc, argv, 'v', 0));
    BenchClient::objectsSize(cxxtools::Arg<unsigned>(argc, argv, 'o', 0));

    if (!xmlrpc && !binary && !json && !jsonhttp)
    {
        std::cerr << "usage: " << argv[0] << " [options]\n"
                     "options:\n"
                     "   -l ip      set ip address of server (default: localhost)\n"
                     "   -p number  set port number of server (default: 7002 for http, 7003 for binary and 7004 for json)\n"
                     "   -x         use xmlrpc protocol\n"
                     "   -b         use binary rpc protocol\n"
                     "   -j         use json rpc protocol\n"
                     "   -J         use json rpc over http protocol\n"
                     "   -c number  concurrent request per thread (default: 4)\n"
                     "   -t number  set number of threads (default: 4)\n"
                     "   -n number  set number of requests (default: 10000)\n"
                     "one protocol must be selected\n"
                  << std::endl;
        return -1;
    }

    BenchClients clients;

    XmlRpcClientCreator xmlRpcClientCreator(ip, port, "/xmlrpc");
    JsonHttpClientCreator jsonHttpClientCreator(ip, port, "/jsonrpc");
    JsonRpcClientCreator jsonRpcClientCreator(ip, port);
    BinRpcClientCreator binRpcClientCreator(ip, port);
    ClientCreator& clientCreator = binary   ? static_cast<ClientCreator&>(binRpcClientCreator)
                                 : json     ? static_cast<ClientCreator&>(jsonRpcClientCreator)
                                 : jsonhttp ? static_cast<ClientCreator&>(jsonHttpClientCreator)
                                 :            static_cast<ClientCreator&>(xmlRpcClientCreator);

    while (clients.size() < threads)
    {
      clients.push_back(new BenchClient(clientCreator, concurrentRequestsPerThread));
    }

    cxxtools::Clock cl;
    cl.start();

    for (BenchClients::iterator it = clients.begin(); it != clients.end(); ++it)
      (*it)->start();

    for (BenchClients::iterator it = clients.begin(); it != clients.end(); ++it)
      (*it)->join();

    cxxtools::Timespan t = cl.stop();

    std::cout << BenchClient::numRequests() << " requests in " << t.totalMSecs()/1e3 << " s => " << (BenchClient::requestsStarted() / (t.totalMSecs()/1e3)) << "#/s\n"
              << BenchClient::requestsFinished() << " finished " << BenchClient::requestsFailed() << " failed" << std::endl;

    for (BenchClients::iterator it = clients.begin(); it != clients.end(); ++it)
      delete *it;
  }
  catch (const std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }
}