blob: 0c717a35e6f7d327bafef4b479427b015afa0662 (
plain)
1 ////////////////////////////////////////////////////////////////////////
2 // FILE: signaldispatcher.cpp
3 // AUTHOR: Johannes Winkelmann, jw@tks6.net
4 // COPYRIGHT: (c) 2002 by Johannes Winkelmann
5 // ---------------------------------------------------------------------
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 ////////////////////////////////////////////////////////////////////////
11
12 #include <iostream>
13 #include <cstdlib>
14 using namespace std;
15
16 #include "signaldispatcher.h"
17
18 SignalDispatcher* SignalDispatcher::m_instance = 0;
19
20 SignalDispatcher::SignalDispatcher()
21 {
22
23 }
24
25 SignalDispatcher* SignalDispatcher::instance()
26 {
27 if ( m_instance == 0 ) {
28 m_instance = new SignalDispatcher();
29 }
30
31 return m_instance;
32 }
33
34 void SignalDispatcher::dispatch( int signalNumber )
35 {
36 map<int, SignalHandler*>::iterator it =
37 SignalDispatcher::instance()->m_signalHandlers.find( signalNumber );
38 if ( it != SignalDispatcher::instance()->m_signalHandlers.end() ) {
39 it->second->handleSignal( signalNumber );
40 } else {
41 cerr << "prt-get: caught signal " << signalNumber << endl;
42 }
43 exit( signalNumber );
44 }
45
46 void SignalDispatcher::registerHandler( SignalHandler* handler,
47 int signalNumber )
48 {
49 m_signalHandlers[signalNumber] = handler;
50 }
51
52 void SignalDispatcher::unregisterHandler( int signalNumber )
53 {
54 m_signalHandlers.erase( signalNumber );
55 }
|