ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Net-Knuddels/Net/Knuddels.pm
(Generate patch)

Comparing Net-Knuddels/Net/Knuddels.pm (file contents):
Revision 1.14 by root, Thu Jan 13 03:05:48 2005 UTC vs.
Revision 1.15 by elmex, Thu Jan 13 14:52:37 2005 UTC

110 110
111Create a new C<Net::Knuddels::Protocol> object. 111Create a new C<Net::Knuddels::Protocol> object.
112 112
113=cut 113=cut
114 114
115sub handle_room {
116 my ($self, $room) = @_;
117
118 if ($room eq "-") {
119 if (defined $self->{only_room}) {
120 return $self->{only_room};
121 } else {
122 warn "Couldn't assign '-' room to a room!";
123 return '-';
124 }
125 } else {
126 return $room;
127 }
128}
129
130sub calc_user_stats {
131 my ($self, $user) = @_;
132
133 if ($user->{name} =~ s/\cJ(\d+)$//) {
134 $user->{age} = $1
135 }
136
137 if ($user->{picture} =~ m/\bmale/) {
138 $user->{gender} = 'm';
139 } elsif ($user->{picture} =~ m/female/) {
140 $user->{gender} = 'f';
141 }
142 return $user;
143}
144
115sub new { 145sub new {
116 my $class = shift; 146 my $class = shift;
117 147
118 my %data; 148 my %data;
119 149
125 $self->{login_challenge} = $_[0]; 155 $self->{login_challenge} = $_[0];
126 $self->{login_room} = $_[1]; 156 $self->{login_room} = $_[1];
127 $self->feed_event ("login"); 157 $self->feed_event ("login");
128 }); 158 });
129 $self->register (r => sub { 159 $self->register (r => sub {
130 # TODO $room eq "-"
131 $self->feed_event (msg_priv => $_[2], $_[0], $_[1], $_[3]); 160 $self->feed_event (msg_priv => $self->handle_room ($_[2]), $_[0], $_[1], $_[3]);
132 }); 161 });
133 $self->register (e => sub { 162 $self->register (e => sub {
134 # TODO $room eq "-"
135 $self->feed_event (msg_room => $_[1], $_[0], $_[2]); 163 $self->feed_event (msg_room => $self->handle_room ($_[1]), $_[0], $_[2]);
164 });
165 $self->register (l => sub {
166 my $room = $self->handle_room ($_[0]);
167 return if $room eq "-"; # things that shouln't happen
168
169 my $user = {
170 name => $_[1],
171 flag => $_[2],
172 color => $_[3],
173 picture => $_[4]
174 };
175
176 $self->calc_user_stats ($user);
177
178 my $rl = $self->{user_lists}->{lc $room}->{lc $user->{name}} = $user;
179
180 $self->feed_event (join_room => $room, $user);
181 });
182 $self->register (w => sub {
183 my $room = $self->handle_room ($_[1]);
184 return if $room eq "-"; # things that shouln't happen
185
186 my $username = $_[0];
187
188 my $u = delete $self->{user_lists}->{lc $room}->{lc $username};
189
190 if (not defined $u) {
191 warn "User $username wasn't in room $room, trying to fix... but be careful!!!\n";
192 $u = { name => $username };
193 }
194
195 $self->feed_event (part_room => $room, $u);
196 });
197 $self->register (a => sub {
198 # the only_room stuff is from java-code, which has naughy semantics
199 if (not defined $self->{only_room}) {
200 $self->{only_room} = $_[0];
201 } else {
202 $self->{only_room} = "-";
203 }
204
205 $self->{my_nick} = $_[1]; # i'm really _not_ shure about this
206
207 my $ri = $self->{room}->{lc $_[0]} = {
208 picture => $_[7],
209 };
210
211 $self->feed_event (room_info => $_[0], $ri);
212 });
213 $self->register (u => sub {
214 my $room = shift;
215 my $rl = $self->{user_lists}->{lc $room} = {};
216 my $cur_u = {};
217
218 while (@_) {
219 $cur_u->{name} = shift;
220 $cur_u->{flag} = shift;
221 $cur_u->{color} = shift;
222
223 my $i = 0;
224
225 while ((my $nxt = shift) ne "-") {
226 if ($i == 0) {
227 $cur_u->{picture} = $nxt;
228 }
229 $i++;
230 }
231
232 $self->calc_user_stats ($cur_u);
233 $rl->{lc $cur_u->{name}} = $cur_u;
234 $cur_u = {};
235 }
236 $self->feed_event (user_list => $room, $rl);
136 }); 237 });
137 238
138 $self; 239 $self;
139} 240}
140 241
238 produced when a public message is uttered :) 339 produced when a public message is uttered :)
239 340
240 msg_room => $room, $src, $dst, $msg 341 msg_room => $room, $src, $dst, $msg
241 personal message from $src to $dst 342 personal message from $src to $dst
242 343
344 user_list => $room, $list
345 the userlist of a channel named $room, a elmement of the list (a user)
346 looks like:
347 {
348 name => <name>,
349 flag => <some flag i don't know what it means>,
350 color => like /\d+.\d+.\d+/,
351 age => /\d+/,
352 gender => /(f|m)/,
353 picture => <the picture file to put behind the nick>
354 }
355
356 room_info => $room, $room_info
357 some information about the $room:
358 $room_info =
359 {
360 picture => <some picturefile>
361 }
362
363 join_room => $room, $user
364 join message of $user joined the room $room
365 $user contains the user structure (see user_list).
366
367 part_room => $room, $user
368 part message of $user who left the room $room
369 $user contains the user structure (see user_list).
243=cut 370=cut
244 371
245sub register { 372sub register {
246 my ($self, $type, $cb) = @_; 373 my ($self, $type, $cb) = @_;
247 374

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines