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.17 by elmex, Thu Jan 13 18:52:37 2005 UTC vs.
Revision 1.18 by elmex, Thu Jan 13 19:01:22 2005 UTC

119 119
120 my $self = bless { 120 my $self = bless {
121 @_ 121 @_
122 }, $class; 122 }, $class;
123 123
124 $self->register ("(" => sub {
125 $self->{login_challenge} = $_[0];
126 $self->{login_room} = $_[1];
127 $self->feed_event ("login");
128 });
129 $self->register (r => sub {
130 $self->feed_event (msg_priv => $self->handle_room ($_[2]), $_[0], $_[1], $_[3]);
131 });
132 $self->register (e => sub {
133 $self->feed_event (msg_room => $self->handle_room ($_[1]), $_[0], $_[2]);
134 });
135 $self->register (l => sub {
136 my $room = $self->handle_room ($_[0]);
137 return if $room eq "-"; # things that shouln't happen
138
139 my $user = {
140 name => $_[1],
141 flag => $_[2],
142 color => $_[3],
143 picture => $_[4]
144 };
145
146 $self->calc_user_stats ($user);
147
148 my $rl = $self->{user_lists}->{lc $room}->{lc $user->{name}} = $user;
149
150 $self->feed_event (join_room => $room, $user);
151 });
152 $self->register (w => sub {
153 my $room = $self->handle_room ($_[1]);
154 return if $room eq "-"; # things that shouln't happen
155
156 my $username = $_[0];
157
158 my $u = delete $self->{user_lists}->{lc $room}->{lc $username};
159
160 if (not defined $u) {
161 warn "User $username wasn't in room $room, trying to fix... but be careful!!!\n";
162 $u = { name => $username };
163 }
164
165 $self->feed_event (part_room => $room, $u);
166 });
167 $self->register (a => sub {
168 # the only_room stuff is from java-code, which has naughy semantics
169 if (not defined $self->{only_room}) {
170 $self->{only_room} = $_[0];
171 } else {
172 $self->{only_room} = "-";
173 }
174
175 $self->{my_nick} = $_[1]; # i'm really _not_ shure about this
176
177 my $ri = $self->{room}->{lc $_[0]} = {
178 picture => $_[7],
179 };
180
181 $self->feed_event (room_info => $_[0], $ri);
182 });
183 $self->register (u => sub {
184 my $room = shift;
185 my $rl = $self->{user_lists}->{lc $room} = {};
186 my $cur_u = {};
187
188 while (@_) {
189 $cur_u->{name} = shift;
190 $cur_u->{flag} = shift;
191 $cur_u->{color} = shift;
192
193 my $i = 0;
194
195 while ((my $nxt = shift) ne "-") {
196 if ($i == 0) {
197 $cur_u->{picture} = $nxt;
198 }
199 $i++;
200 }
201
202 $self->calc_user_stats ($cur_u);
203 $rl->{lc $cur_u->{name}} = $cur_u;
204 $cur_u = {};
205 }
206 $self->feed_event (user_list => $room, $rl);
207 });
208 $self->register (k => sub {
209 my $windef;
210 $windef = join ("\0", @_);
211 });
212
213 $self; 124 $self;
214}
215
216sub clean_windef {
217 my ($self, $windef) = @_;
218
219 my $wd = {};
220
221 if ($windef =~ s/^(.*?)\365//) {
222 $wd->{title} = $1;
223 }
224
225 while ($windef =~ s/^([^\343])//) {
226 if ($1 eq 's') {
227 if ($windef =~ s/^(.*?)\365(.*?)\365//) {
228 $wd->{cmd} = $1;
229 $wd->{nickname} = $2;
230 }
231 } elsif ($1 eq 'w' or $1 eq 'p') {
232 $windef =~ s/^..//;
233 } elsif ($1 eq 'h' or $1 eq 'f') {
234 $windef =~ s/^.//;
235 } elsif ($1 eq 'r') {
236 # ... resizeable
237 }
238 }
239
240 return $wd;
241} 125}
242 126
243=item $protocol->feed_data ($octets) 127=item $protocol->feed_data ($octets)
244 128
245Feed raw protocol data into the decoder. 129Feed raw protocol data into the decoder.
389 $user->{gender} = 'm'; 273 $user->{gender} = 'm';
390 } elsif ($user->{picture} =~ m/female/) { 274 } elsif ($user->{picture} =~ m/female/) {
391 $user->{gender} = 'f'; 275 $user->{gender} = 'f';
392 } 276 }
393 return $user; 277 return $user;
278}
279
280sub clean_windef {
281 my ($self, $windef) = @_;
282
283 my $wd = {};
284
285 if ($windef =~ s/^(.*?)\365//) {
286 $wd->{title} = $1;
287 }
288
289 while ($windef =~ s/^([^\343])//) {
290 if ($1 eq 's') {
291 if ($windef =~ s/^(.*?)\365(.*?)\365//) {
292 $wd->{cmd} = $1;
293 $wd->{nickname} = $2;
294 }
295 } elsif ($1 eq 'w' or $1 eq 'p') {
296 $windef =~ s/^..//;
297 } elsif ($1 eq 'h' or $1 eq 'f') {
298 $windef =~ s/^.//;
299 } elsif ($1 eq 'r') {
300 # ... resizeable
301 }
302 }
303
304 return $wd;
394} 305}
395 306
396=item new Net::Knuddels::Client [IO::Socket::new arguments] 307=item new Net::Knuddels::Client [IO::Socket::new arguments]
397 308
398Create a new client connection. 309Create a new client connection.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines