From 7f0c7a2cbf1e641e5e6dc9e943ef102f7e2b8d85 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 30 Apr 2008 15:49:26 +0000 Subject: [PATCH] Patch level : 10.0 0044 Files correlati : Postman Ricompilazione Demo : [ ] Commento : Aggiunto Multithread dei poveri git-svn-id: svn://10.65.10.50/trunk@16562 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- server/baseserv.cpp | 70 ++++++++++++++++++++++++++------------------- server/baseserv.h | 2 ++ server/postman.cpp | 22 ++++++++------ 3 files changed, 56 insertions(+), 38 deletions(-) diff --git a/server/baseserv.cpp b/server/baseserv.cpp index 9363b189c..6af551c95 100755 --- a/server/baseserv.cpp +++ b/server/baseserv.cpp @@ -157,6 +157,7 @@ enum BEGIN_EVENT_TABLE(TBaseServerApp, wxApp) EVT_SOCKET(SERVER_ID, TBaseServerApp::OnServerEvent) EVT_SOCKET(SOCKET_ID, TBaseServerApp::OnSocketEvent) + EVT_IDLE(TBaseServerApp::OnIdle) END_EVENT_TABLE() void TBaseServerApp::WriteLog(const wxChar* str) const @@ -476,10 +477,8 @@ void TBaseServerApp::OnServerEvent(wxSocketEvent& e) else { WriteLog("### Error: couldn't accept a new connection"); - sock->Destroy(); return; } - sock->SetEventHandler(*this, SOCKET_ID); sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); sock->Notify(TRUE); @@ -494,43 +493,56 @@ void TBaseServerApp::OnSocketEvent(wxSocketEvent& e) { // We disable input events, so that the test doesn't trigger // wxSocketEvent again. - sock.SetNotify(wxSOCKET_LOST_FLAG); - - // Read the data - const size_t BUFSIZE = 1024; - wxString str; - wxChar buf[BUFSIZE + 1]; - - memset(buf, 0, sizeof(buf)); - while (sock.Read(buf, BUFSIZE).LastCount() == BUFSIZE) - { - str << buf; - memset(buf, 0, sizeof(buf)); - } - - str << buf; - WriteLog(str); - - if (CanProcessCommand(str, sock)) - { - const wxSocketFlags flags = sock.GetFlags(); - sock.SetFlags(wxSOCKET_WAITALL); - ProcessCommand(str, sock); - sock.SetFlags(flags); - } - - // Enable input events again. - sock.SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); + m_Sockets.Add(&sock); } break; case wxSOCKET_LOST: WriteLog("--- Deleting socket."); + if (m_Sockets.Index(&sock) >= 0) + m_Sockets.Remove(&sock); sock.Destroy(); break; default: break; } } +void TBaseServerApp::OnIdle(wxIdleEvent& event) +{ + if (m_Sockets.GetCount() > 0) + { + wxSocketBase& sock = *(wxSocketBase *) m_Sockets[0]; + + sock.SetNotify(wxSOCKET_LOST_FLAG); + + // Read the data + const size_t BUFSIZE = 1024; + wxString str; + wxChar buf[BUFSIZE + 1]; + + memset(buf, 0, sizeof(buf)); + while (sock.Read(buf, BUFSIZE).LastCount() == BUFSIZE) + { + str << buf; + memset(buf, 0, sizeof(buf)); + } + + str << buf; + WriteLog(str); + + if (CanProcessCommand(str, sock)) + { + const wxSocketFlags flags = sock.GetFlags(); + sock.SetFlags(wxSOCKET_WAITALL); + ProcessCommand(str, sock); + sock.SetFlags(flags); + } + + // Enable input events again. + sock.SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); + m_Sockets.Remove(&sock); + } + wxApp::OnIdle(event); +} const wxString& TBaseServerApp::GetConfigName() const { diff --git a/server/baseserv.h b/server/baseserv.h index 1f918fd38..32b81188d 100755 --- a/server/baseserv.h +++ b/server/baseserv.h @@ -85,6 +85,7 @@ private: wxString m_strPath, m_strTempDir, m_strIni; bool m_bRunning; int m_nTmpCounter; + wxArrayPtrVoid m_Sockets; #ifdef WIN32 TTaskBarIcon* m_Tray; @@ -143,6 +144,7 @@ public: virtual int OnExit(); void OnServerEvent(wxSocketEvent& event); void OnSocketEvent(wxSocketEvent& event); + void OnIdle(wxIdleEvent& event); DECLARE_EVENT_TABLE(); }; diff --git a/server/postman.cpp b/server/postman.cpp index 78ff257e0..3dccdfbff 100755 --- a/server/postman.cpp +++ b/server/postman.cpp @@ -314,7 +314,7 @@ bool TPostmanServer::LoadEditors(const wxChar * filename, wxArrayString & editor int TPostmanServer::GetDefaultPort() const { - return GetConfigInt("Port", 80); + return GetConfigInt("Port", 8080); } void TPostmanServer::SaveXml2IniParagraph(wxFileConfig& ini, TXmlItem& xmlItem) @@ -412,17 +412,19 @@ void TPostmanServer::ExecuteTransaction(wxString & filename) wxString editor(EditorCommand()); if (!editor.IsEmpty()) { - wxString str; + wxFileName cmdname(editor); - str << "../" << editor; - - wxFileName cmdname(str); - - cmdname.MakeAbsolute(); + if (cmdname.IsRelative()) + { + cmdname.MakeAbsolute(); + cmdname.RemoveLastDir(); + } wxString command(cmdname.GetFullPath()); + const wxString currdir(wxGetCwd()); - wxSetWorkingDirectory("../"); + + wxSetWorkingDirectory(cmdname.GetPath()); command << " -i" < 0) { child.SetAttr("LogicNumber", logicnum); - child.SetAttr("TableName", m_TableName[logicnum]); + if (logicnum < m_TableName.GetCount()) + child.SetAttr("TableName", m_TableName[logicnum]); if (rownum > 0) child.SetAttr("RowNumber", rownum); @@ -551,6 +554,7 @@ void TPostmanServer::SoapProcessMethod(const TXmlItem& xmlMethod, TXmlItem& xmlA ExecuteTransaction(name); LoadTransaction(name, xmlAnswer); Log(xmlAnswer, name); + wxRemoveFile(name); } }