App-Termcast
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/Termcast.pm view on Meta::CPAN
# ABSTRACT: broadcast your terminal sessions for remote viewing
with 'MooseX::Getopt::Dashes';
use IO::Select;
use IO::Socket::INET;
use JSON;
use Scalar::Util 'weaken';
use Term::Filter::Callback;
use Term::ReadKey;
use Try::Tiny;
has host => (
is => 'rw',
isa => 'Str',
default => 'noway.ratry.ru',
documentation => 'Hostname of the termcast server to connect to',
);
has port => (
is => 'rw',
isa => 'Int',
default => 31337,
documentation => 'Port to connect to on the termcast server',
);
has user => (
is => 'rw',
isa => 'Str',
default => sub { $ENV{USER} },
documentation => 'Username for the termcast server',
);
has password => (
is => 'rw',
isa => 'Str',
default => 'asdf', # really unimportant
documentation => "Password for the termcast server\n"
. " (mostly unimportant)",
);
has bell_on_watcher => (
is => 'rw',
isa => 'Bool',
default => 0,
documentation => "Send a terminal bell when a watcher connects\n"
. " or disconnects",
);
has timeout => (
is => 'rw',
isa => 'Int',
default => 5,
documentation => "Timeout length for the connection to the termcast server",
);
has establishment_message => (
traits => ['NoGetopt'],
is => 'ro',
isa => 'Str',
lazy_build => 1,
);
sub _build_establishment_message {
my $self = shift;
return sprintf("hello %s %s\n", $self->user, $self->password);
}
sub _termsize {
return try { GetTerminalSize() } catch { (undef, undef) };
}
sub termsize_message {
my $self = shift;
my ($cols, $lines) = $self->_termsize;
return '' unless $cols && $lines;
return $self->_form_metadata_string(
geometry => [ $cols, $lines ],
);
}
has socket => (
traits => ['NoGetopt'],
is => 'rw',
isa => 'IO::Socket::INET',
lazy_build => 1,
init_arg => undef,
);
sub _form_metadata_string {
my $self = shift;
my %data = @_;
my $json = JSON::encode_json(\%data);
return "\e]499;$json\x07";
}
sub _build_socket {
my $self = shift;
my $socket;
{
$socket = IO::Socket::INET->new(PeerAddr => $self->host,
PeerPort => $self->port);
if (!$socket) {
Carp::carp "Couldn't connect to " . $self->host . ": $!";
ReadMode(0, $self->input)
if $self->_has_term && $self->_term->_raw_mode;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.182 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )