Patch level : 10.0

Files correlati     : servers
Ricompilazione Demo : [ ]
Commento            :
Corretta gestione di più richieste contemporanee


git-svn-id: svn://10.65.10.50/trunk@19850 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-12-30 09:46:30 +00:00
parent 244eb1cf44
commit ca04ac80b4
3 changed files with 54 additions and 16 deletions

@ -276,7 +276,6 @@ wxString TAuthorizationServer::DescribeModule(int m) const
return line; // Should never happen!
}
void TAuthorizationServer::AddNumber(TXmlItem& tr, int n) const
{
TXmlItem& td = tr.AddChild("td");

@ -503,20 +503,19 @@ struct TCommand : public wxObject
void TBaseServerApp::OnSocketEvent(wxSocketEvent& e)
{
wxSocketBase * sock = e.GetSocket();
wxSocketBase* sock = e.GetSocket();
switch(e.GetSocketEvent())
{
case wxSOCKET_INPUT:
{
// We disable input events, so that the test doesn't trigger
// wxSocketEvent again.
// We disable input events, so that the test doesn't trigger wxSocketEvent again.
sock->SetNotify(wxSOCKET_LOST_FLAG);
TCommand * message = new TCommand;
message->m_Sock = sock;
// Read the data
const size_t BUFSIZE = 1024;
wxChar buf[BUFSIZE + 1];
// Read the data
wxChar buf[BUFSIZE + 16];
memset(buf, 0, sizeof(buf));
while (sock->Read(buf, BUFSIZE).LastCount() == BUFSIZE)
{
@ -525,6 +524,9 @@ void TBaseServerApp::OnSocketEvent(wxSocketEvent& e)
}
message->m_Command << buf;
m_Sockets.Add(message);
// Enable input events again.
sock->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG);
}
break;
case wxSOCKET_LOST:
@ -535,7 +537,7 @@ void TBaseServerApp::OnSocketEvent(wxSocketEvent& e)
break;
}
}
void TBaseServerApp::OnIdle(wxIdleEvent& event)
void TBaseServerApp::OnIdle(wxIdleEvent& evt)
{
if (m_Sockets.GetCount() > 0)
{
@ -568,8 +570,9 @@ void TBaseServerApp::OnIdle(wxIdleEvent& event)
}
m_Sockets.RemoveAt(0);
evt.RequestMore(); // FONDAMENTALE per gestire richieste multiple!
}
wxApp::OnIdle(event);
wxApp::OnIdle(evt);
}
const wxString& TBaseServerApp::GetConfigName() const
@ -729,8 +732,8 @@ int TBaseServerApp::OnExit()
{
Deinitialization();
delete m_SingleInstance;
delete m_server;
m_SingleInstance = NULL;
delete m_server;
m_server = NULL;
}
if (m_log != NULL)

@ -47,6 +47,7 @@ protected:
virtual const wxChar* GetAppName() const;
virtual bool Initialization();
void OnTimer(wxTimerEvent& evt);
bool RestartTimer();
void AddMiniForm(TXmlItem& tr, const wxChar* action, const wxChar* app, const wxChar* prompt) const;
void EnumerateVariables(const wxString& strApp, wxArrayString& arr) const;
@ -142,7 +143,7 @@ void TLurchServer::OnTimer(wxTimerEvent& WXUNUSED(evt))
wxSleep(2);
StartProcess(strApp);
}
m_Timer.Start(m_nFreq);
RestartTimer();
}
const wxChar* TLurchServer::GetAppName() const
@ -212,7 +213,7 @@ void TLurchServer::GenerateFile(wxString& strFilename)
ini.SetPath(str);
wxString strHost;
ini.Read("Host", &strHost, wxGetFullHostName());
ini.Read("Host", &strHost, "127.0.0.1");
int nPort;
ini.Read("Port", &nPort, 3883);
@ -247,6 +248,25 @@ void TLurchServer::GenerateFile(wxString& strFilename)
a3 << arr[i] << " Server";
}
body.AddChild("hr");
TXmlItem& panel = body.AddChild("table");
panel.SetAttr("border", "1"); panel.SetAttr("width", "100%");
panel.AddChild("caption").AddEnclosedText("Options");
TXmlItem& tr0 = panel.AddChild("tr");
tr0.AddChild("td").AddEnclosedText("Working directory");
tr0.AddChild("td").AddEnclosedText(wxGetCwd());
TXmlItem& tr1 = panel.AddChild("tr");
tr1.AddChild("td").AddEnclosedText("Host Name");
wxString strHost; strHost << wxGetHostName() << wxT(":") << GetDefaultPort();
tr1.AddChild("td").AddEnclosedText(strHost);
TXmlItem& tr2 = panel.AddChild("tr");
tr2.AddChild("td").AddEnclosedText("Ping Frequency");
wxString strFreq; strFreq << m_nFreq/1000;
tr2.AddChild("td").AddEnclosedText(strFreq);
html.Save(strFilename);
}
}
@ -281,6 +301,21 @@ bool TLurchServer::IsCgiName(wxString strFilename) const
return strExt == "cgi" || strExt == "exe";
}
bool TLurchServer::RestartTimer()
{
bool ok = true;
if (m_nFreq > 0)
{
ok = m_Timer.Start(m_nFreq) && m_Timer.IsRunning();
if (!ok)
{
wxString strMsg;
strMsg << "Error starting timer with " << m_nFreq << " ms frequency";
WriteLog(strMsg);
}
}
return ok;
}
wxString TLurchServer::StartProcess(const wxString& strApp)
{
@ -314,8 +349,6 @@ wxString TLurchServer::StartProcess(const wxString& strApp)
pProcess->ForcePid(nProc);
m_ProcMap[strApp] = pProcess; //memorizza il numero del processo che ha lanciato per poterlo usare in fase di controllo
strMessage = wxEmptyString;
if (m_nFreq > 0)
m_Timer.Start(m_nFreq);
}
}
else
@ -560,6 +593,8 @@ void TLurchServer::ProcessHttpPost(wxString cmd, wxSocketBase& outs)
bool TLurchServer::Initialization()
{
m_nFreq = GetConfigInt("PingFreq") * 1000; // sec to msec
wxArrayString arr; CreateServersList(arr);
for (size_t i = 0; i < arr.GetCount(); i++)
{
@ -568,8 +603,9 @@ bool TLurchServer::Initialization()
if (bAutorun)
StartProcess(strApp);
}
RestartTimer();
m_nFreq = GetConfigInt("PingFreq") * 1000;
return true;
}