ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/MessageDistributor.pm
Revision: 1.1
Committed: Sun Jan 6 16:28:49 2008 UTC (16 years, 4 months ago) by elmex
Branch: MAIN
CVS Tags: rel-0_9963
Log Message:
committed the big Dockbar patch.

File Contents

# User Rev Content
1 elmex 1.1 package DC::MessageDistributor;
2     use strict;
3     no warnings;
4    
5     sub new {
6     my $this = shift;
7     my $class = ref($this) || $this;
8     my $self = { @_ };
9     bless $self, $class;
10    
11     $self->{dockbar}->add_dock (
12     $self->{log} = DC::UI::ChatView->new (
13     expand => 1,
14     can_close => 0,
15     can_undock => 0,
16     info => {
17     title => "Log",
18     tooltip =>
19     "<b>Server Log</b>. This text viewer contains all recent message sent by the server.",
20     entry_tooltip =>
21     "<b>Command Entry</b>. If you enter something and press return/enter here, "
22     ."the line you entered will be sent to the server as a command.",
23     reply => ''
24     }
25     )
26     );
27    
28     return $self
29     }
30    
31     # called by MAPWIDGET activate console event
32     sub activate_console {
33     }
34    
35     # adding channel
36     sub add_channel {
37     my ($self, $chaninfo) = @_;
38    
39     $self->{info}->{$chaninfo->{id}} = $chaninfo;
40     $self->touch_channel ($chaninfo->{id});
41     }
42    
43     # set max paragraphs
44     sub set_max_para {
45     }
46    
47     # set fontsize
48     sub set_fontsize {
49     }
50    
51     # push message in
52     sub message {
53     my ($self, $para) = @_;
54     my $id = $para->{type};
55    
56     if (exists $self->{info}->{$id}) {
57     unless (exists $self->{chatview}->{$id}) {
58     $self->touch_channel ($id);
59     }
60    
61     my $cv = $self->{chatview}->{$id};
62    
63     unless ($cv) {
64     warn "message couldn't be delivered to chatview with "
65     ."id '$id', sending it to main log.";
66     $self->{log}->message ($para);
67     return;
68     }
69    
70     $cv->message ($para);
71    
72     } else {
73     $self->{log}->message ($para);
74     }
75     }
76    
77     sub touch_channel {
78     my ($self, $id) = @_;
79    
80     if (exists $self->{chatview}->{$id}) {
81     $self->update_chat ($id);
82     } else {
83     $self->init_chat ($id);
84     }
85     }
86    
87     sub update_chat {
88     my ($self, $id) = @_;
89     $self->{chatview}->{$id}->update_info ($self->{info}->{$id});
90     }
91    
92     sub init_chat {
93     my ($self, $id) = @_;
94    
95     my $chaninfo = $self->{info}->{$id};
96     my $dock = $self->{chatview}->{$id} =
97     DC::UI::ChatView->new (
98     expand => 1,
99     info => $chaninfo,
100     );
101     $dock->connect (close_dock => sub {
102     delete $self->{chatview}->{$id};
103     0
104     });
105     $self->{dockbar}->add_dock ($dock);
106     }
107    
108     1;