MCP - MUD Client Protocol support in Perl
use MCP;
$pkg = Define MCP::Package 'dns-org-mud-moo-simpleedit',
min_version => "1.0",
max_version => "1.0";
define_initializer $pkg sub {
my ($session) = @_;
$session->write_inband("\@edit me.foo\r\n");
};
define_method $pkg content => sub {
my ($session, $params) = @_;
print "Reference: $params->{reference}\n";
print "Name: $params->{name}\n";
print "Type: $params->{type}\n";
foreach (@{$params->{content}}) {
print "$_\n";
}
print "\n";
$session->write_inband("\@quit\r\n");
};
$|=1;
my $socket = IO::Socket::INET
->new(PeerAddr => "random.moo.mud.org", PeerPort => 8888);
$sess = MCP::Session->new($socket, client => 1);
$sess->start_mcp();
$sess->write_inband("connect $user $password\r\n");
while (<$socket>) { $sess->eat_line($_); }
$sess->close();
MUD Client Protocol is a means for multiplexing a bidirectional stream of structured messages onto a single line-oriented channel. For more details see http://www.moo.mud.org/mcp/
The following methods are available:
MCP::PkgInst
(class must still be a descendant of MCP::PkgInst).
define_initializer below.
define_finalizer below.
method_name($name)my($session,$params) = @_; ... };my($session,$params) = @_; ... });my($session,$params) = @_; ... };my($session,$params) = @_; ... });my($session,$params) = @_; ... };my($session,$params) = @_; ... });inst($session)
The following methods are available on session objects:
MCP::Session object atop the given output filehandle $out.
The following parameters are recognized:
client or server should be specified
A server session issues the initial #$#mcp immediately,
A client session waits for the peer to issue the #$#mcp.
$session->close_hook() by itself
start_mcp()close([$reason])new, if any,
to indicate that this session is to be terminated
close_hook([$reason])is_closed()is_client()write_inband($string)Complete lines are sent immediately.
Any trailing partial line is saved and prefixed to the next write_inband() call.
eat_line($string)Expected usage is something like:
while (<>) { $session->eat_line($_); }
eat_string($string)Any trailing partial line is left behind in $string.
Expected usage is something like:
while (sysread(HANDLE, $buffer, $chunk_size, length($buffer))) {
foreach ($session->eat_string($buffer)) {
# ... process inband line $_;
}
}
new.
Copyright 2002 Roger F. Crew.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.