… | |
… | |
4 | |
4 | |
5 | use KGS::Protocol; |
5 | use KGS::Protocol; |
6 | use KGS::Messages; |
6 | use KGS::Messages; |
7 | |
7 | |
8 | use KGS::Listener::Debug; |
8 | use KGS::Listener::Debug; |
|
|
9 | |
|
|
10 | use Fcntl; |
|
|
11 | use FileHandle; |
9 | |
12 | |
10 | my $l = new IO::Socket::INET LocalPort => 2379, Listen => 1, ReuseAddr => 1; |
13 | my $l = new IO::Socket::INET LocalPort => 2379, Listen => 1, ReuseAddr => 1; |
11 | |
14 | |
12 | my $prot = new KGS::Protocol; |
15 | my $prot = new KGS::Protocol; |
13 | my $sgen = new KGS::Protocol::Generator; |
16 | my $sgen = new KGS::Protocol::Generator; |
… | |
… | |
15 | (my $listener = mylistener->new)->listen ($prot, "*"); |
18 | (my $listener = mylistener->new)->listen ($prot, "*"); |
16 | |
19 | |
17 | print "connect with cgoban2 to localhost:2379 to see a protocol dump.\n"; |
20 | print "connect with cgoban2 to localhost:2379 to see a protocol dump.\n"; |
18 | print "ready.\n"; |
21 | print "ready.\n"; |
19 | |
22 | |
|
|
23 | sysopen TRACE, "cgoban2.trace", O_CREAT|O_APPEND|O_WRONLY |
|
|
24 | or die "cgoban2.trace: $!"; |
|
|
25 | TRACE->autoflush(1); |
|
|
26 | |
20 | while (my $l = $l->accept) { |
27 | while (my $l = $l->accept) { |
21 | if (fork == 0) { |
28 | if (fork == 0) { |
|
|
29 | printf TRACE "$$ + %d\n", int time; |
|
|
30 | |
22 | my $r = new IO::Socket::INET PeerHost => "kgs.kiseido.com:2379"; |
31 | my $r = new IO::Socket::INET PeerHost => "kgs.kiseido.com:2379"; |
23 | $prot->handshake ($r); |
32 | $prot->handshake ($r); |
24 | { |
33 | { |
25 | sysread $l, my $buf, 1; |
34 | sysread $l, my $buf, 1; |
26 | $buf = chr 3; |
35 | $buf = chr 3; |
… | |
… | |
37 | while (select my $rb = $Rb, undef, undef, undef) { |
46 | while (select my $rb = $Rb, undef, undef, undef) { |
38 | if (vec $rb, fileno $l, 1) { |
47 | if (vec $rb, fileno $l, 1) { |
39 | last unless sysread $l, my $buf, 8192; |
48 | last unless sysread $l, my $buf, 8192; |
40 | syswrite $r, $buf, 8192; |
49 | syswrite $r, $buf, 8192; |
41 | |
50 | |
|
|
51 | printf TRACE "$$ C %d %4d %s\n", int time, length $buf, unpack "H*", $buf; |
|
|
52 | |
42 | $sbuf .= $buf; |
53 | $sbuf .= $buf; |
43 | |
|
|
44 | |
54 | |
45 | for (;;) { |
55 | for (;;) { |
46 | if (!$rlen and 2 <= length $sbuf) { |
56 | if (!$rlen and 2 <= length $sbuf) { |
47 | $rlen = ($sgen->{client_state} >> 24) ^ unpack "v", $sbuf; |
57 | $rlen = ($sgen->{client_state} >> 24) ^ unpack "v", $sbuf; |
48 | } |
58 | } |
… | |
… | |
58 | $msg = $msg->(substr $pkt, 4); |
68 | $msg = $msg->(substr $pkt, 4); |
59 | |
69 | |
60 | $prot->{generator}->set_server_seed ($msg->{name}) if $msg->{type} eq "login"; |
70 | $prot->{generator}->set_server_seed ($msg->{name}) if $msg->{type} eq "login"; |
61 | |
71 | |
62 | print "\npackage type received from CLIENT:\n"; |
72 | print "\npackage type received from CLIENT:\n"; |
|
|
73 | open XTYPE, "|xtype"; printf XTYPE "%16d%s", (length $pkt), $pkt; close XTYPE; |
63 | print KGS::Listener::Debug::dumpval $msg; |
74 | print KGS::Listener::Debug::dumpval $msg; |
64 | } else { |
75 | } else { |
65 | print "\007\n\nUNKNOWN PACKAGE TYPE RECEIVED FROM CLIENT:\n"; |
76 | print "\007\n\nUNKNOWN PACKAGE TYPE RECEIVED FROM CLIENT:\n"; |
66 | open XTYPE, "|xtype"; printf XTYPE "%16d%s", (length $pkt), $pkt; close XTYPE; |
77 | open XTYPE, "|xtype"; printf XTYPE "%16d%s", (length $pkt), $pkt; close XTYPE; |
67 | } |
78 | } |
… | |
… | |
73 | } |
84 | } |
74 | } |
85 | } |
75 | if (vec $rb, fileno $r, 1) { |
86 | if (vec $rb, fileno $r, 1) { |
76 | last unless sysread $r, my $buf, 8192; |
87 | last unless sysread $r, my $buf, 8192; |
77 | syswrite $l, $buf, 8192; |
88 | syswrite $l, $buf, 8192; |
|
|
89 | |
|
|
90 | printf TRACE "$$ S %d %4d %s\n", int time, length $buf, unpack "H*", $buf; |
|
|
91 | |
78 | eval { |
92 | eval { |
79 | $prot->feed_data ($buf); |
93 | $prot->feed_data ($buf); |
80 | }; |
94 | }; |
81 | warn "ERROR: $@" if $@; |
95 | warn "ERROR: $@" if $@; |
82 | } |
96 | } |
… | |
… | |
95 | |
109 | |
96 | print "received msg from SERVER\n"; |
110 | print "received msg from SERVER\n"; |
97 | print KGS::Listener::Debug::dumpval $msg; |
111 | print KGS::Listener::Debug::dumpval $msg; |
98 | } |
112 | } |
99 | |
113 | |
|
|
114 | |