Example #1
0
File: server.cpp Project: SEDS/CUTS
//
// register_sighandler
//
static void register_sighandler (void)
{
  ACE_Sig_Action sa (&server_sighandler);

  sa.register_action (SIGINT);
  sa.register_action (SIGTERM);
}
Example #2
0
//
// register_sighandler
//
static void register_sighandler (void)
{
  CUTS_TEST_TRACE ("register_sighandler (void)");

  ACE_Sig_Action sa (&server_sighandler);
  sa.register_action (SIGINT);
  sa.register_action (SIGTERM);
}
Example #3
0
void InitContext()
{
#if !defined(WIN32)
    //avoid SIGPIPE
    static ACE_Sig_Action no_sigpipe ((ACE_SignalHandler) SIG_IGN);
    static ACE_Sig_Action original_action;
    no_sigpipe.register_action (SIGPIPE, &original_action);
#endif
    int ret = ACE::set_handle_limit(-1);//client handler (must be BIG)
}
Example #4
0
int
ACE_TMAIN (int argc, ACE_TCHAR *[])
{
  // If argc > 1 then allow multiple handlers per-signal, else just
  // allow 1 handler per-signal.
  ACE_Sig_Handlers multi_handlers;

#if defined (ACE_WIN32)
  ACE_WFMO_Reactor reactor_impl (argc > 1
                                 ? &multi_handlers
                                 : (ACE_Sig_Handler *) 0);
#else
  ACE_Select_Reactor reactor_impl (argc > 1
                                   ? &multi_handlers
                                   : (ACE_Sig_Handler *) 0);
#endif /* ACE_WIN32 */
  ACE_Reactor reactor (&reactor_impl);

  if (argc > 1)
    {
      // Register an "external" signal handler so that the
      // ACE_Sig_Handlers code will have something to incorporate!

      ACE_SignalHandler eh = (ACE_SignalHandler) external_handler;
      ACE_Sig_Action sa (eh);

      sa.register_action (SIGINT);
    }

  // Create a bevy of handlers.
  Sig_Handler_1 h1 (reactor, "howdy");
  Sig_Handler_1 h2 (reactor, "doody");
  Sig_Handler_2 h3 (reactor, "tutty");
  Sig_Handler_2 h4 (reactor, "fruity");

  // Wait for user to type SIGINT and SIGQUIT.

  for (;;)
    {
      ACE_DEBUG ((LM_DEBUG,
                  "\nwaiting for SIGINT or SIGQUIT\n"));

      if (reactor.handle_events () == -1)
        ACE_ERROR ((LM_ERROR,
                    "%p\n",
                    "handle_events"));
    }

  ACE_NOTREACHED (return 0);
}
Example #5
0
// Listing 3
// Listing 2 code/ch11
static void register_actions ()
{
  ACE_TRACE ("::register_actions");

  ACE_Sig_Action sa (reinterpret_cast <ACE_SignalHandler> (my_sighandler));

  // Make sure we specify that SIGUSR1 will be masked out
  // during the signal handler's execution.
  ACE_Sig_Set ss;
  ss.sig_add (SIGUSR1);
  sa.mask (ss);

  // Register the same handler function for these
  // two signals.
  sa.register_action (SIGUSR1);
  sa.register_action (SIGUSR2);
}
Example #6
0
int main(int argc, char* argv[]) {

    GameManager* manager = GameManager::instance();
    // Process the command line switches.  Look at every second arg for
    // a recognizable flag.
    const int NAME_FLAG = 0, FILE_FLAG = 1;
    int flag;

    bool parse_error = false;
    string error_msg;

    for (int i = 2; i < argc; i += 2) {
        if (!strcmp("-n", argv[i-1])) flag = NAME_FLAG;
        else if (!strcmp("-f", argv[i-1])) flag = FILE_FLAG;
        else {
            parse_error = true;
            error_msg = "Unknown flag.";
            break;
        }

        if ((argv[i][0] == '-') || (strlen(argv[i]) == 0)) {
            parse_error = true;
            error_msg = "Missing parameter for flag.";
            break;
        }

        switch (flag) {
        case NAME_FLAG:
            manager->name = argv[i];
            break;
        case FILE_FLAG:
            if (manager->parse_file(argv[i]) != 0) {
                parse_error = true;
                error_msg = "Could not parse defintion file.";
            }
            break;
        }
    }

    if (parse_error) {
        std::cout << "ERROR: " << error_msg << std::endl;
        std::cout << "Usage: client -n <player name> -f <definition file> " << std::endl;
        return -1;
    }

    PlayerConnector player_connector(ACE_Reactor::instance());

    // keep track of the number of open connections so we can
    // kill the client if no connections were able to be opened
    int num_open_connections = manager->games.size();

    for (unsigned int i = 0; i < manager->games.size(); ++i) {
        PlayerGame* game = manager->games[i];
        ACE_INET_Addr peer_addr;
        if (peer_addr.set(game->port, game->host.c_str()) == -1) {
            std::cout << "Unable to set server address for " << game->host << ":" << game->port << std::endl;
            num_open_connections--;
            continue;
        }
        peer_addr.addr_to_string (buffer, MTU);
        std::cout << "Address and port: " << buffer << std::endl;

        PlayerSvcHandler* connector_handler = &(game->handler);
        if (player_connector.connect (connector_handler, peer_addr) == -1) {
            std::cout << "Couldn't connect to server.\n" << std::endl;
            num_open_connections--;
        }
    }

    if (num_open_connections == 0) return -1;     // kill the client if no connections were able to be opened

    // Implement signal handler.
    ACE_Sig_Action sa;
    sa.register_action (SIGINT);
    SigHandler sh (ACE_Reactor::instance());

    while (!SigHandler::sigint_fired()) {
        ACE_Reactor::instance()->handle_events();
    }

    if (GameManager::instance() != NULL) {
        delete GameManager::instance();
    }
    return 0;
}