#include "StdAfx.h" #include "connect.h" #include "tracing.h" /////////////////////////////////////////////////////////// // TPrassiConnection TPrassiConnection::TPrassiConnection(TLanManager* lm, DWORD id) : TConnection(lm, id), m_nFirm(0) { } TPrassiConnection::~TPrassiConnection() { } BOOL TPrassiConnection::Trace(int level, const char* str) const { if (TracingEnabled()) { LPCSTR user; try { user = User(); } catch(...) { user = ""; } CString trc; trc.Format("%-8s %s", user, str); return ::Trace(level, trc); } return FALSE; } struct TFunctionName { const char* name; ConnectionFunction pFunc; int level; }; const int MAX_FUNC = 6; static TFunctionName ftable[MAX_FUNC] = { { "DongleHasModule", f_DongleHasModule, 1 }, { "DongleModules", f_DongleModules, 1 }, { "DongleNumber", f_DongleNumber, 1 }, { "DongleYear", f_DongleYear, 1 }, { "UserLogin", f_UserLogin, 0 }, { "UserLogout", f_UserLogout, 0 }, }; BOOL TPrassiConnection::Request(const char* str) { CStringArray argv; BOOL ok = ParseCommand(str, argv) > 0; if (ok) { const CString cmd = argv[0]; int fmin = 0; int fmax = MAX_FUNC-1; ok = FALSE; int cmp = 0; while (fmin <= fmax) { const int fcur = (fmax + fmin) / 2; const TFunctionName& fn = ftable[fcur]; cmp = cmd.CompareNoCase(fn.name); if (cmp == 0) { Trace(fn.level, str); const clock_t tempo = clock(); ok = fn.pFunc(*this, &argv); if (TracingEnabled()) { const double time = double(clock() - tempo) / CLOCKS_PER_SEC; if (time > 0.05) { CString str; str.Format("Time: %.2lf s", time); Trace(fn.level, str); } } break; } if (cmp < 0) fmax = fcur-1; else fmin = fcur+1; } if (cmp) { CString strError = "ERROR: "; strError += str; Trace(-1, strError); } } return ok; }