Files correlati : Ricompilazione Demo : [ ] Commento :corretti warning git-svn-id: svn://10.65.10.50/trunk@16571 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			639 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			639 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "baseserv.h"
 | |
| #include "xml.h"
 | |
| #include <wx/config.h>
 | |
| #include <wx/filename.h>
 | |
| #include <wx/tokenzr.h>
 | |
| 
 | |
| #ifdef WIN32
 | |
| #include <wx/fileconf.h>
 | |
| #endif
 | |
| 
 | |
| #define		LF_TABGEN 3
 | |
| #define		LF_TABCOM	4
 | |
| #define		LF_TAB		5
 | |
| 
 | |
| //////////////////////////////////////////////////////////
 | |
| // Date utilities
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| static const byte _days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 | |
| 
 | |
| int last_day(int month, int year)
 | |
|   // parse_filastrok(
 | |
|   //    "trenta giorni ha novembre
 | |
|   //    con april, giugno e settembre
 | |
|   //    son ventotto case uno
 | |
|   //    per default ce n'ha trentuno");
 | |
| {
 | |
|   int d = _days_in_month[month-1];
 | |
|   if (month == 2 && (year % 4) == 0)
 | |
|     d++;
 | |
|   return d;
 | |
| }
 | |
| 
 | |
| bool isdate(const wxChar * s)
 | |
| { 
 | |
|   const int len = strlen(s);
 | |
|   if (len != 8 && len != 10)
 | |
|     return false;
 | |
|   
 | |
|   int d = 0, m = 0, y = 0, i;
 | |
|   if (len == 8)
 | |
|   {          
 | |
|     for (i = 0; i < 8; i++)
 | |
|       if (!isdigit(s[i])) break;
 | |
|     if (i == 8)
 | |
|     {
 | |
|       wxString str(s);
 | |
|       d = atoi(((const char *)str)+6); str[6] = '\0';
 | |
|       m = atoi(((const char *)str)+4); str[4] = '\0';
 | |
|       y = atoi(((const char *)str)+0);
 | |
|     }  
 | |
|   } 
 | |
|   else
 | |
|     if (len == 10)
 | |
|     {
 | |
|       if (s[2] == s[5] && !isdigit(s[2]))
 | |
|       {
 | |
|         d = atoi(s);
 | |
|         m = atoi(&s[3]);
 | |
|         y = atoi(&s[6]);
 | |
|       }
 | |
|     } 
 | |
|   
 | |
|   if (d < 1 || d > 31 ||
 | |
|       m < 1 || m > 12 ||
 | |
|       y < 0)
 | |
|     return false;
 | |
| 
 | |
|   return d <= last_day(m,y);
 | |
| }
 | |
| 
 | |
| long date2ansi(const wxChar * s)
 | |
| {
 | |
|   long val = 0L;
 | |
|   
 | |
|   const int len = (s && *s >= '0') ? strlen(s) : 0;
 | |
|   if (len != 8 && len != 10)  // Chi si azzarda ad aggiungere len != 6 ?
 | |
|     return 0L;
 | |
| 
 | |
|   if (len == 8)
 | |
|   {          
 | |
|     int i;
 | |
|     for (i = 0; i < 8; i++)
 | |
|       if (!isdigit(s[i])) break;
 | |
|     if (i == 8)
 | |
|       val = atol(s);
 | |
|   } 
 | |
|   else
 | |
|   {
 | |
|     if (s[2] == s[5] && !isdigit(s[2]))
 | |
|     {
 | |
|       const int d = atoi(s);
 | |
|       const int m = atoi(&s[3]);
 | |
|       const int y = atoi(&s[6]);
 | |
|       val = d + m + 100 +  y * 10000;
 | |
|     }
 | |
|   } 
 | |
| 	return val;
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TPostmanServer
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TPostmanServer : public TBaseServerApp
 | |
| {
 | |
|   wxArrayString m_Editors;
 | |
|   wxArrayString m_FirmEditors;
 | |
| 	int						m_Logicnum;
 | |
| 	int						m_Firm;
 | |
| 	int						m_LastFirm;
 | |
| 	wxArrayString	m_TableName;
 | |
| 	int           m_Err;
 | |
| 	wxString			m_DataPath;
 | |
| 
 | |
| protected:
 | |
| 	virtual void ProcessHttpGet(wxString cmd, wxSocketBase& outs);
 | |
| 	bool IsMagicName(wxString& strFilename) const;
 | |
| 	virtual const wxChar* GetAppName() const;
 | |
| 	void AbsoluteNameName(wxString & name);
 | |
| 	const wxString Table2Editor(const wxString & table);
 | |
| 	bool LoadEditors(const wxChar * filename, wxArrayString & editors);
 | |
| 	void SaveXml2IniParagraph(wxFileConfig & ini, TXmlItem& xmlItem);
 | |
| 	void SaveTransaction(const TXmlItem& xmlMethod, wxString & filename);
 | |
| 	void AdjustTransaction(wxString & filename);
 | |
| 	const wxString EditorCommand();
 | |
| 	void ExecuteTransaction(wxString & filename);
 | |
| 	void LoadXmlParagraph(TXmlItem & xmlItem, wxString & paragraph, wxString & filename);
 | |
| 	void LoadTransaction(wxString & filename, TXmlItem & xmlAnswer);
 | |
| 	void Log(TXmlItem& xmlItem, wxString & filename);
 | |
|   virtual void SoapProcessMethod(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer);
 | |
| 	virtual int GetDefaultPort() const;
 | |
| 
 | |
|  public:
 | |
|  	virtual bool Initialization();
 | |
|   
 | |
| 	TPostmanServer() : m_Logicnum(0), m_Err(0), m_Firm(0), m_LastFirm(0) {}
 | |
| };
 | |
| 
 | |
| void TPostmanServer::ProcessHttpGet(wxString cmd, wxSocketBase& outs)
 | |
| {
 | |
|   const int stop = cmd.Find(" HTTP");
 | |
| 	wxString str = cmd.Mid(4, stop-4).Trim();
 | |
| 
 | |
| 	if (str == "/")
 | |
| 		str += "index.htm";
 | |
| 	wxString strFilename = GetDocumentRoot() + str;
 | |
| 
 | |
| 	IsMagicName(strFilename);
 | |
| 	SendFile(strFilename, outs);
 | |
| }
 | |
| 
 | |
| bool TPostmanServer::IsMagicName(wxString& strFilename) const
 | |
| {
 | |
| 	wxFileName fnName(strFilename);
 | |
| 	wxString strName(fnName.GetName().Lower());
 | |
| 
 | |
| 	if (strName == "index" || strName == "log")
 | |
| 	{
 | |
| 		strFilename = GetLogFileName();
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| const wxString TPostmanServer::Table2Editor(const wxString & table)
 | |
| {
 | |
| 	wxString row;
 | |
| 	wxString module;
 | |
| 	wxString editor;
 | |
| 	wxString name;
 | |
| 
 | |
| 	{
 | |
| 		name << "../recdesc/d" << table << ".des";
 | |
| 		name.Lower();
 | |
| 
 | |
| 		wxFileName f(name);
 | |
| 
 | |
| 		f.MakeAbsolute();
 | |
| 		name = f.GetFullPath();
 | |
| 		wxTextFile file(name);
 | |
| 
 | |
| 		if (file.Open())
 | |
| 		{
 | |
| 			for (row = file.GetFirstLine(); !file.Eof(); row = file.GetNextLine())
 | |
| 			{
 | |
| 				row.Trim(false);
 | |
| 				if (row.StartsWith("Module"))
 | |
| 				{
 | |
| 					const int pos = row.Find("=");
 | |
| 					
 | |
| 					if (pos >= 0)
 | |
| 						module = row.Mid(pos + 1);
 | |
| 					module.Trim();
 | |
| 					module.Trim(false);
 | |
| 					break;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	if (module.IsEmpty())
 | |
| 	{
 | |
| 		module = "ba";
 | |
| 		name = "../??tb";
 | |
| 		name << table << ".msk";
 | |
| 		name.Lower();
 | |
| 		
 | |
| 		wxFileName f(name);
 | |
| 
 | |
| 		f.MakeAbsolute();
 | |
| 		name = f.GetFullPath();
 | |
| 		wxString foundfile = ::wxFindFirstFile(name, wxFILE);
 | |
| 		while (!foundfile.IsEmpty())
 | |
| 		{
 | |
| 			f = foundfile;
 | |
| 			wxString str(f.GetName().Left(2));
 | |
| 			if (str != "ba")
 | |
| 			{
 | |
| 				module = str;
 | |
| 				break;
 | |
| 			}
 | |
| 			foundfile = ::wxFindNextFile();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	wxFileName f("../install.ini");
 | |
| 
 | |
| 	f.MakeAbsolute();
 | |
| 	name = f.GetFullPath();
 | |
| 	wxTextFile file(name);
 | |
| 	wxString wmodule;
 | |
| 
 | |
| 	if (file.Open())
 | |
| 	{
 | |
| 		for (row = file.GetFirstLine(); !file.Eof(); row = file.GetNextLine())
 | |
| 		{
 | |
| 			row.Trim(false);
 | |
| 			if (row.StartsWith("["))
 | |
| 				wmodule = row.Mid(1, 2);
 | |
| 			else
 | |
| 				if (row.StartsWith("Edit_"))
 | |
| 				{
 | |
| 					const int pos = row.Find("=");
 | |
| 					
 | |
| 					if (pos >= 0)
 | |
| 					{				
 | |
| 						const wxString table(row.Mid(5, pos - 4));
 | |
| 						const int logicnum = atoi(table);
 | |
| 
 | |
| 						if ((logicnum <= LF_TAB && module == wmodule) || table == m_TableName[m_Logicnum])
 | |
| 						{
 | |
| 							editor = row.Mid(pos + 1);	
 | |
| 							editor.Trim(false);
 | |
| 							editor << " ";
 | |
| 							if (m_Logicnum == LF_TABGEN)
 | |
| 								editor << '#';
 | |
| 							else
 | |
| 								if (m_Logicnum == LF_TABCOM)
 | |
| 									editor << '%';
 | |
| 							editor << m_TableName[m_Logicnum];
 | |
| 							if (table == m_TableName[m_Logicnum])
 | |
| 								break;
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 		}
 | |
| 	}
 | |
|   return editor;
 | |
| }
 | |
| 
 | |
| bool TPostmanServer::LoadEditors(const wxChar * filename, wxArrayString & editors)
 | |
| {
 | |
| 	wxFileName f(filename);
 | |
| 
 | |
| 	f.MakeAbsolute();
 | |
| 	wxString name(f.GetFullPath());
 | |
| 	wxTextFile file(name);
 | |
| 	wxString row;
 | |
| 	wxString module;
 | |
| 
 | |
| 	if (file.Open())
 | |
| 	{
 | |
| 		for (row = file.GetFirstLine(); !file.Eof(); row = file.GetNextLine())
 | |
| 		{
 | |
| 			wxString editor;
 | |
| 
 | |
| 			row.Trim(false);
 | |
| 			if (row.StartsWith("["))
 | |
| 				module = row.Mid(1, 2);
 | |
| 			else
 | |
| 				if (row.StartsWith("Edit_"))
 | |
| 				{
 | |
| 					const int pos = row.Find("=");
 | |
| 					
 | |
| 					if (pos < 0)
 | |
| 						continue;
 | |
| 					
 | |
| 					const int logicnum = atoi(row.Mid(5, pos - 4));
 | |
| 
 | |
| 					if (logicnum  < 7 && module != "ba")
 | |
| 						continue;
 | |
| 					editor = row.Mid(pos + 1);	
 | |
| 					editor.Trim(false);
 | |
| 					int nrows2add = logicnum - editors.GetCount() + 1;
 | |
| 
 | |
| 					if (nrows2add > 0)
 | |
| 						editors.Add(wxEmptyString, nrows2add);
 | |
| 					editors[logicnum] = editor;
 | |
| 				}
 | |
| 		}
 | |
| 	}
 | |
|   return editors.GetCount() > 0;
 | |
| }
 | |
| 
 | |
| int TPostmanServer::GetDefaultPort() const
 | |
| {
 | |
| 	return GetConfigInt("Port", 8080);
 | |
| }
 | |
| 
 | |
| void TPostmanServer::SaveXml2IniParagraph(wxFileConfig& ini, TXmlItem& xmlItem)
 | |
| {
 | |
| 	int items = xmlItem.GetChildren();
 | |
| 
 | |
| 	for (int i = 0; i < items; i++)
 | |
| 	{
 | |
| 		TXmlItem * child = xmlItem.GetChild(i);
 | |
| 
 | |
| 		wxString key(child->GetAttr("Name"));
 | |
| 		wxString val(child->GetEnclosedText());
 | |
| 
 | |
| 		if (key == "Firm")
 | |
| 			m_Firm = atoi(val);
 | |
| 
 | |
| 		ini.Write(key, val);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TPostmanServer::SaveTransaction(const TXmlItem& xmlMethod, wxString & filename)
 | |
| {
 | |
| 	wxString paragraph;
 | |
| 	int items = xmlMethod.GetChildren();
 | |
| 
 | |
| 	if (wxFileName::FileExists(filename))
 | |
| 		wxRemoveFile(filename);
 | |
| 	for (int i = 0; i < items; i++)
 | |
| 	{
 | |
| 		TXmlItem * child = xmlMethod.GetChild(i);
 | |
| 		const int logicnum = atoi(child->GetAttr("LogicNumber"));
 | |
| 
 | |
| 		paragraph = "/";
 | |
| 		if (logicnum > 0)
 | |
| 		{
 | |
| 			if (m_Logicnum == 0)
 | |
| 				m_Logicnum = logicnum;
 | |
| 			paragraph << logicnum;
 | |
| 
 | |
| 			const int rownum = atoi(child->GetAttr("RowNumber"));
 | |
| 
 | |
| 			if (rownum > 0)
 | |
| 				paragraph << ',' << rownum;
 | |
| 			int nrows2add = logicnum - m_TableName.GetCount() + 1;
 | |
| 
 | |
| 			if (nrows2add > 0)
 | |
| 				m_TableName.Add(wxEmptyString, nrows2add);
 | |
| 			m_TableName[logicnum] = child->GetAttr("TableName");
 | |
| 		}
 | |
| 		else 
 | |
| 			paragraph << child->GetTag();
 | |
| 		wxFileConfig ini("", "", filename, "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH);
 | |
| 		ini.SetPath(paragraph);
 | |
| 		SaveXml2IniParagraph(ini, *child);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TPostmanServer::AdjustTransaction(wxString & filename)
 | |
| {
 | |
| 	wxTextFile file(filename);
 | |
| 	bool changed = false;
 | |
| 
 | |
| 	if (file.Open())
 | |
| 	{
 | |
| 		for (wxString & row = file.GetFirstLine(); !file.Eof(); row = file.GetNextLine())
 | |
| 		{
 | |
| 			const int pos = row.Find("\\,");
 | |
| 			if (pos > 0)
 | |
| 			{
 | |
| 				row.Remove(pos, 1);
 | |
| 				changed = true;
 | |
| 				size_t rowno = file.GetCurrentLine();
 | |
| 				file.InsertLine(row, rowno);
 | |
| 				file.RemoveLine(rowno + 1);
 | |
| 			}
 | |
| 		} 
 | |
| 		if (changed)
 | |
| 			file.Write();
 | |
| 	}
 | |
| 	else
 | |
| 		WriteLog("Can't create Transaction file");
 | |
| }
 | |
| 
 | |
| const wxString TPostmanServer::EditorCommand()
 | |
| {
 | |
| 	const bool firmchanged = m_Firm != m_LastFirm;
 | |
| 
 | |
| 	m_LastFirm = m_Firm;
 | |
| 	if (firmchanged)
 | |
| 	{
 | |
| 		m_FirmEditors.empty();
 | |
| 		wxString name(m_DataPath);
 | |
| 		wxChar l = name[name.Len() - 1];
 | |
| 
 | |
| 		if (l != '/' && l != '\\')
 | |
| 			name << '/';
 | |
| 
 | |
| 		wxString str; 
 | |
| 		
 | |
| 		str << m_Firm;
 | |
| 		while(str.Len() < 5)
 | |
| 			str.insert(0, "0");
 | |
| 		name << str << "a/ditta.ini";
 | |
| 		LoadEditors(name.c_str(), m_FirmEditors);
 | |
| 	}
 | |
| 	wxString table(m_TableName[m_Logicnum]);
 | |
| 
 | |
| 	if (m_Logicnum <= LF_TAB && !table.IsEmpty())
 | |
| 	{
 | |
| 		wxString editor(Table2Editor(table));
 | |
| 		
 | |
| 		if (!editor.IsEmpty())
 | |
| 			return editor;
 | |
| 	}
 | |
| 	if (m_Logicnum < (int) m_FirmEditors.GetCount() && !m_FirmEditors[m_Logicnum].IsEmpty())
 | |
| 		return m_FirmEditors[m_Logicnum].c_str();
 | |
| 	if (m_Logicnum < (int) m_Editors.GetCount() && !m_Editors[m_Logicnum].IsEmpty())
 | |
| 		return m_Editors[m_Logicnum].c_str();
 | |
| 	return wxEmptyString;
 | |
| }
 | |
| 
 | |
| void TPostmanServer::ExecuteTransaction(wxString & filename)
 | |
| {
 | |
| 	wxString editor(EditorCommand());
 | |
| 	if (!editor.IsEmpty())
 | |
| 	{
 | |
| 		wxFileName cmdname(editor);
 | |
| 
 | |
| 		if (cmdname.IsRelative())
 | |
| 		{
 | |
| 			cmdname.MakeAbsolute();
 | |
| 			cmdname.RemoveLastDir();
 | |
| 		}
 | |
| 	
 | |
| 		wxString command(cmdname.GetFullPath());
 | |
| 
 | |
| 		const wxString currdir(wxGetCwd());
 | |
| 		
 | |
| 		wxSetWorkingDirectory(cmdname.GetPath());
 | |
| 		command << " -i" <<filename << " -uADMIN";
 | |
| 		m_Err = 0;
 | |
| 		if (::wxExecute(command, wxEXEC_SYNC) < 0)
 | |
| 		{
 | |
| 			wxString str;
 | |
| 
 | |
| 			m_Err = 2;
 | |
| 			str << "Errore nell'esecuzione di " << command << m_Err ;
 | |
| 			WriteLog(str);
 | |
| 
 | |
| 		}
 | |
| 		wxSetWorkingDirectory(currdir);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TPostmanServer::LoadXmlParagraph(TXmlItem& xmlItem, wxString& paragraph, wxString & filename)
 | |
| {	
 | |
| 	wxString path;
 | |
| 	wxFileConfig ini("", "", filename, "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH);
 | |
| 
 | |
| 	path << "/" << paragraph;
 | |
| 	ini.SetPath(path);
 | |
| 	wxStringTokenizer tok(paragraph, ",");
 | |
| 	wxString tag = tok.GetNextToken();
 | |
| 	const size_t logicnum = atoi(tag);
 | |
| 	const wxChar * attr = logicnum > 0 ? "Field" : "Attr";
 | |
| 	int rownum = 0 ;
 | |
| 	
 | |
| 	if (logicnum > 0 && tok.HasMoreTokens())
 | |
| 		rownum = atoi(tok.GetNextToken());
 | |
| 	if (logicnum > 0)
 | |
| 		tag = "Record";
 | |
| 	
 | |
| 	TXmlItem & child =xmlItem.AddChild(tag);
 | |
| 
 | |
| 	if (logicnum > 0)
 | |
| 	{
 | |
| 		child.SetAttr("LogicNumber", logicnum);
 | |
| 		if (logicnum  < m_TableName.GetCount())
 | |
| 			child.SetAttr("TableName", m_TableName[logicnum]);
 | |
| 		
 | |
| 		if (rownum > 0)
 | |
| 			child.SetAttr("RowNumber", rownum);
 | |
| 	}
 | |
| 
 | |
| 	wxString s;
 | |
| 	wxString key;
 | |
| 	long index = 0;
 | |
| 	
 | |
| 	for (bool ok = ini.GetFirstEntry(key, index); ok; ok = ini.GetNextEntry (key, index))
 | |
| 	{
 | |
| 		wxString val(ini.Read(key));
 | |
| 	
 | |
| 		if (val.StartsWith("\"") && val.EndsWith("\""))
 | |
| 		{
 | |
| 			val = val.Mid(1);
 | |
| 			val[val.Len()] = '\0';
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			val.Trim();
 | |
| 			val.Trim(false);
 | |
| 		}
 | |
| 		if (isdate(val))
 | |
| 			child.AddSoapInt(attr, date2ansi(val)).SetAttr("Name", key);
 | |
| 		else
 | |
| 		{
 | |
| 			if (val.IsNumber())
 | |
| 			{
 | |
| 				if (key == "Error" && m_Err != 0)
 | |
| 					child.AddSoapInt(attr, m_Err).SetAttr("Name", key);
 | |
| 				else
 | |
| 					child.AddSoapInt(attr, atoi(val)).SetAttr("Name", key);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				if (key == "Result" && m_Err != 0)
 | |
| 					child.AddSoapString(attr, "ERROR").SetAttr("Name", key);
 | |
| 				else
 | |
| 					child.AddSoapString(attr, val).SetAttr("Name", key);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TPostmanServer::LoadTransaction(wxString & filename, TXmlItem& xmlAnswer)
 | |
| {
 | |
| 	wxString paragraph;
 | |
| 	long index = 0;
 | |
| 	wxFileConfig ini("", "", filename, "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH);
 | |
| 
 | |
|   for (bool ok = ini.GetFirstGroup(paragraph, index); ok; ok = ini.GetNextGroup(paragraph, index))
 | |
| 		LoadXmlParagraph(xmlAnswer, paragraph, filename);
 | |
| }
 | |
| 
 | |
| void TPostmanServer::Log(TXmlItem& WXUNUSED(xmlItem), wxString & filename)
 | |
| {
 | |
| 	wxFileConfig ini("", "", filename, "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH);
 | |
| 	wxString str;
 | |
| 	wxString key;
 | |
| 	long index = 0;
 | |
| 
 | |
| 	ini.SetPath("/Transaction");
 | |
| 	str << "Transaction : Command " << m_Editors[m_Logicnum];
 | |
| 	WriteLog(str);
 | |
| 	for (bool ok = ini.GetFirstEntry(key, index); ok; ok = ini.GetNextEntry (key, index))
 | |
| 	{
 | |
| 		wxString val(ini.Read(key));
 | |
| 
 | |
|     str = "              ",
 | |
| 		str << key << " = " << val;
 | |
| 		WriteLog(str);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TPostmanServer::SoapProcessMethod(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer)
 | |
| {
 | |
| 	const wxString& strMethod = xmlMethod.GetTag();
 | |
| 	if (strMethod == "m:CampoTransaction")
 | |
| 	{
 | |
| 		m_Logicnum = 0;
 | |
| 		wxFileName filename(GetTempFilename("ini"));
 | |
| 
 | |
| 		wxString name(filename.GetFullPath());
 | |
| 		SaveTransaction(xmlMethod, name);
 | |
| 		AdjustTransaction(name);
 | |
| 		ExecuteTransaction(name);
 | |
| 		LoadTransaction(name, xmlAnswer);
 | |
| 		Log(xmlAnswer, name);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Implementazione delle due funzioni pure virtuali
 | |
| 
 | |
| const wxChar* TPostmanServer::GetAppName() const
 | |
| {
 | |
| 	return "Postman";
 | |
| }
 | |
| 
 | |
| bool TPostmanServer::Initialization()
 | |
| {
 | |
| 	wxFileName f("../campo.ini");
 | |
| 
 | |
| 	f.MakeAbsolute();
 | |
| 	wxString name(f.GetFullPath());
 | |
| 	wxTextFile file(name);
 | |
| 	wxString row;
 | |
| 
 | |
| 	if (file.Open())
 | |
| 	{
 | |
| 		for (row = file.GetFirstLine(); !file.Eof(); row = file.GetNextLine())
 | |
| 		{
 | |
| 			if (row.StartsWith("Study"))
 | |
| 			{
 | |
| 				const int pos = row.Find('=');
 | |
| 				if (pos >= 0)
 | |
| 				{
 | |
| 					m_DataPath = row.Mid(pos + 1); 
 | |
| 					m_DataPath.Trim(false);
 | |
| 				}
 | |
| 				break;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	if (m_DataPath.IsEmpty())
 | |
| 	{
 | |
| 		WriteLog("No data path");
 | |
| 		return false;
 | |
| 	}
 | |
| 	if (!LoadEditors("../install.ini", m_Editors))
 | |
| 	{
 | |
| 		WriteLog("No editors found");
 | |
| 		return false;
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Istanziare l'applicazione principale
 | |
| 
 | |
| IMPLEMENT_APP(TPostmanServer)
 |