18 #include <boost/algorithm/string/predicate.hpp> 19 #include <boost/filesystem.hpp> 20 #include <boost/thread.hpp> 54 threadGroup->join_all();
64 boost::thread_group threadGroup;
78 std::string strUsage =
_(
"Dash Core Daemon") +
" " +
_(
"version") +
" " +
FormatFullVersion() +
"\n";
86 strUsage +=
"\n" +
_(
"Usage:") +
"\n" +
87 " dashd [options] " +
_(
"Start Dash Core Daemon") +
"\n";
92 fprintf(
stdout,
"%s", strUsage.c_str());
98 bool datadirFromCmdLine =
mapArgs.count(
"-datadir") != 0;
99 if (datadirFromCmdLine && !boost::filesystem::is_directory(
GetDataDir(
false)))
101 fprintf(
stderr,
"Error: Specified data directory \"%s\" does not exist.\n",
mapArgs[
"-datadir"].c_str());
107 }
catch (
const std::exception& e) {
108 fprintf(
stderr,
"Error reading configuration file: %s\n", e.what());
111 if (!datadirFromCmdLine && !boost::filesystem::is_directory(
GetDataDir(
false)))
113 fprintf(
stderr,
"Error: Specified data directory \"%s\" from config file does not exist.\n",
mapArgs[
"-datadir"].c_str());
119 }
catch (
const std::exception& e) {
120 fprintf(
stderr,
"Error: %s\n", e.what());
127 fprintf(
stderr,
"Error reading masternode configuration file: %s\n", strErr.c_str());
132 bool fCommandLine =
false;
133 for (
int i = 1; i < argc; i++)
134 if (!
IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i],
"dash:"))
139 fprintf(
stderr,
"Error: There is no RPC client functionality in dashd anymore. Use the dash-cli utility instead.\n");
146 fprintf(
stdout,
"Dash Core server starting\n");
152 fprintf(
stderr,
"Error: fork() returned %d errno %d\n", pid, errno);
161 pid_t sid = setsid();
163 fprintf(
stderr,
"Error: setsid() returned %d errno %d\n", sid, errno);
171 fRet =
AppInit2(threadGroup, scheduler);
173 catch (
const std::exception& e) {
193 int main(
int argc,
char* argv[])
200 return (
AppInit(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE);
const boost::filesystem::path & GetDataDir(bool fNetSpecific)
bool AppInit2(boost::thread_group &threadGroup, CScheduler &scheduler)
void InitLogging()
Initialize the logging infrastructure.
CMasternodeConfig masternodeConfig
void MilliSleep(int64_t n)
bool SoftSetBoolArg(const std::string &strArg, bool fValue)
bool read(std::string &strErr)
void PrintExceptionContinue(const std::exception *pex, const char *pszThread)
int main(int argc, char *argv[])
std::string LicenseInfo()
std::string HelpMessage(HelpMessageMode mode)
void InitParameterInteraction()
Parameter interaction: change current parameters depending on various rules.
bool GetBoolArg(const std::string &strArg, bool fDefault)
void WaitForShutdown(boost::thread_group *threadGroup)
void Interrupt(boost::thread_group &threadGroup)
void SelectParams(const std::string &network)
bool AppInit(int argc, char *argv[])
void ParseParameters(int argc, const char *const argv[])
std::string FormatFullVersion()
bool IsSwitchChar(char c)
void ReadConfigFile(map< string, string > &mapSettingsRet, map< string, vector< string > > &mapMultiSettingsRet)
std::string ChainNameFromCommandLine()
map< string, vector< string > > mapMultiArgs
std::string _(const char *psz)
map< string, string > mapArgs