Ejemplo n.º 1
0
void RESTChannelHandler::onMessageReceived(Channel &channel, std::string &payload) {

    try {
        Request request(payload, channel);

        bool done = false;

        boost::match_results<string::const_iterator> capture;

        for (unsigned int i = 0; i < (*mRequestMap)[request.method].size(); i++) {

            if (regex_search(request.path, capture, (*mRequestMap)[request.method][i].pathre) ) {

                // push all matches into parameters.

                for (unsigned int j = 0; j < (*mRequestMap)[request.method][i].names.size(); j++)
                    request.setParameter((*mRequestMap)[request.method][i].names[j], capture[j+1]);


                Response res(&channel);

                MethodHandler f;

                f = (*mRequestMap)[request.method][i].func;

                f(request, res);
             
                done = true;

                break;

            }
        }

        if (! done) {
            Response fof(&channel, 404);
            fof.write();
        }

    }
    catch(Exception e) {
        Response five(&channel, 500);
        five.write();
    }

    // done.  close connection
    channel.close();
}
Ejemplo n.º 2
0
int main(int argc, char* argv[])
{
    bool printUsage = false;
    std::string whichGranulator;
    if( argc > 1 ){
        whichGranulator = argv[1];
    }else{
        printUsage |= true;
        whichGranulator = "fm";
        std::cerr << "Using default granulator (" << whichGranulator << ")\n";
    }

    std::string dataFile;
    if( argc > 2 ){
        dataFile = argv[2];
    }else{
        printUsage |= true;
        dataFile = whichGranulator + ".data";
        std::cerr << "Using default data file " << dataFile << '\n';
    }

    if( whichGranulator == "fm" ){
        printUsage = !fm( dataFile.c_str() );
    }else if( whichGranulator == "sample" ){
        printUsage = !sample( dataFile.c_str() );
    }else if( whichGranulator == "dl" ){
        printUsage = !dl( dataFile.c_str() );
    }else if( whichGranulator == "fof" ){
        printUsage = !fof( dataFile.c_str() );
    }else{
        printUsage |= true;
        std::cerr << "Error: unknown granulator '" << whichGranulator << "'\n";
    }

    if( printUsage )
        std::cerr << "Usage: " << argv[0] << " {fm,sample,dl,fof} [data-file]\n";
}