| [41c1b7] | 1 | /* | 
|---|
|  | 2 | * Project: MoleCuilder | 
|---|
|  | 3 | * Description: creates and alters molecular systems | 
|---|
|  | 4 | * Copyright (C)  2012 University of Bonn. All rights reserved. | 
|---|
|  | 5 | * Please see the LICENSE file or "Copyright notice" in builder.cpp for details. | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | /* | 
|---|
|  | 9 | * \file poolworker.cpp | 
|---|
|  | 10 | * | 
|---|
|  | 11 | * This file strongly follows the Serialization example from the boost::asio | 
|---|
|  | 12 | * library (see client.cpp) | 
|---|
|  | 13 | * | 
|---|
|  | 14 | *  Created on: Feb 28, 2012 | 
|---|
|  | 15 | *      Author: heber | 
|---|
|  | 16 | */ | 
|---|
|  | 17 |  | 
|---|
|  | 18 |  | 
|---|
|  | 19 | // include config.h | 
|---|
|  | 20 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 21 | #include <config.h> | 
|---|
|  | 22 | #endif | 
|---|
|  | 23 |  | 
|---|
|  | 24 | // boost asio needs specific operator new | 
|---|
|  | 25 | #include <boost/asio.hpp> | 
|---|
|  | 26 |  | 
|---|
|  | 27 | #include "CodePatterns/MemDebug.hpp" | 
|---|
|  | 28 |  | 
|---|
|  | 29 | #include <iostream> | 
|---|
|  | 30 | #include <boost/lexical_cast.hpp> | 
|---|
| [aec098] | 31 | #include <signal.h> | 
|---|
| [41c1b7] | 32 |  | 
|---|
|  | 33 | #include "atexit.hpp" | 
|---|
|  | 34 | #include "CodePatterns/Info.hpp" | 
|---|
|  | 35 | #include "CodePatterns/Log.hpp" | 
|---|
|  | 36 | #include "Pool/PoolWorker.hpp" | 
|---|
|  | 37 |  | 
|---|
| [aec098] | 38 | boost::function<void (int)> shutdownfunction; | 
|---|
|  | 39 |  | 
|---|
|  | 40 | void signalhandler(int sig) | 
|---|
|  | 41 | { | 
|---|
|  | 42 | if (shutdownfunction) | 
|---|
|  | 43 | shutdownfunction(sig); | 
|---|
|  | 44 | signal(SIGINT, NULL); | 
|---|
|  | 45 | } | 
|---|
| [41c1b7] | 46 |  | 
|---|
|  | 47 | int main(int argc, char* argv[]) | 
|---|
|  | 48 | { | 
|---|
|  | 49 | // from this moment on, we need to be sure to deeinitialize in the correct order | 
|---|
|  | 50 | // this is handled by the cleanup function | 
|---|
|  | 51 | atexit(cleanUp); | 
|---|
|  | 52 |  | 
|---|
|  | 53 | setVerbosity(3); | 
|---|
|  | 54 |  | 
|---|
|  | 55 | size_t exitflag = 0; | 
|---|
|  | 56 | try | 
|---|
|  | 57 | { | 
|---|
|  | 58 | // Check command line arguments. | 
|---|
|  | 59 | if (argc != 5) | 
|---|
|  | 60 | { | 
|---|
|  | 61 | std::cerr << "Usage: " << argv[0] << " <host> <port> <listenhost> <listenport>" << std::endl; | 
|---|
|  | 62 | return 1; | 
|---|
|  | 63 | } | 
|---|
|  | 64 |  | 
|---|
|  | 65 | boost::asio::io_service io_service; | 
|---|
|  | 66 | PoolWorker client(io_service, argv[1], argv[2], argv[3], argv[4]); | 
|---|
| [aec098] | 67 |  | 
|---|
|  | 68 | // catch ctrl-c and shutdown worker properly | 
|---|
|  | 69 | shutdownfunction = boost::bind(&PoolWorker::shutdown, boost::ref(client), _1); | 
|---|
|  | 70 | //    signal(SIGABRT, &signalhandler); | 
|---|
|  | 71 | //    signal(SIGTERM, &signalhandler); | 
|---|
|  | 72 | signal(SIGINT, &signalhandler); | 
|---|
|  | 73 |  | 
|---|
|  | 74 | // process io requests | 
|---|
| [41c1b7] | 75 | { | 
|---|
|  | 76 | Info info("io_service"); | 
|---|
|  | 77 | io_service.run(); | 
|---|
|  | 78 | } | 
|---|
|  | 79 | exitflag = client.getFlag(); | 
|---|
|  | 80 | } | 
|---|
|  | 81 | catch (std::exception& e) | 
|---|
|  | 82 | { | 
|---|
|  | 83 | std::cerr << e.what() << std::endl; | 
|---|
|  | 84 | } | 
|---|
|  | 85 |  | 
|---|
|  | 86 |  | 
|---|
|  | 87 | return exitflag; | 
|---|
|  | 88 | } | 
|---|