From 521d34369b806a3ae359d2abef1ab28e3214974a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 10 Feb 2008 23:43:39 +0000 Subject: [PATCH] log Unicode data correctly, extract the logging code in MyConnectionBase class instead of quadriplicating it git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51643 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/ipc/baseclient.cpp | 69 ++++---------------------------------- samples/ipc/baseserver.cpp | 61 ++------------------------------- samples/ipc/client.cpp | 50 +++------------------------ samples/ipc/client.h | 8 ++--- samples/ipc/server.cpp | 50 --------------------------- samples/ipc/server.h | 13 +++---- 6 files changed, 22 insertions(+), 229 deletions(-) diff --git a/samples/ipc/baseclient.cpp b/samples/ipc/baseclient.cpp index 91c887b709..8120162de3 100644 --- a/samples/ipc/baseclient.cpp +++ b/samples/ipc/baseclient.cpp @@ -33,6 +33,8 @@ // we're using TCP/IP or real DDE. #include "ipcsetup.h" +#include "connection.h" + #include "wx/timer.h" #include "wx/datetime.h" @@ -43,7 +45,6 @@ // Define a new application class MyClient; -class MyConnection; class MyApp: public wxApp { @@ -55,20 +56,14 @@ protected: MyClient *m_client; }; -class MyConnection: public wxConnection +class MyConnection : public MyConnectionBase { public: - MyConnection(); - virtual ~MyConnection(); virtual bool DoExecute(const void *data, size_t size, wxIPCFormat format); virtual const void *Request(const wxString& item, size_t *size = NULL, wxIPCFormat format = wxIPC_TEXT); virtual bool DoPoke(const wxString& item, const void* data, size_t size, wxIPCFormat format); virtual bool OnAdvise(const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format); virtual bool OnDisconnect(); - -protected: - void Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format); }; class MyClient: public wxClient, public wxTimer @@ -194,12 +189,11 @@ void MyClient::Notify() wxString s = _T("Date"); m_connection->Execute(s); m_connection->Execute((const char *)s.c_str(), s.length() + 1); -#if wxUSE_DDE_FOR_IPC - wxLogMessage(_T("DDE Execute can only be used to send text strings, not arbitrary data.\nThe type argument will be ignored, text truncated, converted to Unicode and null terminated.")); -#endif char bytes[3]; - bytes[0] = '1'; bytes[1] = '2'; bytes[2] = '3'; - m_connection->Execute(bytes, 3, wxIPC_PRIVATE); + bytes[0] = '1'; + bytes[1] = '2'; + bytes[2] = '3'; + m_connection->Execute(bytes, WXSIZEOF(bytes)); break; } case 3: @@ -220,55 +214,6 @@ void MyClient::Notify() // MyConnection // ---------------------------------------------------------------------------- -MyConnection::MyConnection() -{ -} - -MyConnection::~MyConnection() -{ -} - -void MyConnection::Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format) -{ - wxString s; - if (topic.IsEmpty() && item.IsEmpty()) - s.Printf(_T("%s("), command.c_str()); - else if (topic.IsEmpty()) - s.Printf(_T("%s(item=\"%s\","), command.c_str(), item.c_str()); - else if (item.IsEmpty()) - s.Printf(_T("%s(topic=\"%s\","), command.c_str(), topic.c_str()); - else - s.Printf(_T("%s(topic=\"%s\",item=\"%s\","), command.c_str(), topic.c_str(), item.c_str()); - - switch (format) - { - case wxIPC_TEXT: - case wxIPC_UTF8TEXT: -#if !wxUSE_UNICODE || wxUSE_UNICODE_UTF8 - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), data, size); -#else - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), wxConvUTF8.cMB2WC((const char*)data), size); -#endif - break; - case wxIPC_PRIVATE: - if (size == 3) - { - char *bytes = (char *)data; - wxLogMessage(_T("%s'%c%c%c',%d)"), s.c_str(), bytes[0], bytes[1], bytes[2], size); - } - else - wxLogMessage(_T("%s...,%d)"), s.c_str(), size); - break; - case wxIPC_INVALID: - wxLogMessage(_T("%s[invalid data],%d)"), s.c_str(), size); - break; - default: - wxLogMessage(_T("%s[unknown data],%d)"), s.c_str(), size); - break; - } -} - bool MyConnection::OnAdvise(const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format) { diff --git a/samples/ipc/baseserver.cpp b/samples/ipc/baseserver.cpp index ee900de13f..913704073b 100644 --- a/samples/ipc/baseserver.cpp +++ b/samples/ipc/baseserver.cpp @@ -33,6 +33,8 @@ // we're using TCP/IP or real DDE. #include "ipcsetup.h" +#include "connection.h" + #include "wx/timer.h" #include "wx/datetime.h" @@ -42,7 +44,6 @@ // Define a new application class MyServer; -class MyConnection; class MyApp : public wxApp { @@ -56,12 +57,9 @@ protected: DECLARE_APP(MyApp) -class MyConnection : public wxConnection, public wxTimer +class MyConnection : public MyConnectionBase, public wxTimer { public: - MyConnection(); - virtual ~MyConnection(); - virtual bool Disconnect() { return wxConnection::Disconnect(); } 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); @@ -72,10 +70,6 @@ public: virtual bool OnDisconnect(); virtual void Notify(); -protected: - void Log(const wxString& command, const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format); - -public: wxString m_sAdvise; protected: @@ -182,14 +176,6 @@ void MyServer::Disconnect() // MyConnection // ---------------------------------------------------------------------------- -MyConnection::MyConnection() -{ -} - -MyConnection::~MyConnection() -{ -} - bool MyConnection::OnExecute(const wxString& topic, const void *data, size_t size, wxIPCFormat format) { @@ -275,47 +261,6 @@ void MyConnection::Notify() } } -void MyConnection::Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format) -{ - wxString s; - if (topic.IsEmpty() && item.IsEmpty()) - s.Printf(_T("%s("), command.c_str()); - else if (topic.IsEmpty()) - s.Printf(_T("%s(\"%s\","), command.c_str(), item.c_str()); - else if (item.IsEmpty()) - s.Printf(_T("%s(\"%s\","), command.c_str(), topic.c_str()); - else - s.Printf(_T("%s(\"%s\",\"%s\","), command.c_str(), topic.c_str(), item.c_str()); - - switch (format) - { - case wxIPC_TEXT: - case wxIPC_UTF8TEXT: -#if !wxUSE_UNICODE || wxUSE_UNICODE_UTF8 - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), data, size); -#else - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), wxConvUTF8.cMB2WC((const char*)data), size); -#endif - break; - case wxIPC_PRIVATE: - if (size == 3) - { - char *bytes = (char *)data; - wxLogMessage(_T("%s'%c%c%c',%d)"), s.c_str(), bytes[0], bytes[1], bytes[2], size); - } - else - wxLogMessage(_T("%s...,%d)"), s.c_str(), size); - break; - case wxIPC_INVALID: - wxLogMessage(_T("%s[invalid data],%d)"), s.c_str(), size); - break; - default: - wxLogMessage(_T("%s[unknown data],%d)"), s.c_str(), size); - break; - } -} - bool MyConnection::DoAdvise(const wxString& item, const void *data, size_t size, wxIPCFormat format) { Log(_T("Advise"), _T(""), item, data, size, format); diff --git a/samples/ipc/client.cpp b/samples/ipc/client.cpp index 5748d49b3e..b13587b74a 100644 --- a/samples/ipc/client.cpp +++ b/samples/ipc/client.cpp @@ -339,12 +339,11 @@ void MyFrame::OnExecute(wxCommandEvent& WXUNUSED(event)) m_client->GetConnection()->Execute(s); m_client->GetConnection()->Execute((const char *)s.c_str(), s.length() + 1); -#if wxUSE_DDE_FOR_IPC - wxLogMessage(_T("DDE Execute can only be used to send text strings, not arbitrary data.\nThe type argument will be ignored, text truncated, converted to Unicode and null terminated.")); -#endif char bytes[3]; - bytes[0] = '1'; bytes[1] = '2'; bytes[2] = '3'; - m_client->GetConnection()->Execute(bytes, 3, wxIPC_PRIVATE); + bytes[0] = '1'; + bytes[1] = '2'; + bytes[2] = '3'; + m_client->GetConnection()->Execute(bytes, WXSIZEOF(bytes)); } } @@ -416,47 +415,6 @@ MyClient::~MyClient() // MyConnection // ---------------------------------------------------------------------------- -void MyConnection::Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format) -{ - wxString s; - if (topic.IsEmpty() && item.IsEmpty()) - s.Printf(_T("%s("), command.c_str()); - else if (topic.IsEmpty()) - s.Printf(_T("%s(item=\"%s\","), command.c_str(), item.c_str()); - else if (item.IsEmpty()) - s.Printf(_T("%s(topic=\"%s\","), command.c_str(), topic.c_str()); - else - s.Printf(_T("%s(topic=\"%s\",item=\"%s\","), command.c_str(), topic.c_str(), item.c_str()); - - switch (format) - { - case wxIPC_TEXT: - case wxIPC_UTF8TEXT: -#if !wxUSE_UNICODE || wxUSE_UNICODE_UTF8 - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), data, size); -#else - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), wxConvUTF8.cMB2WC((const char*)data), size); -#endif - break; - case wxIPC_PRIVATE: - if (size == 3) - { - char *bytes = (char *)data; - wxLogMessage(_T("%s'%c%c%c',%d)"), s.c_str(), bytes[0], bytes[1], bytes[2], size); - } - else - wxLogMessage(_T("%s...,%d)"), s.c_str(), size); - break; - case wxIPC_INVALID: - wxLogMessage(_T("%s[invalid data],%d)"), s.c_str(), size); - break; - default: - wxLogMessage(_T("%s[unknown data],%d)"), s.c_str(), size); - break; - } -} - bool MyConnection::OnAdvise(const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format) { diff --git a/samples/ipc/client.h b/samples/ipc/client.h index 8f9168e312..b4a3ac0515 100644 --- a/samples/ipc/client.h +++ b/samples/ipc/client.h @@ -9,6 +9,8 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#include "connection.h" + #define ID_START 10000 #define ID_DISCONNECT 10001 #define ID_STARTADVISE 10002 @@ -23,7 +25,6 @@ // Define a new application class MyClient; -class MyConnection; class MyFrame; class MyApp: public wxApp @@ -78,7 +79,7 @@ protected: DECLARE_EVENT_TABLE() }; -class MyConnection: public wxConnection +class MyConnection : public MyConnectionBase { public: virtual bool DoExecute(const void *data, size_t size, wxIPCFormat format); @@ -86,9 +87,6 @@ public: virtual bool DoPoke(const wxString& item, const void* data, size_t size, wxIPCFormat format); virtual bool OnAdvise(const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format); virtual bool OnDisconnect(); -protected: - void Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format); }; class MyClient: public wxClient diff --git a/samples/ipc/server.cpp b/samples/ipc/server.cpp index 691798278f..6d97919bbb 100644 --- a/samples/ipc/server.cpp +++ b/samples/ipc/server.cpp @@ -304,15 +304,6 @@ void MyServer::Advise() // MyConnection // ---------------------------------------------------------------------------- -MyConnection::MyConnection() - : wxConnection() -{ -} - -MyConnection::~MyConnection() -{ -} - bool MyConnection::OnExecute(const wxString& topic, const void *data, size_t size, wxIPCFormat format) { @@ -378,47 +369,6 @@ bool MyConnection::OnStopAdvise(const wxString& topic, return true; } -void MyConnection::Log(const wxString& command, const wxString& topic, - const wxString& item, const void *data, size_t size, wxIPCFormat format) -{ - wxString s; - if (topic.IsEmpty() && item.IsEmpty()) - s.Printf(_T("%s("), command.c_str()); - else if (topic.IsEmpty()) - s.Printf(_T("%s(\"%s\","), command.c_str(), item.c_str()); - else if (item.IsEmpty()) - s.Printf(_T("%s(\"%s\","), command.c_str(), topic.c_str()); - else - s.Printf(_T("%s(\"%s\",\"%s\","), command.c_str(), topic.c_str(), item.c_str()); - - switch (format) - { - case wxIPC_TEXT: - case wxIPC_UTF8TEXT: -#if !wxUSE_UNICODE || wxUSE_UNICODE_UTF8 - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), data, size); -#else - wxLogMessage(_T("%s\"%s\",%d)"), s.c_str(), wxConvUTF8.cMB2WC((const char*)data), size); -#endif - break; - case wxIPC_PRIVATE: - if (size == 3) - { - char *bytes = (char *)data; - wxLogMessage(_T("%s'%c%c%c',%d)"), s.c_str(), bytes[0], bytes[1], bytes[2], size); - } - else - wxLogMessage(_T("%s...,%d)"), s.c_str(), size); - break; - case wxIPC_INVALID: - wxLogMessage(_T("%s[invalid data],%d)"), s.c_str(), size); - break; - default: - wxLogMessage(_T("%s[unknown data],%d)"), s.c_str(), size); - break; - } -} - bool MyConnection::DoAdvise(const wxString& item, const void *data, size_t size, wxIPCFormat format) { Log(_T("Advise"), _T(""), item, data, size, format); diff --git a/samples/ipc/server.h b/samples/ipc/server.h index c0450f99c4..0c0238f1eb 100644 --- a/samples/ipc/server.h +++ b/samples/ipc/server.h @@ -9,6 +9,8 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#include "connection.h" + #define ID_START 10000 #define ID_DISCONNECT 10001 #define ID_ADVISE 10002 @@ -17,7 +19,6 @@ // Define a new application class MyServer; -class MyConnection; class MyFrame; class MyApp : public wxApp @@ -63,12 +64,9 @@ protected: DECLARE_EVENT_TABLE() }; -class MyConnection : public wxConnection +class MyConnection : public MyConnectionBase { public: - MyConnection(); - ~MyConnection(); - 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); @@ -76,10 +74,9 @@ public: virtual bool OnStopAdvise(const wxString& topic, const wxString& item); virtual bool DoAdvise(const wxString& item, const void *data, size_t size, wxIPCFormat format); virtual bool OnDisconnect(); -protected: - void Log(const wxString& command, const wxString& topic, const wxString& item, const void *data, size_t size, wxIPCFormat format); -public: + wxString m_sAdvise; + protected: wxString m_sRequestDate; char m_achRequestBytes[3]; -- 2.47.2