blob: e71793b0b43dd1af6f01cf68f0dbd69b30435453 (
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 using namespace std;
14
15 #include "signaldispatcher.h"
16
17 SignalDispatcher* SignalDispatcher::m_instance = 0;
18
19 SignalDispatcher::SignalDispatcher()
20 {
21
22 }
23
24 SignalDispatcher* SignalDispatcher::instance()
25 {
26 if ( m_instance == 0 ) {
27 m_instance = new SignalDispatcher();
28 }
29
30 return m_instance;
31 }
32
33 void SignalDispatcher::dispatch( int signalNumber )
34 {
35 map<int, SignalHandler*>::iterator it =
36 SignalDispatcher::instance()->m_signalHandlers.find( signalNumber );
37 if ( it != SignalDispatcher::instance()->m_signalHandlers.end() ) {
38 it->second->handleSignal( signalNumber );
39 } else {
40 cerr << "prt-get: caught signal " << signalNumber << endl;
41 }
42 exit( signalNumber );
43 }
44
45 void SignalDispatcher::registerHandler( SignalHandler* handler,
46 int signalNumber )
47 {
48 m_signalHandlers[signalNumber] = handler;
49 }
50
51 void SignalDispatcher::unregisterHandler( int signalNumber )
52 {
53 m_signalHandlers.erase( signalNumber );
54 }
|