// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#define ID_START 10000
-#define ID_DISCONNECT 10001
-#define ID_ADVISE 10002
-#define ID_LOG 10003
-#define ID_SERVERNAME 10004
+#include "connection.h"
+
+enum
+{
+ ID_START = 10000,
+ ID_DISCONNECT,
+ ID_ADVISE,
+ ID_SERVERNAME,
+};
// Define a new application
class MyServer;
-class MyConnection;
class MyFrame;
class MyApp : public wxApp
{
public:
virtual bool OnInit();
- virtual int OnExit();
- MyFrame *GetFrame() { return m_frame; };
+ MyFrame *GetFrame() { return m_frame; }
protected:
- MyFrame *m_frame;
+ MyFrame *m_frame;
};
DECLARE_APP(MyApp)
public:
MyFrame(wxFrame *frame, const wxString& title);
- void OnExit(wxCommandEvent& event);
void OnClose(wxCloseEvent& event);
- void Enable();
+ void UpdateUI();
void Disconnect();
protected:
wxChoice* GetServername() { return (wxChoice*) FindWindow( ID_SERVERNAME ); }
wxButton* GetDisconnect() { return (wxButton*) FindWindow( ID_DISCONNECT ); }
wxButton* GetAdvise() { return (wxButton*) FindWindow( ID_ADVISE ); }
- wxTextCtrl* GetLog() { return (wxTextCtrl*) FindWindow( ID_LOG ); }
- MyServer *m_server;
+ MyServer *m_server;
void OnStart( wxCommandEvent &event );
void OnServerName( wxCommandEvent &event );
DECLARE_EVENT_TABLE()
};
-class MyConnection : public wxConnection
+class MyConnection : public MyConnectionBase
{
public:
- MyConnection();
- ~MyConnection();
-
- virtual bool OnExecute(const wxString& topic, wxChar *data, int size, wxIPCFormat format);
- virtual wxChar *OnRequest(const wxString& topic, const wxString& item, int *size, wxIPCFormat format);
- virtual bool OnPoke(const wxString& topic, const wxString& item, wxChar *data, int size, wxIPCFormat format);
+ virtual bool OnExecute(const wxString& topic, const void *data, size_t size, wxIPCFormat format);
+ virtual const void *OnRequest(const wxString& topic, const wxString& item, size_t *size, wxIPCFormat format);
+ virtual bool OnPoke(const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format);
virtual bool OnStartAdvise(const wxString& topic, const wxString& item);
virtual bool OnStopAdvise(const wxString& topic, const wxString& item);
- virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT);
+ virtual bool DoAdvise(const wxString& item, const void *data, size_t size, wxIPCFormat format);
virtual bool OnDisconnect();
+
+ // topic for which we advise the client or empty if none
+ wxString m_advise;
+
protected:
- void Log(const wxString& command, const wxString& topic, const wxString& item, wxChar *data, int size, wxIPCFormat format);
-public:
- wxString m_sAdvise;
-protected:
- wxString m_sRequestDate;
- char m_achRequestBytes[3];
+ // the data returned by last OnRequest(): we keep it in this buffer to
+ // ensure that the pointer we return from OnRequest() stays valid
+ wxCharBuffer m_requestData;
};
-class MyServer: public wxServer
+class MyServer : public wxServer
{
public:
MyServer();
- ~MyServer();
+ virtual ~MyServer();
+
void Disconnect();
- bool IsConnected() { return m_connection != NULL; };
- MyConnection *GetConnection() { return m_connection; };
+ bool IsConnected() { return m_connection != NULL; }
+ MyConnection *GetConnection() { return m_connection; }
+
void Advise();
- bool CanAdvise() { return m_connection != NULL && !m_connection->m_sAdvise.IsEmpty(); };
- wxConnectionBase *OnAcceptConnection(const wxString& topic);
+ bool CanAdvise() { return m_connection && !m_connection->m_advise.empty(); }
+
+ virtual wxConnectionBase *OnAcceptConnection(const wxString& topic);
protected:
- MyConnection *m_connection;
+ MyConnection *m_connection;
};