Changeset 1849
- Timestamp:
- 21/09/2007 20:48:23 (4 years ago)
- Location:
- box/chris/general/lib/server
- Files:
-
- 2 edited
-
Daemon.cpp (modified) (5 diffs)
-
Daemon.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
box/chris/general/lib/server/Daemon.cpp
r1834 r1849 51 51 mSingleProcess(false), 52 52 mRunInForeground(false), 53 mKeepConsoleOpenAfterFork(false) 53 mKeepConsoleOpenAfterFork(false), 54 mHaveConfigFile(false); 54 55 { 55 56 if(spDaemon != NULL) … … 88 89 // 89 90 // Function 91 // Name: Daemon::GetOptionString() 92 // Purpose: Returns the valid Getopt command-line options. 93 // This should be overridden by subclasses to add 94 // their own options, which should override 95 // ProcessOption, handle their own, and delegate to 96 // ProcessOption for the standard options. 97 // Created: 2007/09/18 98 // 99 // -------------------------------------------------------------------------- 100 std::string Daemon::GetOptionString() 101 { 102 return "c:DFqvVt:Tk"; 103 } 104 105 // -------------------------------------------------------------------------- 106 // 107 // Function 108 // Name: Daemon::ProcessOption(int option) 109 // Purpose: Processes the supplied option (equivalent to the 110 // return code from getopt()). Return zero if the 111 // option was handled successfully, or nonzero to 112 // abort the program with that return value. 113 // Created: 2007/09/18 114 // 115 // -------------------------------------------------------------------------- 116 int Daemon::ProcessOption(signed int option) 117 { 118 switch(option) 119 { 120 case 'c': 121 { 122 mConfigFileName = optarg; 123 mHaveConfigFile = true; 124 } 125 break; 126 127 case 'D': 128 { 129 mSingleProcess = true; 130 } 131 break; 132 133 case 'F': 134 { 135 mRunInForeground = true; 136 } 137 break; 138 139 case 'q': 140 { 141 if(mLogLevel == Log::NOTHING) 142 { 143 BOX_FATAL("Too many '-q': " 144 "Cannot reduce logging " 145 "level any more"); 146 return 2; 147 } 148 mLogLevel--; 149 } 150 break; 151 152 case 'v': 153 { 154 if(mLogLevel == Log::EVERYTHING) 155 { 156 BOX_FATAL("Too many '-v': " 157 "Cannot increase logging " 158 "level any more"); 159 return 2; 160 } 161 mLogLevel++; 162 } 163 break; 164 165 case 'V': 166 { 167 mLogLevel = Log::EVERYTHING; 168 } 169 break; 170 171 case 't': 172 { 173 Console::SetTag(optarg); 174 } 175 break; 176 177 case 'T': 178 { 179 Console::SetShowTime(true); 180 } 181 break; 182 183 case 'k': 184 { 185 mKeepConsoleOpenAfterFork = true; 186 } 187 break; 188 189 case '?': 190 { 191 BOX_FATAL("Unknown option on command line: " 192 << "'" << (char)optopt << "'"); 193 return 2; 194 } 195 break; 196 197 default: 198 { 199 BOX_FATAL("Unknown error in getopt: returned " 200 << "'" << option << "'"); 201 return 1; 202 } 203 } 204 205 return 0; 206 } 207 208 // -------------------------------------------------------------------------- 209 // 210 // Function 90 211 // Name: Daemon::Main(const char *, int, const char *[]) 91 212 // Purpose: Parses command-line options, and then calls … … 99 220 // Find filename of config file 100 221 mConfigFileName = DefaultConfigFile; 101 bool haveConfigFile = false;102 222 103 223 #ifdef NDEBUG 104 int masterLevel = Log::NOTICE; // need an int to do math with224 mLogLevel = Log::NOTICE; // need an int to do math with 105 225 #else 106 int masterLevel = Log::INFO; // need an int to do math with226 mLogLevel = Log::INFO; // need an int to do math with 107 227 #endif 108 228 … … 119 239 #endif 120 240 121 while((c = getopt(argc, (char * const *)argv, "c:DFqvVt:Tk")) != -1) 122 { 123 switch(c) 124 { 125 case 'c': 126 { 127 mConfigFileName = optarg; 128 haveConfigFile = true; 129 } 130 break; 131 132 case 'D': 133 { 134 mSingleProcess = true; 135 } 136 break; 137 138 case 'F': 139 { 140 mRunInForeground = true; 141 } 142 break; 143 144 case 'q': 145 { 146 if(masterLevel == Log::NOTHING) 147 { 148 BOX_FATAL("Too many '-q': " 149 "Cannot reduce logging " 150 "level any more"); 151 return 2; 152 } 153 masterLevel--; 154 } 155 break; 156 157 case 'v': 158 { 159 if(masterLevel == Log::EVERYTHING) 160 { 161 BOX_FATAL("Too many '-v': " 162 "Cannot increase logging " 163 "level any more"); 164 return 2; 165 } 166 masterLevel++; 167 } 168 break; 169 170 case 'V': 171 { 172 masterLevel = Log::EVERYTHING; 173 } 174 break; 175 176 case 't': 177 { 178 Console::SetTag(optarg); 179 } 180 break; 181 182 case 'T': 183 { 184 Console::SetShowTime(true); 185 } 186 break; 187 188 case 'k': 189 { 190 mKeepConsoleOpenAfterFork = true; 191 } 192 break; 193 194 case '?': 195 { 196 BOX_FATAL("Unknown option on command line: " 197 << "'" << (char)optopt << "'"); 198 return 2; 199 } 200 break; 201 202 default: 203 { 204 BOX_FATAL("Unknown error in getopt: returned " 205 << "'" << c << "'"); 206 return 1; 207 } 208 } 209 } 210 211 if (argc > optind && !haveConfigFile) 241 while((c = getopt(argc, (char * const *)argv, 242 GetOptionString().c_str())) != -1) 243 { 244 int returnCode = ProcessOption(c); 245 246 if (returnCode != 0) 247 { 248 return returnCode; 249 } 250 } 251 252 if (argc > optind && !mHaveConfigFile) 212 253 { 213 254 mConfigFileName = argv[optind]; optind++; … … 226 267 } 227 268 228 Logging::SetGlobalLevel((Log::Level)m asterLevel);269 Logging::SetGlobalLevel((Log::Level)mLogLevel); 229 270 230 271 return Main(mConfigFileName); -
box/chris/general/lib/server/Daemon.h
r1741 r1849 68 68 box_time_t GetLoadedConfigModifiedTime() const; 69 69 bool IsSingleProcess() { return mSingleProcess; } 70 std::string GetOptionString(); 71 int ProcessOption(signed int option); 70 72 71 73 private: … … 73 75 box_time_t GetConfigFileModifiedTime() const; 74 76 75 private:76 77 std::string mConfigFileName; 77 78 Configuration *mpConfiguration; … … 82 83 bool mRunInForeground; 83 84 bool mKeepConsoleOpenAfterFork; 85 bool mHaveConfigFile; 86 int mLogLevel; // need an int to do math with 84 87 static Daemon *spDaemon; 85 88 };
Note: See TracChangeset
for help on using the changeset viewer.
