// $Id$ // // The contents of this file are subject to the BOINC Public License // Version 1.0 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://boinc.berkeley.edu/license_1.0.txt // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations // under the License. // // The Original Code is the Berkeley Open Infrastructure for Network Computing. // // The Initial Developer of the Original Code is the SETI@home project. // Portions created by the SETI@home project are Copyright (C) 2002 // University of California at Berkeley. All Rights Reserved. // // Contributor(s): // // Revision History: // // $Log$ // Revision 1.14 2004/09/28 01:19:46 rwalton // *** empty log message *** // // Revision 1.13 2004/09/25 21:33:23 rwalton // *** empty log message *** // // Revision 1.12 2004/09/10 23:17:07 rwalton // *** empty log message *** // // Revision 1.11 2004/09/01 04:59:32 rwalton // *** empty log message *** // // Revision 1.10 2004/08/11 23:52:11 rwalton // *** empty log message *** // // Revision 1.9 2004/07/13 06:10:32 rwalton // Fixed a typo // // Revision 1.8 2004/07/13 05:56:01 rwalton // Hooked up the Project and Work tab for the new GUI. // // Revision 1.7 2004/07/12 08:46:25 rwalton // Document parsing of the message // // Revision 1.6 2004/06/25 22:50:56 rwalton // Client spamming server hotfix // // Revision 1.5 2004/05/17 22:15:09 rwalton // *** empty log message *** // // #if defined(__GNUG__) && !defined(__APPLE__) #pragma implementation "MainDocument.h" #endif #include "stdwx.h" #include "MainDocument.h" #include "error_numbers.h" IMPLEMENT_DYNAMIC_CLASS(CMainDocument, wxObject) CMainDocument::CMainDocument() { #ifdef __WIN32__ wxInt32 retval; WSADATA wsdata; retval = WSAStartup( MAKEWORD( 1, 1 ), &wsdata); if (retval) { wxLogTrace("CMainDocument::CMainDocument - Winsock Initialization Failure '%d'", retval); } #endif m_bCachedProjectStatusLocked = false; m_bCachedStateLocked = false; m_bIsConnected = false; m_dtCachedStateLockTimestamp = wxDateTime::Now(); m_dtCachedStateTimestamp = 0; } CMainDocument::~CMainDocument() { m_dtCachedStateTimestamp = wxDateTime::Now(); m_dtCachedStateLockTimestamp = wxDateTime::Now(); m_bIsConnected = false; m_bCachedStateLocked = false; m_bCachedProjectStatusLocked = false; #ifdef __WIN32__ WSACleanup(); #endif } wxInt32 CMainDocument::CachedProjectStatusUpdate() { wxInt32 retval = 0; if (!m_bIsConnected) { retval = rpc.init(NULL); if (retval) { wxLogTrace("CMainDocument::CachedProjectStatusUpdate - RPC Initialization Failed '%d'", retval); return retval; } m_bIsConnected = true; } retval = rpc.get_project_status(project_status); if (retval) { wxLogTrace("CMainDocument::CachedProjectStatusUpdate - Get State Failed '%d'", retval); } return retval; } wxInt32 CMainDocument::GetProjectCount() { CachedProjectStatusUpdate(); wxInt32 iCount = project_status.projects.size(); return iCount; } wxInt32 CMainDocument::GetProjectProjectName(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer = pProject->project_name.c_str(); return 0; } wxInt32 CMainDocument::GetProjectProjectURL(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer = pProject->master_url.c_str(); return 0; } wxInt32 CMainDocument::GetProjectAccountName(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer = pProject->user_name.c_str(); return 0; } wxInt32 CMainDocument::GetProjectTeamName(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer = pProject->team_name.c_str(); return 0; } wxInt32 CMainDocument::GetProjectTotalCredit(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer.Printf(wxT("%0.2f"), pProject->user_total_credit); return 0; } wxInt32 CMainDocument::GetProjectAvgCredit(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer.Printf(wxT("%0.2f"), pProject->user_expavg_credit); return 0; } wxInt32 CMainDocument::GetProjectResourceShare(wxInt32 iIndex, wxString& strBuffer) { PROJECT* pProject = project_status.projects[iIndex]; if ( NULL != pProject ) strBuffer.Printf(wxT("%0.2f%%"), pProject->resource_share); return 0; } wxInt32 CMainDocument::ProjectAttach( wxString& strURL, wxString& strAccountKey ) { return rpc.project_attach((char *)strURL.c_str(), (char *)strAccountKey.c_str()); } wxInt32 CMainDocument::ProjectDetach( wxString& strURL ) { PROJECT p; p.master_url = strURL; return rpc.project_op(p, wxT("detach")); } wxInt32 CMainDocument::ProjectUpdate( wxString& strURL ) { PROJECT p; p.master_url = strURL; return rpc.project_op(p, wxT("update")); } wxInt32 CMainDocument::ProjectReset( wxString& strURL ) { PROJECT p; p.master_url = strURL; return rpc.project_op(p, wxT("reset")); } wxInt32 CMainDocument::ProjectSuspend( wxString& strURL ) { PROJECT p; p.master_url = strURL; return rpc.project_op(p, wxT("suspend")); } wxInt32 CMainDocument::ProjectResume( wxString& strURL ) { PROJECT p; p.master_url = strURL; return rpc.project_op(p, wxT("resume")); } wxInt32 CMainDocument::GetWorkCount() { CachedStateUpdate(); return state.results.size(); } wxString CMainDocument::GetWorkProjectName(wxInt32 iIndex) { CachedStateUpdate(); return state.results[iIndex]->project->project_name.c_str(); } wxString CMainDocument::GetWorkApplicationName(wxInt32 iIndex) { CachedStateUpdate(); return state.results[iIndex]->app->name.c_str(); } wxString CMainDocument::GetWorkName(wxInt32 iIndex) { CachedStateUpdate(); return state.results[iIndex]->name.c_str(); } wxString CMainDocument::GetWorkCPUTime(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetWorkProgress(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetWorkTimeToCompletion(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetWorkReportDeadline(wxInt32 iIndex) { CachedStateUpdate(); wxDateTime dtReportDeadline; dtReportDeadline.Set((time_t)state.results[iIndex]->report_deadline); return dtReportDeadline.Format(); } wxString CMainDocument::GetWorkStatus(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxInt32 CMainDocument::GetTransferCount() { CachedStateUpdate(); return 0; } wxString CMainDocument::GetTransferFileName(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferProgress(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferProjectName(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferSize(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferSpeed(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferStatus(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetTransferTime(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxInt32 CMainDocument::GetMessageCount() { CachedStateUpdate(); return 0; } wxString CMainDocument::GetMessageProjectName(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxString CMainDocument::GetMessageTime(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxInt32 CMainDocument::GetMessagePriority(wxInt32 iIndex) { CachedStateUpdate(); return 0; } wxString CMainDocument::GetMessageMessage(wxInt32 iIndex) { CachedStateUpdate(); return wxString::Format(_T("")); } wxInt32 CMainDocument::CachedStateLock() { m_bCachedStateLocked = true; m_dtCachedStateLockTimestamp = wxDateTime::Now(); return 0; } wxInt32 CMainDocument::CachedStateUnlock() { m_bCachedStateLocked = false; return 0; } wxInt32 CMainDocument::CachedStateUpdate() { wxInt32 retval = 0; wxTimeSpan ts(m_dtCachedStateLockTimestamp - m_dtCachedStateTimestamp); if (!m_bCachedStateLocked && (ts > wxTimeSpan::Seconds(300))) { wxLogTrace("CMainDocument::CachedStateUpdate - State Cache Updating..."); m_dtCachedStateTimestamp = m_dtCachedStateLockTimestamp; if (!m_bIsConnected) { retval = rpc.init(NULL); if (retval) wxLogTrace("CMainDocument::CachedStateUpdate - RPC Initialization Failed '%d'", retval); } retval = rpc.get_state(state); if (retval) wxLogTrace("CMainDocument::CachedStateUpdate - Get State Failed '%d'", retval); retval = rpc.get_results(results); if (retval) wxLogTrace("CMainDocument::CachedStateUpdate - Get Results Failed '%d'", retval); retval = rpc.get_file_transfers(ft); if (retval) wxLogTrace("CMainDocument::CachedStateUpdate - Get File Transfers Failed '%d'", retval); wxLogTrace("CMainDocument::CachedStateUpdate - State Cache Updated..."); } return retval; }