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:
		
							parent
							
								
									244eb1cf44
								
							
						
					
					
						commit
						ca04ac80b4
					
				@ -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");
 | 
			
		||||
 | 
			
		||||
@ -508,15 +508,14 @@ void TBaseServerApp::OnSocketEvent(wxSocketEvent& e)
 | 
			
		||||
  {
 | 
			
		||||
  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;
 | 
			
		||||
			const size_t BUFSIZE = 1024;
 | 
			
		||||
			wxChar  buf[BUFSIZE + 1];
 | 
			
		||||
 | 
			
		||||
		  // Read the data
 | 
			
		||||
 | 
			
		||||
			const size_t BUFSIZE = 1024;
 | 
			
		||||
			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++)
 | 
			
		||||
	{
 | 
			
		||||
@ -569,7 +604,8 @@ bool TLurchServer::Initialization()
 | 
			
		||||
      StartProcess(strApp);
 | 
			
		||||
	}
 | 
			
		||||
  
 | 
			
		||||
  m_nFreq = GetConfigInt("PingFreq") * 1000;
 | 
			
		||||
  RestartTimer();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user