diff --git a/checkin_notes b/checkin_notes
index c78d06e716..745b534925 100755
--- a/checkin_notes
+++ b/checkin_notes
@@ -9499,3 +9499,22 @@ David Jan 22 2004
lib/
util.C,h
xml_util.C,h
+
+David Jan 22 2004
+ - change the GUI RPC protocol so that there's a single
+ request that returns the entire state
+ (same contents as the client state file)
+ - add fraction_done, current_cpu_time to output
+ - factored out CLIENT_STATE::write_state(FILE*)
+ (used for both state file write and GUI RPC)
+ - always copy team name from scheduler reply
+ (so that we'll learn if user quits team)
+
+ client/
+ app.C
+ client_state.h
+ cs_scheduler.C
+ cs_statefile.C
+ gui_rpc_client.C,h
+ gui_rpc_server.C
+ gui_test.C
diff --git a/client/app.C b/client/app.C
index 9546bf90b8..68b3dc852c 100644
--- a/client/app.C
+++ b/client/app.C
@@ -1256,12 +1256,16 @@ int ACTIVE_TASK::write(FILE* fout) {
" %d\n"
" %d\n"
" %f\n"
+ " %f\n"
+ " %f\n"
"\n",
result->project->master_url,
result->name,
app_version->version_num,
slot,
- checkpoint_cpu_time
+ checkpoint_cpu_time,
+ fraction_done,
+ current_cpu_time
);
return 0;
}
@@ -1324,6 +1328,8 @@ int ACTIVE_TASK::parse(FILE* fin, CLIENT_STATE* cs) {
else if (parse_int(buf, "", app_version_num)) continue;
else if (parse_int(buf, "", slot)) continue;
else if (parse_double(buf, "", checkpoint_cpu_time)) continue;
+ else if (parse_double(buf, "", fraction_done)) continue;
+ else if (parse_double(buf, "", current_cpu_time)) continue;
else msg_printf(NULL, MSG_ERROR, "ACTIVE_TASK::parse(): unrecognized %s\n", buf);
}
return ERR_XML_PARSE;
diff --git a/client/client_state.h b/client/client_state.h
index 54ef3a8ae3..6d2bd1dbe6 100644
--- a/client/client_state.h
+++ b/client/client_state.h
@@ -258,6 +258,7 @@ private:
public:
void set_client_state_dirty(char*);
int parse_state_file();
+ int write_state(FILE*);
int write_state_file();
int write_state_file_if_needed();
int parse_venue();
diff --git a/client/cs_scheduler.C b/client/cs_scheduler.C
index 63d3cab8ee..bca326dbe2 100644
--- a/client/cs_scheduler.C
+++ b/client/cs_scheduler.C
@@ -485,9 +485,7 @@ int CLIENT_STATE::handle_scheduler_reply(
if (strlen(sr.user_name)) {
safe_strcpy(project->user_name, sr.user_name);
}
- if (strlen(sr.team_name)) {
- safe_strcpy(project->team_name, sr.team_name);
- }
+ safe_strcpy(project->team_name, sr.team_name);
project->user_total_credit = sr.user_total_credit;
project->user_expavg_credit = sr.user_expavg_credit;
project->user_create_time = sr.user_create_time;
diff --git a/client/cs_statefile.C b/client/cs_statefile.C
index f15897df1c..24aea619c5 100644
--- a/client/cs_statefile.C
+++ b/client/cs_statefile.C
@@ -185,7 +185,6 @@ int CLIENT_STATE::parse_venue() {
// Write the client_state.xml file
//
int CLIENT_STATE::write_state_file() {
- unsigned int i, j;
FILE* f = boinc_fopen(STATE_FILE_TEMP, "w");
int retval;
@@ -195,6 +194,19 @@ int CLIENT_STATE::write_state_file() {
msg_printf(0, MSG_ERROR, "Can't open temp state file: %s\n", STATE_FILE_TEMP);
return ERR_FOPEN;
}
+ retval = write_state(f);
+ fclose(f);
+ if (retval) return retval;
+ retval = boinc_rename(STATE_FILE_TEMP, STATE_FILE_NAME);
+ scope_messages.printf("CLIENT_STATE::write_state_file(): Done writing state file\n");
+ if (retval) return ERR_RENAME;
+ return 0;
+}
+
+int CLIENT_STATE::write_state(FILE* f) {
+ unsigned int i, j;
+ int retval;
+
fprintf(f, "\n");
retval = host_info.write(f);
if (retval) return retval;
@@ -261,10 +273,6 @@ int CLIENT_STATE::write_state_file() {
fprintf(f, "%s\n", host_venue);
}
fprintf(f, "\n");
- fclose(f);
- retval = boinc_rename(STATE_FILE_TEMP, STATE_FILE_NAME);
- scope_messages.printf("CLIENT_STATE::write_state_file(): Done writing state file\n");
- if (retval) return ERR_RENAME;
return 0;
}
diff --git a/client/gui_rpc_client.C b/client/gui_rpc_client.C
index 21857f0d52..3ce28abcfd 100644
--- a/client/gui_rpc_client.C
+++ b/client/gui_rpc_client.C
@@ -29,116 +29,15 @@ RPC_CLIENT::~RPC_CLIENT() {
fclose(fout);
}
-int RPC_CLIENT::get_projects(vector& projects) {
+int RPC_CLIENT::get_state() {
char buf[256];
int retval;
- fprintf(fout, "\n");
+ fprintf(fout, "\n");
fflush(fout);
while (fgets(buf, 256, fin)) {
- if (match_tag(buf, "")) continue;
- else if (match_tag(buf, "")) return 0;
- else if (match_tag(buf, "")) {
- PROJECT project;
- retval = project.parse_state(fin);
- if (!retval) {
- projects.push_back(project);
- }
- } else {
- fprintf(stderr, "unrecognized: %s", buf);
- }
+ printf(buf);
+ if (match_tag(buf, "")) break;
}
- return ERR_XML_PARSE;
+ return 0;
}
-
-int PROJECT::parse_state(FILE* in) {
- char buf[256];
- STRING256 string;
-
- strcpy(project_name, "");
- strcpy(user_name, "");
- strcpy(team_name, "");
- resource_share = 100;
- exp_avg_cpu = 0;
- exp_avg_mod_time = 0;
- min_rpc_time = 0;
- min_report_min_rpc_time = 0;
- nrpc_failures = 0;
- master_url_fetch_pending = false;
- sched_rpc_pending = false;
- scheduler_urls.clear();
- while (fgets(buf, 256, in)) {
- if (match_tag(buf, "")) return 0;
- else if (parse_str(buf, "", string.text, sizeof(string.text))) {
- scheduler_urls.push_back(string);
- continue;
- }
- else if (parse_str(buf, "", master_url, sizeof(master_url))) continue;
- else if (parse_str(buf, "", project_name, sizeof(project_name))) continue;
- else if (parse_str(buf, "", user_name, sizeof(user_name))) continue;
- else if (parse_str(buf, "", team_name, sizeof(team_name))) continue;
- else if (parse_double(buf, "", user_total_credit)) continue;
- else if (parse_double(buf, "", user_expavg_credit)) continue;
- else if (parse_int(buf, "", (int &)user_create_time)) continue;
- else if (parse_int(buf, "", rpc_seqno)) continue;
- else if (parse_int(buf, "", hostid)) continue;
- else if (parse_double(buf, "", host_total_credit)) continue;
- else if (parse_double(buf, "", host_expavg_credit)) continue;
- else if (parse_int(buf, "", (int &)host_create_time)) continue;
- else if (parse_double(buf, "", exp_avg_cpu)) continue;
- else if (parse_int(buf, "", exp_avg_mod_time)) continue;
- else if (match_tag(buf, "")) {
- copy_element_contents(
- in,
- "",
- code_sign_key,
- sizeof(code_sign_key)
- );
- }
- else if (parse_int(buf, "", nrpc_failures)) continue;
- else if (parse_int(buf, "", master_fetch_failures)) continue;
- else if (parse_int(buf, "", (int&)min_rpc_time)) continue;
- else if (match_tag(buf, "")) master_url_fetch_pending = true;
- else if (match_tag(buf, "")) sched_rpc_pending = true;
- else printf("PROJECT::parse_state(): unrecognized: %s\n", buf);
- }
- return ERR_XML_PARSE;
-}
-
-PROJECT::PROJECT() {
- init();
-}
-
-void PROJECT::init() {
- strcpy(master_url, "");
- strcpy(authenticator, "");
- project_specific_prefs = "";
- resource_share = 100;
- strcpy(project_name, "");
- strcpy(user_name, "");
- strcpy(team_name, "");
- user_total_credit = 0;
- user_expavg_credit = 0;
- user_create_time = 0;
- rpc_seqno = 0;
- hostid = 0;
- host_total_credit = 0;
- host_expavg_credit = 0;
- host_create_time = 0;
- exp_avg_cpu = 0;
- exp_avg_mod_time = 0;
- strcpy(code_sign_key, "");
- nrpc_failures = 0;
- min_rpc_time = 0;
- min_report_min_rpc_time = 0;
- master_fetch_failures = 0;
- resource_debt = 0;
- debt_order = 0;
- master_url_fetch_pending = false;
- sched_rpc_pending = false;
- tentative = false;
-}
-
-PROJECT::~PROJECT() {
-}
-
diff --git a/client/gui_rpc_client.h b/client/gui_rpc_client.h
index ae4a18349b..f9ab027945 100644
--- a/client/gui_rpc_client.h
+++ b/client/gui_rpc_client.h
@@ -1,7 +1,5 @@
#include
-#include "client_types.h"
-
class RPC_CLIENT {
int sock;
FILE* fin;
@@ -9,6 +7,6 @@ class RPC_CLIENT {
public:
~RPC_CLIENT();
int init(char*);
- int get_projects(vector&);
+ int get_state();
};
diff --git a/client/gui_rpc_server.C b/client/gui_rpc_server.C
index fa63e732be..cc6f1b6db4 100644
--- a/client/gui_rpc_server.C
+++ b/client/gui_rpc_server.C
@@ -34,19 +34,8 @@ int GUI_RPC_CONN::handle_rpc() {
if (n <= 0) return -1;
buf[n] = 0;
printf("got %s\n", buf);
- if (match_tag(buf, "\n");
- for (i=0; iwrite_state(fout);
- }
- fprintf(fout, "\n");
- } else if match_tag(buf, ")) {
- fprintf(fout, "\n");
- for (i=0; iwrite_state(fout);
- }
+ if (match_tag(buf, "\n");
}
diff --git a/client/gui_test.C b/client/gui_test.C
index 7f09299051..a1fd059914 100644
--- a/client/gui_test.C
+++ b/client/gui_test.C
@@ -4,13 +4,8 @@
main() {
RPC_CLIENT rpc;
- vectorprojects;
unsigned int i;
rpc.init("gui_rpc");
- rpc.get_projects(projects);
- for (i=0; i