upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/main_gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_gui.cpp')
-rw-r--r--src/main_gui.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/main_gui.cpp b/src/main_gui.cpp
new file mode 100644
index 0000000..b7377da
--- /dev/null
+++ b/src/main_gui.cpp
@@ -0,0 +1,169 @@
1// Bitflash entry point — starts node threads then runs GUI (or headless).
2
3#include "headers_core.h"
4#ifndef _WIN32
5#include <csignal>
6#endif
7
8int RunGUI(int argc, char* argv[]);
9
10// Global definitions (were in ui.cpp, now here)
11map<string,string> mapAddressBook;
12bool gPoolServerRunning = false;
13
14static bool arg(int argc, char* argv[], const char* key)
15{
16 for (int i=1;i<argc;i++) { string s=argv[i]; if(s==key||s.substr(0,s.find('='))==key) return true; }
17 return false;
18}
19static string argval(int argc, char* argv[], const char* key)
20{
21 for (int i=1;i<argc;i++) {
22 string s=argv[i]; size_t eq=s.find('=');
23 if(eq!=string::npos && s.substr(0,eq)==key) return s.substr(eq+1);
24 }
25 return "";
26}
27
28static string argval2(int argc, char* argv[], const char* keySlash, const char* keyDash)
29{
30 string v = argval(argc, argv, keySlash);
31 if (!v.empty())
32 return v;
33 return argval(argc, argv, keyDash);
34}
35
36static void PrintUsage()
37{
38 printf("Bitflash command-line options\n");
39 printf("\n");
40 printf("General:\n");
41 printf(" /help, -help, --help, /?\n");
42 printf(" /datadir=PATH\n");
43 printf(" /debug\n");
44 printf(" /gen\n");
45 printf(" /nogui or /daemon\n");
46 printf("\n");
47 printf("Mining mode:\n");
48 printf(" /operator\n");
49 printf(" /participant=POOL_BTF_ADDRESS\n");
50 printf(" /solomine\n");
51 printf("\n");
52 printf("Pool operator announcement:\n");
53 printf(" /poolname=NAME\n");
54 printf(" /poolfee=PCT\n");
55 printf(" /pooldashboard=URL (alias: /pooldash=URL)\n");
56 printf("\n");
57 printf(".btf and rendezvous:\n");
58 printf(" /connectbtf=PEER_BTF_ADDRESS\n");
59 printf(" /rvrelay=HOST:PORT\n");
60 printf(" /announcerelay=HOST:PORT\n");
61 printf("\n");
62 printf("Each option also accepts '-' instead of '/'.\n");
63}
64
65static void ParseStartupArguments(int argc, char* argv[])
66{
67 if (arg(argc,argv,"/datadir") || arg(argc,argv,"-datadir"))
68 strSetDataDir = argval2(argc, argv, "/datadir", "-datadir");
69
70 if (arg(argc,argv,"/debug") || arg(argc,argv,"-debug"))
71 fDebug = true;
72
73 if (arg(argc,argv,"/gen") || arg(argc,argv,"-gen"))
74 fGenerateBitcoins = 1;
75
76 if (arg(argc,argv,"/solomine") || arg(argc,argv,"-solomine"))
77 fSoloMineTest = true;
78
79 if (arg(argc,argv,"/operator") || arg(argc,argv,"-operator"))
80 nMineMode = MINE_OPERATOR;
81
82 if (arg(argc,argv,"/participant") || arg(argc,argv,"-participant"))
83 {
84 nMineMode = MINE_PARTICIPANT;
85 strParticipantPool = argval2(argc, argv, "/participant", "-participant");
86 }
87
88 string poolName = argval2(argc, argv, "/poolname", "-poolname");
89 if (!poolName.empty())
90 strPoolName = poolName;
91
92 string poolDash = argval2(argc, argv, "/pooldashboard", "-pooldashboard");
93 if (poolDash.empty())
94 poolDash = argval2(argc, argv, "/pooldash", "-pooldash");
95 if (!poolDash.empty())
96 strPoolDashboardUrl = poolDash;
97
98 string poolFee = argval2(argc, argv, "/poolfee", "-poolfee");
99 if (!poolFee.empty())
100 dPoolFeePercent = atof(poolFee.c_str());
101
102 string btfConnect = argval2(argc, argv, "/connectbtf", "-connectbtf");
103 if (!btfConnect.empty())
104 strBtfConnect = btfConnect;
105
106 string rvRelay = argval2(argc, argv, "/rvrelay", "-rvrelay");
107 if (!rvRelay.empty())
108 {
109 vBtfMeetingRelays.clear();
110 vBtfMeetingRelays.push_back(rvRelay);
111 }
112
113 string announceRelay = argval2(argc, argv, "/announcerelay", "-announcerelay");
114 if (!announceRelay.empty())
115 strBtfAnnounceRelay = announceRelay;
116}
117
118int main(int argc, char* argv[])
119{
120 if (arg(argc,argv,"/help") || arg(argc,argv,"-help") ||
121 arg(argc,argv,"--help") || arg(argc,argv,"/?"))
122 {
123 PrintUsage();
124 return 0;
125 }
126
127 ParseStartupArguments(argc, argv);
128
129 printf("Loading addresses...\n");
130 if (!LoadAddresses()) printf("Warning: error loading addr.dat\n");
131 printf("Loading block index...\n");
132 string strErrors;
133 if (!LoadBlockIndex()) { fprintf(stderr,"LoadBlockIndex failed\n"); return 1; }
134 printf("Loading wallet...\n");
135 if (!LoadWallet()) { fprintf(stderr,"LoadWallet failed\n"); return 1; }
136 printf("Height=%d\n", nBestHeight);
137 ReacceptWalletTransactions();
138
139 if (!StartNode(strErrors)) { fprintf(stderr,"StartNode: %s\n",strErrors.c_str()); return 1; }
140
141 if (nMineMode == MINE_OPERATOR) {
142 gPoolServerRunning = true;
143 gPoolRunning = true;
144 if (_beginthread(ThreadRPCServer, 0, NULL) == (uintptr_t)-1)
145 printf("Error: _beginthread(ThreadRPCServer) failed\n");
146 }
147 if (fGenerateBitcoins)
148 if (_beginthread(ThreadBitcoinMiner, 0, NULL) == (uintptr_t)-1)
149 printf("Error: _beginthread(ThreadBitcoinMiner) failed\n");
150
151 bool fHeadless = arg(argc,argv,"/nogui") || arg(argc,argv,"-nogui") ||
152 arg(argc,argv,"/daemon") || arg(argc,argv,"-daemon");
153
154 if (fHeadless) {
155#ifndef _WIN32
156 auto sig=[](int){fShutdown=true;};
157 signal(SIGINT,sig); signal(SIGTERM,sig);
158#endif
159 printf("Running headless. Ctrl-C to stop.\n");
160 while (!fShutdown) Sleep(500);
161 StopNode();
162 return 0;
163 }
164
165 int ret = RunGUI(argc, argv);
166 fShutdown = true;
167 StopNode();
168 return ret;
169}