]> mj.ucw.cz Git - moe.git/blobdiff - submit/MO/Submit.pm
Moved everything related to MO-P to mop/. This cleans up bin/.
[moe.git] / submit / MO / Submit.pm
index 4497eef41ea391637633141bc167cfcc2c473f07..ba55961f7eff6dd3c56253541bf787e890196948 100644 (file)
@@ -17,14 +17,15 @@ sub new($) {
        my $mo = "$home/.mo";
        my $root = $ENV{"MO_ROOT"} or die "Environment variable MO_ROOT not set\n";
        my $self = {
-               "Contest" => "CPSPC 2007",
-               "Server" => "kamzice.ms.mff.cuni.cz:8888",
+               "Contest" => "CEOI 2007",
+               "Server" => "ceoi-gamma:8888",
                "Key" => "$mo/key.pem",         # Keys and certificates
                "Cert" => "$mo/cert.pem",
                "CACert" => "$mo/ca-cert.pem",
                "Trace" => defined $ENV{"MO_SUBMIT_TRACE"},
-               "Checks" => 1,
-#              "History" => "$home/.history",  # Keep submission history in this directory
+               "Checks" => 1,                  # Run `check' before submitting
+               "AllowOverride" => 1,           # Allow overriding a failed check
+               "History" => "$home/.history",  # Keep submission history in this directory
                "RefreshTimer" => 60000,        # How often GUI sends STATUS commands [ms]
                "root" => $root,
                "user" => $user,
@@ -68,6 +69,7 @@ sub disconnect($) {
 sub connect($) {
        my $self = shift @_;
        $self->disconnect;
+
        $self->log("Connecting to submit server");
        my $sk = new IO::Socket::INET(
                PeerAddr => $self->{"Server"},
@@ -106,6 +108,7 @@ sub connect($) {
                }
        }
        $self->{"sk"} = $sk;
+       $sk->autoflush(0);
 
        $self->log("Logging in");
        my $req = new Sherlock::Object("U" => $self->{"user"});
@@ -123,12 +126,14 @@ sub connect($) {
 sub request($$) {
        my ($self, $obj) = @_;
        my $sk = $self->{"sk"};
-       $obj->write($sk);       ### FIXME: Flushing
+       local $SIG{'PIPE'} = 'ignore';
+       $obj->write($sk);
+       print $sk "\n";
+       $sk->flush();
        if ($sk->error) {
                $self->err("Connection broken");
                return undef;
        }
-       print $sk "\n";
        return $self->reply;
 }
 
@@ -147,6 +152,7 @@ sub reply($) {
 sub send_file($$$) {
        my ($self, $fh, $size) = @_;
        my $sk = $self->{"sk"};
+       local $SIG{'PIPE'} = 'ignore';
        while ($size) {
                my $l = ($size < 4096 ? $size : 4096);
                my $buf = "";
@@ -164,11 +170,17 @@ sub send_file($$$) {
        return $self->reply;
 }
 
-sub local_submit($$$$$) {
+sub write_history($$$$$) {
        my ($self, $task, $part, $ext, $filename) = @_;
        my $hist = $self->{"History"};
        -d $hist or mkdir $hist or return "Unable to create $hist: $!";
-       ### FIXME: Unfinished
+       my $now = POSIX::strftime("%H:%M:%S", localtime(time));
+       my $maybe_part = ($part eq $task) ? "" : ":$part";
+       my $name = "$hist/$now-$task$maybe_part.$ext";
+       $self->log("Backing up to $name");
+       `cp "$filename" "$name"`;
+       return "Unable to back up $filename as $name" if $?;
+       return undef;
 }
 
 1;