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 )