00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef http_cache_interrupt_handler_h
00027 #define http_cache_interrupt_handler_h
00028
00029 #include <signal.h>
00030
00031 #include <cassert>
00032 #include <iostream>
00033 #include <algorithm>
00034
00035 #include "HTTPCache.h"
00036 #include "EventHandler.h"
00037 #include "debug.h"
00038
00039 namespace libdap
00040 {
00041
00042 static void
00043 unlink_file(const string &f)
00044 {
00045 unlink(f.c_str());
00046 }
00047
00057 class HTTPCacheInterruptHandler : public EventHandler
00058 {
00059 private:
00060
00061 public:
00063 HTTPCacheInterruptHandler()
00064 {}
00065
00067 virtual ~HTTPCacheInterruptHandler()
00068 {}
00069
00077 virtual void handle_signal(int signum)
00078 {
00079 assert(signum == SIGINT);
00080 DBG(cerr << "Inside the HTTPCacheInterruptHandler." << endl);
00081
00082 vector<string> *of = &HTTPCache::_instance->d_open_files;
00083
00084 DBG(copy(of->begin(), of->end(),
00085 ostream_iterator<string>(cerr, "\n")));
00086
00087 for_each(of->begin(), of->end(), unlink_file);
00088
00089 HTTPCache::delete_instance();
00090 }
00091 };
00092
00093 }
00094
00095 #endif // http_cache_interrupt_handler_h