Deliantra-Client
view release on metacpan or search on metacpan
DC/MessageDistributor.pm view on Meta::CPAN
sub add_channel {
my ($self, $chaninfo) = @_;
$self->{info}->{$chaninfo->{id}} = $chaninfo;
$self->touch_channel ($chaninfo->{id});
}
# set max paragraphs
sub set_max_par {
my ($self, $par) = @_;
for ($self->{log}, values %{$self->{chatview}}) {
$_->set_max_par ($par);
}
}
# set fontsize for all chatviews
sub set_fontsize {
my ($self, $s) = @_;
for ($self->{log}, values %{$self->{chatview}}) {
$_->set_fontsize ($s);
}
}
# push message in
sub message {
my ($self, $para) = @_;
my $id = $para->{type};
if (exists $self->{info}->{$id}) {
unless (exists $self->{chatview}->{$id}) {
$self->touch_channel ($id);
}
my $cv = $self->{chatview}->{$id};
unless ($cv) {
warn "message couldn't be delivered to chatview with "
."id '$id', sending it to main log.";
$self->{log}->message ($para);
return;
}
$cv->message ($para);
} else {
$self->{log}->message ($para);
}
}
sub touch_channel {
my ($self, $id) = @_;
if (exists $self->{chatview}->{$id}) {
$self->update_chat ($id);
} else {
$self->init_chat ($id);
}
}
sub update_chat {
my ($self, $id) = @_;
$self->{chatview}->{$id}->update_info ($self->{info}->{$id});
}
sub init_chat {
my ($self, $id) = @_;
my $chaninfo = $self->{info}->{$id};
my $dock = $self->{chatview}->{$id} =
DC::UI::ChatView->new (
expand => 1,
info => $chaninfo,
);
$dock->connect (close_dock => sub {
delete $self->{chatview}->{$id};
0
});
$self->{dockbar}->add_dock ($dock);
}
1;
( run in 0.560 second using v1.01-cache-2.11-cpan-39bf76dae61 )