… | |
… | |
97 | AnyEvent::Socket::tcp_server $_[0], $_[1], sub { |
97 | AnyEvent::Socket::tcp_server $_[0], $_[1], sub { |
98 | my ($fh, $host, $port) = @_; |
98 | my ($fh, $host, $port) = @_; |
99 | |
99 | |
100 | syswrite $fh, "Welcome, $host:$port, use 'help' for more info!\015\012> "; |
100 | syswrite $fh, "Welcome, $host:$port, use 'help' for more info!\015\012> "; |
101 | my $rbuf; |
101 | my $rbuf; |
|
|
102 | |
|
|
103 | my $logger = new AnyEvent::Log::Ctx |
|
|
104 | log_cb => sub { |
|
|
105 | syswrite $fh, shift; |
|
|
106 | 0 |
|
|
107 | }; |
|
|
108 | |
|
|
109 | my $logger_guard = AnyEvent::Util::guard { |
|
|
110 | $AnyEvent::Log::COLLECT->detach ($logger); |
|
|
111 | }; |
|
|
112 | $AnyEvent::Log::COLLECT->attach ($logger); |
|
|
113 | |
102 | local $TRACE = 0; |
114 | local $TRACE = 0; |
103 | my $rw; $rw = AE::io $fh, 0, sub { |
115 | my $rw; $rw = AE::io $fh, 0, sub { |
104 | my $len = sysread $fh, $rbuf, 1024, length $rbuf; |
116 | my $len = sysread $fh, $rbuf, 1024, length $rbuf; |
|
|
117 | |
|
|
118 | $logger_guard if 0; # reference it |
105 | |
119 | |
106 | if (defined $len ? $len == 0 : $! != Errno::EAGAIN) { |
120 | if (defined $len ? $len == 0 : $! != Errno::EAGAIN) { |
107 | undef $rw; |
121 | undef $rw; |
108 | } else { |
122 | } else { |
109 | while ($rbuf =~ s/^(.*)\015?\012//) { |
123 | while ($rbuf =~ s/^(.*)\015?\012//) { |
… | |
… | |
115 | syswrite $fh, "sorry, no... if you want to execute exit, try CORE::exit.\015\012"; |
129 | syswrite $fh, "sorry, no... if you want to execute exit, try CORE::exit.\015\012"; |
116 | } else { |
130 | } else { |
117 | package AnyEvent::Debug::shell; |
131 | package AnyEvent::Debug::shell; |
118 | |
132 | |
119 | no strict 'vars'; |
133 | no strict 'vars'; |
|
|
134 | local $LOGGER = $logger; |
120 | my $old_stdout = select $fh; |
135 | my $old_stdout = select $fh; |
121 | local $| = 1; |
136 | local $| = 1; |
122 | |
137 | |
123 | my @res = eval $line; |
138 | my @res = eval $line; |
124 | |
139 | |
… | |
… | |
141 | } |
156 | } |
142 | } |
157 | } |
143 | |
158 | |
144 | { |
159 | { |
145 | package AnyEvent::Debug::shell; |
160 | package AnyEvent::Debug::shell; |
|
|
161 | |
|
|
162 | our $LOGGER; |
146 | |
163 | |
147 | sub help() { |
164 | sub help() { |
148 | <<EOF |
165 | <<EOF |
149 | help this command |
166 | help this command |
150 | wr [level] sets wrap level to level (or toggles if missing) |
167 | wr [level] sets wrap level to level (or toggles if missing) |
… | |
… | |
217 | "tracing for newly created watchers is now disabled." |
234 | "tracing for newly created watchers is now disabled." |
218 | } |
235 | } |
219 | } |
236 | } |
220 | |
237 | |
221 | sub v { |
238 | sub v { |
222 | require AnyEvent::Log; |
239 | $LOGGER->level (@_ ? $_[0] : $LOGGER->[1] ? 0 : 9); |
223 | |
240 | |
224 | $AnyEvent::Log::FILTER->level (@_ ? $_[0] : $AnyEvent::Log::FILTER->[1] ? 0 : 9); |
241 | "verbose logging is now " . ($LOGGER->[1] ? "enabled" : "disabled") . "." |
225 | |
|
|
226 | "verbosity level " . (@_ ? "set to $_[0]" : "toggled") . "." |
|
|
227 | } |
242 | } |
228 | } |
243 | } |
229 | |
244 | |
230 | =item AnyEvent::Debug::wrap [$level] |
245 | =item AnyEvent::Debug::wrap [$level] |
231 | |
246 | |