diff options
author | sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-02-04 15:31:46 +0000 |
---|---|---|
committer | sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-02-04 15:31:46 +0000 |
commit | 082e725b33addda32ec4b31eba60b47f0dc6879f (patch) | |
tree | 17f221a28133394f5a0cd0931ceadf0eaa463cb4 | |
parent | 53d508072b02d522371bde148dcc3e925f472be7 (diff) |
Added some basic IPC functionality using wxServer, wxClient and wxConnection.
Added the -blockamount command line option for an example of usage.
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@56 1a98c847-1fd6-4fd8-948a-caf3550aa51b
-rw-r--r-- | headers.h | 3 | ||||
-rw-r--r-- | ipc.cpp | 33 | ||||
-rw-r--r-- | ipc.h | 28 | ||||
-rw-r--r-- | makefile | 4 | ||||
-rw-r--r-- | makefile.unix.wx2.8 | 5 | ||||
-rw-r--r-- | makefile.unix.wx2.9 | 7 | ||||
-rw-r--r-- | ui.cpp | 29 |
7 files changed, 101 insertions, 8 deletions
@@ -24,6 +24,8 @@ #include <wx/taskbar.h>
#include <wx/stdpaths.h>
#include <wx/utils.h>
+#include <wx/ipc.h>
+#include <wx/ipcbase.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
@@ -102,6 +104,7 @@ using namespace boost; #include "market.h"
#include "uibase.h"
#include "ui.h"
+#include "ipc.h"
#include "xpm/addressbook16.xpm"
#include "xpm/addressbook20.xpm"
diff --git a/ipc.cpp b/ipc.cpp new file mode 100644 index 0000000000..86e57674e2 --- /dev/null +++ b/ipc.cpp @@ -0,0 +1,33 @@ +/* + * Inter-process calling functionality + */ + +#include "headers.h" + +wxConnectionBase * CServer::OnAcceptConnection (const wxString &topic) { + return new CServerConnection; +} + +wxConnectionBase * CClient::OnMakeConnection () { + return new CClientConnection; +} + +// For request based handling +const void * CServerConnection::OnRequest (const wxString &topic, const wxString &item, size_t *size, wxIPCFormat format) { + const char * output; + + if (item == "blockamount") { + stringstream stream; + stream << nBestHeight + 1; + output = stream.str().c_str(); + } + else + output = "Unknown identifier"; + + return output; +} + +// For event based handling +bool CClientConnection::OnAdvise (const wxString &topic, const wxString &item, const void *data, size_t size, wxIPCFormat format) { + return false; +}
\ No newline at end of file @@ -0,0 +1,28 @@ +#ifndef _IPC_H +#define _IPC_H + +class CServer : public wxServer { +public: + wxConnectionBase * OnAcceptConnection (const wxString &topic); +}; + +class CClient : public wxClient { +public: + wxConnectionBase * OnMakeConnection (); +}; + +class CServerConnection : public wxConnection { +public: + const void * OnRequest (const wxString &topic, const wxString &item, size_t *size, wxIPCFormat format); +}; + +class CClientConnection : public wxConnection { +public: + CClientConnection() : wxConnection() {} + ~CClientConnection() {} + + bool OnAdvise (const wxString &topic, const wxString &item, const void *data, size_t size, wxIPCFormat format); +}; + +#endif /* _IPC_H */ + @@ -67,10 +67,12 @@ obj/irc.o: irc.cpp $(HEADERS) obj/ui_res.o: ui.rc rc/bitcoin.ico rc/check.ico rc/send16.bmp rc/send16mask.bmp rc/send16masknoshadow.bmp rc/send20.bmp rc/send20mask.bmp rc/addressbook16.bmp rc/addressbook16mask.bmp rc/addressbook20.bmp rc/addressbook20mask.bmp
windres $(WXDEFS) $(INCLUDEPATHS) -o $@ -i $<
+obj/ipc.o: ipc.cpp $(HEADERS)
+ g++ -c $(CFLAGS) -o $@ $<
OBJS=obj/util.o obj/script.o obj/db.o obj/net.o obj/main.o obj/market.o \
- obj/ui.o obj/uibase.o obj/sha.o obj/irc.o obj/ui_res.o
+ obj/ui.o obj/uibase.o obj/sha.o obj/irc.o obj/ui_res.o obj/ipc.o
bitcoin.exe: headers.h.gch $(OBJS)
-kill /f bitcoin.exe
diff --git a/makefile.unix.wx2.8 b/makefile.unix.wx2.8 index b9826d6ccb..899ce29543 100644 --- a/makefile.unix.wx2.8 +++ b/makefile.unix.wx2.8 @@ -75,11 +75,12 @@ obj/sha.o: sha.cpp sha.h obj/irc.o: irc.cpp $(HEADERS)
g++ -c $(CFLAGS) -o $@ $<
-
+obj/ipc.o: ipc.cpp $(HEADERS)
+ g++ -c $(CFLAGS) -o $@ $<
OBJS=obj/util.o obj/script.o obj/db.o obj/net.o obj/main.o obj/market.o \
- obj/ui.o obj/uibase.o obj/sha.o obj/irc.o
+ obj/ui.o obj/uibase.o obj/sha.o obj/irc.o obj/ipc.o
bitcoin: headers.h.gch $(OBJS)
g++ $(CFLAGS) -o $@ $(LIBPATHS) $(OBJS) $(LIBS)
diff --git a/makefile.unix.wx2.9 b/makefile.unix.wx2.9 index 81dcbd70e9..d2c4eb5ea1 100644 --- a/makefile.unix.wx2.9 +++ b/makefile.unix.wx2.9 @@ -31,7 +31,7 @@ LIBS= \ -l wx_gtk2u$(D)-2.9 \
-Wl,-Bdynamic \
-l crypto \
- -l gtk-x11-2.0 -l gthread-2.0 -l SM
+ -l gtk-x11-2.0 -l gthread-2.0 -l SM \
WXDEFS=-D__WXGTK__ -DNOPCH
CFLAGS=-O0 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(WXDEFS) $(INCLUDEPATHS)
@@ -75,11 +75,12 @@ obj/sha.o: sha.cpp sha.h obj/irc.o: irc.cpp $(HEADERS)
g++ -c $(CFLAGS) -o $@ $<
-
+obj/ipc.o: ipc.cpp $(HEADERS)
+ g++ -c $(CFLAGS) -o $@ $<
OBJS=obj/util.o obj/script.o obj/db.o obj/net.o obj/main.o obj/market.o \
- obj/ui.o obj/uibase.o obj/sha.o obj/irc.o
+ obj/ui.o obj/uibase.o obj/sha.o obj/irc.o obj/ipc.o
bitcoin: headers.h.gch $(OBJS)
g++ $(CFLAGS) -o $@ $(LIBPATHS) $(OBJS) $(LIBS)
@@ -21,6 +21,7 @@ DEFINE_EVENT_TYPE(wxEVT_REPLY3) CMainFrame* pframeMain = NULL;
CMyTaskBarIcon* ptaskbaricon = NULL;
+CServer* pserver = NULL;
map<string, string> mapAddressBook;
bool fRandSendTest = false;
void RandSend();
@@ -384,6 +385,8 @@ CMainFrame::~CMainFrame() pframeMain = NULL;
delete ptaskbaricon;
ptaskbaricon = NULL;
+ delete pserver;
+ pserver = NULL;
}
void ExitTimeout(void* parg)
@@ -1687,8 +1690,8 @@ CAboutDialog::CAboutDialog(wxWindow* parent) : CAboutDialogBase(parent) #if !wxUSE_UNICODE
// Workaround until upgrade to wxWidgets supporting UTF-8
wxString str = m_staticTextMain->GetLabel();
- if (str.Find('Â') != wxNOT_FOUND)
- str.Remove(str.Find('Â'), 1);
+ if (str.Find('�') != wxNOT_FOUND)
+ str.Remove(str.Find('�'), 1);
m_staticTextMain->SetLabel(str);
#endif
#ifndef __WXMSW__
@@ -3548,6 +3551,26 @@ bool CMyApp::OnInit2() return false;
}
+ if (mapArgs.count("-blockamount")) {
+ CClient client;
+ wxString hostname = "localhost";
+ wxString server = GetDataDir() + "service";
+ CClientConnection * pconnection = (CClientConnection *)client.MakeConnection(hostname, server, "ipc test");
+ string output = "";
+ if (pconnection) {
+ char * pbuffer = (char *)pconnection->Request("blockamount");
+ while (*pbuffer != '\n') {
+ output += *pbuffer;
+ pbuffer++;
+ }
+ }
+ else {
+ output = "Cannot access Bitcoin. Are you sure the program is running?\n";
+ }
+ fprintf(stderr, "%s", output.c_str());
+ return false;
+ }
+
if (mapArgs.count("-datadir"))
strlcpy(pszSetDataDir, mapArgs["-datadir"].c_str(), sizeof(pszSetDataDir));
@@ -3755,6 +3778,8 @@ bool CMyApp::OnInit2() if (fFirstRun)
SetStartOnSystemStartup(true);
+ pserver = new CServer;
+ pserver->Create(GetDataDir() + "service");
//
// Tests
|