Project TPFL |
# # alarm client user config (and its a comment) # # Client options host = "195.112.224.23:10000" # alarm server hostname[:port] tries = 3 # how much tries is allowed |
#include
"tpfl/tpfl.hxx" static const TPARSER_OPTION Options[] = { // Socket options { "o", "host", "host", "alarm server hostname[:port]", tParserFlag::Mandatory }, { "t", "tries", "tries", "how much tries is allowed", tParserFlag::Optional } }; // error handling void parserErrorHandler(const tParser* par); //////////////////////////////////////////////////////////// // error handlers void parserErrorHandler(const tParser* par) { tLog log(AppName); log.setConsole(Verb); tString errorDesc; log.write(LOG_ERR, par->getErrorDesc(errorDesc)); exit(ALARM_ERROR_IO_PARSE); } //////////////////////////////////////////////////////////// // main int main(int argc, char* argv[]) { // create a parser (simple one; there is a more features) tParser par(Options, sizeof(Options)/sizeof(TPARSER_OPTION)); par.setErrorHandler(parserErrorHandler); par.setCmdLine(argc, argv); // get config file (simplified) tString configPath; tConfigPath path; configPath = path.getConfigPath(AppName); if (path.isGood((const char*)configPath)) par.setResFileName((const char*)configPath); // define variables tString hostport; tString host = ALARM_SERVER_HOST; long tries = ALARM_CLIENT_TRIES; // open resource file par.openResFile(); // parse it! par.found("t", tries); par.found("o", hostport); // close resource file par.closeResFile(); : // extract hostname and port number host = ((tStringNet)hostport).host(); port = ((tStringNet)hostport).port(); ......... return 0; } |
//
callback void socketErrorHandler(const tSocketBase* sock) { tLog log(AppName); log.setConsole(Verb); tString errorDesc; log.write(LOG_ERR, sock->getErrorDesc(errorDesc)); } // client socket tSocketClient client; client.setErrorHandler(socketErrorHandler); client.socket(AF_INET, SOCK_STREAM, 0); client.connect((const char*)host, port); client.writeLine((const char*)line); client.close(); |