use IO::Socket::INET;
use IO::Socket::SSL; # qw(debug3);
use Sherlock::Object;
+use POSIX;
sub new($) {
my $user = $ENV{"USER"} or die "Environment variable USER not set\n";
my $self = {
"Contest" => "CPSPC 2007",
"Server" => "localhost:8888",
- "Key" => "$mo/key.pem",
+ "Key" => "$mo/key.pem", # Keys and certificates
"Cert" => "$mo/cert.pem",
"CACert" => "$mo/ca-cert.pem",
"Trace" => defined $ENV{"MO_SUBMIT_TRACE"},
+ "History" => "$home/.history"; # Keep submission history in this directory
+ "RefreshTimer" => 5000, # How often GUI sends STATUS commands [ms]
"user" => $user,
"sk" => undef,
"error" => undef,
return $self->reply;
}
+sub local_submit($$$$$) {
+ my ($self, $task, $part, $ext, $filename) = @_;
+ my $hist = $self->{"History"};
+ -d $hist or mkdir $hist or return "Unable to create $hist: $!";
+ ### FIXME: Unfinished
+}
+
1;
my ($go) = @_;
stop_refresh_timer();
refresh() if $go;
- $refresh_timer_id = Glib::Timeout->add(5000, \&timed_refresh);
+ $refresh_timer_id = Glib::Timeout->add($conn->{"RefreshTimer}, \&timed_refresh);
}
sub stop_refresh_timer() {
}
sub run_submit() {
+ my ($task, $part) = split /\//, $selected_task;
+ defined $part or $part = $task;
+
+ if (defined $conn->{"History"}) {
+ busy("Submitting locally");
+ my $err = $conn->local_submit($task, $part, $submit_extension, $submit_filename);
+ if (defined $err) {
+ submit_failed("Recording to local history failed\n($err)");
+ return;
+ }
+ }
+
if ($conn->is_connected) {
- ### FIXME: Busy cursor should be started earlier
busy("Checking server status...");
my $r = new Sherlock::Object("!" => "STATUS"); ### FIXME: use a NOP command
$r = $conn->request($r);
if (!$conn->connect) {
ready($conn->{"error"});
submit_failed("Unable to connect to the server"); ### FIXME: Mention local submit
+ return;
}
}
busy("Submitting...");
- my ($task, $part) = split /\//, $selected_task;
- defined $part or $part = $task;
-
my $fh = new IO::File($submit_filename);
if (!$fh) {
submit_failed("Unable to open $submit_filename\n($!)");