В настоящее время это трудно для GUI обертки bitcoind с помощью RPC-сервер, чтобы определить, когда Bitcoin работает, но до сих пор инициализируется. Это стремится решить это.
Что оно делает:
- Перемещение RPC запуск сервера самого начала.
- Добавление IsInitialized метод.
Изменения, внесенные в Bitcoin / Bitcoin из GitHub
http://pastebin.com/LYtBRXgk
Код:
дифференциал --git а / init.cpp б / init.cpp
Индекс 04bdd68..52cf7a1 100644
--- а / init.cpp
+++ б / init.cpp
@@ -115,6 +115,7 @@ BOOL AppInit (интермедиат ARGC, символ * ARGV [])
} поймать (...) {
PrintException (NULL, "AppInit ()");
}
+ fInitializationCompleted = TRUE;
если (! ладу)
Выключение (NULL);
вернуться ладу;
@@ -122,6 +123,9 @@ BOOL AppInit (интермедиат ARGC, символ * ARGV [])
BOOL AppInit2 (интермедиат ARGC, символ * ARGV [])
{
+ если (GetBoolArg ("-server") || fDaemon)
+ CreateThread (ThreadRPCServer, NULL);
+
#ifdef _MSC_VER
// Отключить Microsoft дамп кучи шума
_CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
@@ -443,9 +447,6 @@ BOOL AppInit2 (интермедиат ARGC, символ * ARGV [])
если (! CreateThread (StartNode, NULL))
wxMessageBox ("Ошибка: CreateThread (StartNode) не", "Bitcoin");
- если (GetBoolArg ("-server") || fDaemon)
- CreateThread (ThreadRPCServer, NULL);
-
#if определен (__ WXMSW__) && определен (GUI),
если (fFirstRun)
SetStartOnSystemStartup (истина);
дифференциал --git а / rpc.cpp б / rpc.cpp
Индекс 69b09bc..72fc9a8 100644
--- а / rpc.cpp
+++ б / rpc.cpp
@@ -28,6 +28,8 @@ ThreadRPCServer2 недействительными (недействительными * PARG);
ЬурейеЕ значение (* rpcfn_type) (Const массива& PARAMS, BOOL fHelp);
ехЬегп карта<Строка, rpcfn_type> mapCallTable;
+BOOL fInitializationCompleted = ложь;
+
Объект JSONRPCError (INT код, Const строка& сообщение)
{
@@ -146,7 +148,6 @@ Value помощь (Const массива& PARAMS, BOOL fHelp)
вернуться strRet;
}
-
Значение остановки (Const массива& PARAMS, BOOL fHelp)
{
если (fHelp || params.size ()! = 0)
@@ -277,18 +278,22 @@ Value GetInfo (Const массива& PARAMS, BOOL fHelp)
Объект OBJ;
obj.push_back (пара ("версия", (INT) версия));
- obj.push_back (пара ("баланс", (Двойной) GetBalance () / (двойной) МОНЕТА));
- obj.push_back (пара ("блоки", (INT) nBestHeight));
- obj.push_back (пара ("связи", (INT) vNodes.size ()));
- obj.push_back (пара ("полномочие"(FUseProxy addrProxy.ToStringIPPort (): строка ())));
- obj.push_back (пара ("генерировать", (BOOL) fGenerateBitcoins));
- obj.push_back (пара ("genproclimit", (INT) (fLimitProcessors nLimitProcessors:? -1)));
- obj.push_back (пара ("трудность", (Дважды) GetDifficulty ()));
- obj.push_back (пара ("hashespersec", Gethashespersec (PARAMS, ложные)));
- obj.push_back (пара ("testnet", FTestNet));
- obj.push_back (пара ("keypoololdest"(Повышение :: int64_t) GetOldestKeyPoolTime ()));
- obj.push_back (пара ("paytxfee", (Двойной) nTransactionFee / (двойной) МОНЕТА));
- obj.push_back (пара ("ошибки", GetWarnings ("статус бар")));
+ obj.push_back (пара ("IsInitialized", (BOOL) fInitializationCompleted));
+ если (fInitializationCompleted)
+ {
+ obj.push_back (пара ("баланс", (Двойной) GetBalance () / (двойной) МОНЕТА));
+ obj.push_back (пара ("блоки", (INT) nBestHeight));
+ obj.push_back (пара ("связи", (INT) vNodes.size ()));
+ obj.push_back (пара ("полномочие"(FUseProxy addrProxy.ToStringIPPort (): строка ())));
+ obj.push_back (пара ("генерировать", (BOOL) fGenerateBitcoins));
+ obj.push_back (пара ("genproclimit", (INT) (fLimitProcessors nLimitProcessors:? -1)));
+ obj.push_back (пара ("трудность", (Дважды) GetDifficulty ()));
+ obj.push_back (пара ("hashespersec", Gethashespersec (PARAMS, ложные)));
+ obj.push_back (пара ("testnet", FTestNet));
+ obj.push_back (пара ("keypoololdest"(Повышение :: int64_t) GetOldestKeyPoolTime ()));
+ obj.push_back (пара ("paytxfee", (Двойной) nTransactionFee / (двойной) МОНЕТА));
+ obj.push_back (пара ("ошибки", GetWarnings ("статус бар")));
+ }
вернуться OBJ;
}
@@ -1806,6 +1811,8 @@ аннулируются ThreadRPCServer2 (недействительными * PARG)
если (valMethod.type ()! = str_type)
бросить JSONRPCError (-32600, "Метод должен быть строкой");
Строка strMethod = valMethod.get_str ();
+ если (! fInitializationCompleted && strMethod! = "Помогите" && strMethod! = "получить данные")
+ бросить JSONRPCError (-42000, "Тем не менее инициализация");
если (strMethod! = "getwork")
Е ("ThreadRPCServer метод =% s \ п", StrMethod.c_str ());
дифференциал --git а / rpc.h б / rpc.h
Индекс 48a7b8a..85c3ef3 100644
--- а / rpc.h
+++ б / rpc.h
@@ -4,3 +4,4 @@
аннулированию ThreadRPCServer (недействительный * PARG);
INT CommandLineRPC (интермедиат ARGC, символ * ARGV []);
+ехЬегп BOOL fInitializationCompleted;
Индекс 04bdd68..52cf7a1 100644
--- а / init.cpp
+++ б / init.cpp
@@ -115,6 +115,7 @@ BOOL AppInit (интермедиат ARGC, символ * ARGV [])
} поймать (...) {
PrintException (NULL, "AppInit ()");
}
+ fInitializationCompleted = TRUE;
если (! ладу)
Выключение (NULL);
вернуться ладу;
@@ -122,6 +123,9 @@ BOOL AppInit (интермедиат ARGC, символ * ARGV [])
BOOL AppInit2 (интермедиат ARGC, символ * ARGV [])
{
+ если (GetBoolArg ("-server") || fDaemon)
+ CreateThread (ThreadRPCServer, NULL);
+
#ifdef _MSC_VER
// Отключить Microsoft дамп кучи шума
_CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
@@ -443,9 +447,6 @@ BOOL AppInit2 (интермедиат ARGC, символ * ARGV [])
если (! CreateThread (StartNode, NULL))
wxMessageBox ("Ошибка: CreateThread (StartNode) не", "Bitcoin");
- если (GetBoolArg ("-server") || fDaemon)
- CreateThread (ThreadRPCServer, NULL);
-
#if определен (__ WXMSW__) && определен (GUI),
если (fFirstRun)
SetStartOnSystemStartup (истина);
дифференциал --git а / rpc.cpp б / rpc.cpp
Индекс 69b09bc..72fc9a8 100644
--- а / rpc.cpp
+++ б / rpc.cpp
@@ -28,6 +28,8 @@ ThreadRPCServer2 недействительными (недействительными * PARG);
ЬурейеЕ значение (* rpcfn_type) (Const массива& PARAMS, BOOL fHelp);
ехЬегп карта<Строка, rpcfn_type> mapCallTable;
+BOOL fInitializationCompleted = ложь;
+
Объект JSONRPCError (INT код, Const строка& сообщение)
{
@@ -146,7 +148,6 @@ Value помощь (Const массива& PARAMS, BOOL fHelp)
вернуться strRet;
}
-
Значение остановки (Const массива& PARAMS, BOOL fHelp)
{
если (fHelp || params.size ()! = 0)
@@ -277,18 +278,22 @@ Value GetInfo (Const массива& PARAMS, BOOL fHelp)
Объект OBJ;
obj.push_back (пара ("версия", (INT) версия));
- obj.push_back (пара ("баланс", (Двойной) GetBalance () / (двойной) МОНЕТА));
- obj.push_back (пара ("блоки", (INT) nBestHeight));
- obj.push_back (пара ("связи", (INT) vNodes.size ()));
- obj.push_back (пара ("полномочие"(FUseProxy addrProxy.ToStringIPPort (): строка ())));
- obj.push_back (пара ("генерировать", (BOOL) fGenerateBitcoins));
- obj.push_back (пара ("genproclimit", (INT) (fLimitProcessors nLimitProcessors:? -1)));
- obj.push_back (пара ("трудность", (Дважды) GetDifficulty ()));
- obj.push_back (пара ("hashespersec", Gethashespersec (PARAMS, ложные)));
- obj.push_back (пара ("testnet", FTestNet));
- obj.push_back (пара ("keypoololdest"(Повышение :: int64_t) GetOldestKeyPoolTime ()));
- obj.push_back (пара ("paytxfee", (Двойной) nTransactionFee / (двойной) МОНЕТА));
- obj.push_back (пара ("ошибки", GetWarnings ("статус бар")));
+ obj.push_back (пара ("IsInitialized", (BOOL) fInitializationCompleted));
+ если (fInitializationCompleted)
+ {
+ obj.push_back (пара ("баланс", (Двойной) GetBalance () / (двойной) МОНЕТА));
+ obj.push_back (пара ("блоки", (INT) nBestHeight));
+ obj.push_back (пара ("связи", (INT) vNodes.size ()));
+ obj.push_back (пара ("полномочие"(FUseProxy addrProxy.ToStringIPPort (): строка ())));
+ obj.push_back (пара ("генерировать", (BOOL) fGenerateBitcoins));
+ obj.push_back (пара ("genproclimit", (INT) (fLimitProcessors nLimitProcessors:? -1)));
+ obj.push_back (пара ("трудность", (Дважды) GetDifficulty ()));
+ obj.push_back (пара ("hashespersec", Gethashespersec (PARAMS, ложные)));
+ obj.push_back (пара ("testnet", FTestNet));
+ obj.push_back (пара ("keypoololdest"(Повышение :: int64_t) GetOldestKeyPoolTime ()));
+ obj.push_back (пара ("paytxfee", (Двойной) nTransactionFee / (двойной) МОНЕТА));
+ obj.push_back (пара ("ошибки", GetWarnings ("статус бар")));
+ }
вернуться OBJ;
}
@@ -1806,6 +1811,8 @@ аннулируются ThreadRPCServer2 (недействительными * PARG)
если (valMethod.type ()! = str_type)
бросить JSONRPCError (-32600, "Метод должен быть строкой");
Строка strMethod = valMethod.get_str ();
+ если (! fInitializationCompleted && strMethod! = "Помогите" && strMethod! = "получить данные")
+ бросить JSONRPCError (-42000, "Тем не менее инициализация");
если (strMethod! = "getwork")
Е ("ThreadRPCServer метод =% s \ п", StrMethod.c_str ());
дифференциал --git а / rpc.h б / rpc.h
Индекс 48a7b8a..85c3ef3 100644
--- а / rpc.h
+++ б / rpc.h
@@ -4,3 +4,4 @@
аннулированию ThreadRPCServer (недействительный * PARG);
INT CommandLineRPC (интермедиат ARGC, символ * ARGV []);
+ехЬегп BOOL fInitializationCompleted;
PS плз добавить .patch разрешенным вложения
PSS загрузки папка заполнена! я не могу загрузить патч-файл.