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(); }
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"; }