File: CsaFileClient.pm

package info (click to toggle)
gpsshogi 0.7.0-3.3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 111,280 kB
  • sloc: cpp: 80,962; perl: 12,610; ruby: 3,929; javascript: 1,631; makefile: 1,202; sh: 473; tcl: 166; ansic: 67
file content (90 lines) | stat: -rw-r--r-- 2,091 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package CsaFileClient;
use strict;
use IO::Handle;
use network::CsaFileSession;

BEGIN {
  $| = 1;
}

sub new ($$) {
  my ($pkg, $config) = @_;
  my $this = { config => $config, command => "CsaFileClient" };
  my $dir = $config->{csa_file_session_dir} || make_time_string();
  $this->{dir} = $dir;
  if (! -d $dir) {
    mkdir ($dir, 0755) || die "mkdir $dir";
  }
  if (! -d "$dir/in") {
    mkdir ($dir. "/in",  0755) || die "mkdir $dir/in";
  }
  if (! -d "$dir/out") {
    mkdir ($dir. "/out", 0755) || die "mkdir $dir/out";
  }
  $this->{session_svr} = new CsaFileSession($dir."/in", 0, 0);
  $this->{session_clt} = new CsaFileSession($dir."/out", 0, 0);

  bless $this;
  $this->send("isready\n");
  my $ready = $this->read();
  chomp $ready;
  die unless ($ready eq "readyok");
  return $this;
}

sub need_servertime ($) {
    my ($this) = @_;
    return 1;
}

sub set_logger ($$) {
  my ($this, $logger) = @_;
  $this->{logger} = $logger;
  $this->{logger}->autoflush(1);
}

sub send ($$) {
  my ($this, $message) = @_;
  my ($session, $logger) = ($this->{session_svr}, $this->{logger});
  print STDERR "TFILE ".localtime(time).": $message";
  print $logger "TFLIE ".localtime(time).": $message"
    if ($this->{logger});
  $session->write($message);
}

sub read ($) {
  my ($this) = @_;
  my ($session, $logger) = ($this->{session_clt}, $this->{logger});
  my $line = $session->read();
  if (defined $line) {
    print STDERR "FFILE ".localtime(time).": $line\n";
    print $logger "FFILE ".localtime(time).": $line\n"
      if ($this->{logger});
  } else {
    die "prog_read failed";
  }
  return $line . "\n";
}

sub read_or_timeout ($$)
{
  my ($this, $timeout) = @_;
  # ignore $timeout for now
  return ($this->read, undef);
}

sub set_master_record ($$) {
  my ($this, $master) = @_;
  $this->{record_file} = $master;
}

# utility
sub make_time_string() {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $year += 1900; $mon += 1;
    return sprintf('%04d%02d%02d-%02d-%02d-%02d',
		   $year,$mon,$mday,$hour,$min,$sec);
}

# END
return 1;