Exemplo n.º 1
0
int _tmain(int argc, LPTSTR argv[])
{
    int nRet = 0;

    if (_Module.IsWorker())
    {
        MSG(0, _T("Greetings from Worker! [%i]\n\n"), _Module.InstanceCount());
    }
    else
    {
        // check for help request or errors..
        nRet = _Module.LoadPreferences(argc, argv);
        if (nRet == ERROR_SUCCESS)
        {
            _Module.BackupTaskState();

            PROCESS_INFORMATION pi = {0};

            do
            {
                if (!_Module.CreateWorkerProcess(pi)) { nRet = -1; break; }

            } while (!_Module.WatchWorkerProcess(pi));
        }

        return nRet;
    }

    try
    {
        nRet = _Module.LoadPreferences(argc, argv);
        if (nRet == ERROR_SUCCESS)
        {
            CWsaInitialize _;

            if (_Module.Connect() == ERROR_SUCCESS)
            {
                nRet = _Module.Run();
            }
            _Module.Disconnect();
#ifdef _DEBUG
            MSG(0, _T("[%i] worker bye... \n"), _Module.InstanceCount());
            ::Sleep(3000);
#endif
        }
    }
    catch (int e)
    {
        nRet = CLog::Error(_T("Server failed."), e);
    }
    catch (std::exception& e)
    {
        ERR(_T("Exception caught: %s\n"), (LPCTSTR)CString(e.what()));
    }
    catch (...)
    {
        ERR(_T("Exception caught: unspecified.\n"));
    }

    return nRet;
}