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.22 by elmex, Fri Jan 14 23:17:13 2005 UTC vs.
Revision 1.23 by elmex, Fri Jan 21 17:25:18 2005 UTC

249 249
250sub handle_room { 250sub handle_room {
251 my ($self, $room) = @_; 251 my ($self, $room) = @_;
252 252
253 if ($room eq "-") { 253 if ($room eq "-") {
254 if (defined $self->{only_room}) { 254 if (scalar (keys %{$self->{room}}) == 1) {
255 return $self->{only_room}; 255 return (keys %{$self->{room}})[0];
256 } else { 256 } else {
257 warn "Couldn't assign '-' room to a room!"; 257 warn "Couldn't assign '-' room to a room!";
258 return '-'; 258 return '#nosuchroom';
259 } 259 }
260 } else { 260 } else {
261 return $room; 261 return $room;
262 } 262 }
263} 263}
401 syswrite $fh, "\0"; 401 syswrite $fh, "\0";
402 402
403 $self->register ("(" => sub { 403 $self->register ("(" => sub {
404 $self->{login_challenge} = $_[0]; 404 $self->{login_challenge} = $_[0];
405 $self->{login_room} = $_[1]; 405 $self->{login_room} = $_[1];
406 $self->{proto}->feed_event ("login"); 406 $self->{proto}->feed_event (login => $_[1]);
407 }); 407 });
408
408 $self->register (k => sub { 409 $self->register (k => sub {
409 my @str = map { s/[\356\343]//; $_ } @_; 410 my @str = map { s/[\356\343]//; $_ } @_;
410 my @out; 411 my @out;
411 push @out, split /#/, $_ for @str; 412 push @out, split /#/, $_ for @str;
412 $self->{proto}->feed_event (dialog => \@out); 413 $self->{proto}->feed_event (dialog => \@out);
413 }); 414 });
415
414 $self->register (t => sub { 416 $self->register (t => sub {
415 my $src = $_[0]; 417 my $src = $_[0];
418
416 if ($src eq '-') { 419 if ($src eq '-') {
417 $_[2] = $self->{knuddels_nick} . " " . $_[2]; 420 $_[2] = $self->{knuddels_nick} . " " . $_[2];
421
418 } else { 422 } else {
419 $_[2] = $src . " " . $_[2]; 423 $_[2] = $src . " " . $_[2];
420 } 424 }
421 $self->{proto}->feed_event (action_room => $self->handle_room ($_[1]), $_[2]); 425 $self->{proto}->feed_event (action_room => $self->handle_room ($_[1]), $_[2]);
422 }); 426 });
427
423 $self->register (r => sub { 428 $self->register (r => sub {
424 my $src = $_[0]; 429 my $src = $_[0];
425 $src = $self->{knuddels_nick} if $src eq "-"; 430 $src = $self->{knuddels_nick} if $src eq "-";
426 $self->{proto}->feed_event (msg_priv => $self->handle_room ($_[2]), $src, $_[1], $_[3]); 431 $self->{proto}->feed_event (msg_priv => $self->handle_room ($_[2]), $src, $_[1], $_[3]);
427 }); 432 });
433
428 $self->register (e => sub { 434 $self->register (e => sub {
429 $self->{proto}->feed_event (msg_room => $self->handle_room ($_[1]), $_[0], $_[2]); 435 $self->{proto}->feed_event (msg_room => $self->handle_room ($_[1]), $_[0], $_[2]);
430 }); 436 });
437
438 $self->register (l => sub {
439
440 });
441
431 $self->register (l => sub { 442 $self->register (l => sub {
432 my $room = $self->handle_room ($_[0]); 443 my $room = $self->handle_room ($_[0]);
433 return if $room eq "-"; # things that shouln't happen 444 return if $room eq "-"; # things that shouln't happen
434 445
435 my $user = { 446 my $user = {
458 $u = { name => $username }; 469 $u = { name => $username };
459 } 470 }
460 471
461 $self->{proto}->feed_event (part_room => $room, $u); 472 $self->{proto}->feed_event (part_room => $room, $u);
462 }); 473 });
474
475 $self->register (b => sub {
476 my @arg = @_;
477 my $cc = {};
478 $self->{knuddels_rooms}->{$cc->{name}} = {};
479
480 my $last = $cc;
481 my $chan_cnt = 2;
482
483 while (@arg) {
484 $cc->{name} = shift @arg;
485
486 if ($cc->{name} =~ s/\cJ(\d+)$//) {
487 $cc->{user_count} = $1;
488 }
489 if ($cc->{name} =~ m/^"/) {
490 $cc->{name} = "$last->{name} $chan_cnt";
491 $chan_cnt++;
492
493 } else {
494 $last = $cc;
495 $chan_cnt = 2;
496 }
497
498
499 $cc->{flag1} = shift @arg;
500 $cc->{flag2} = shift @arg;
501
502 my $i = 0;
503
504 for (my $a = shift @arg; $a ne "-"; $a = shift @arg) {
505
506 if ($i == 0) {
507 $cc->{picture} = $a;
508 $cc->{full_flag} = 1 if $cc->{picture} =~ m/full/i;
509 }
510 $i++;
511 }
512
513 $self->{knuddels_rooms}->{$cc->{name}} = $cc;
514 $cc = {};
515 }
516
517 $self->{proto}->feed_event (room_list => $self->{knuddels_rooms});
518 });
519
520 $self->register (d => sub {
521 my $room = $self->handle_room ($_[0]);
522
523 delete $self->{room}->{lc $room};
524 $self->{room}->{lc $_[1]} = { name => $_[1] };
525
526 $self->{proto}->feed_event (change_room => $room, $_[1]);
527 });
528
529 $self->register ('6' => sub {
530 # i have no exact clue what this message does,
531 # but java-code seems to say i should do this:
532
533 warn "*********************** SIX MESSAGE GOT!!! CHECK PROTOCOL FOR OCCURENCE!!";
534 # delete $self->{room}->{lc ($self->handle_room ($_[0]))};
535 });
536
463 $self->register (a => sub { 537 $self->register (a => sub {
464 # the only_room stuff is from java-code, which has naughy semantics
465 if (not defined $self->{only_room}) {
466 $self->{only_room} = $_[0];
467 } else {
468 $self->{only_room} = "-";
469 }
470
471 $self->{my_nick} = $_[1]; # i'm really _not_ shure about this 538 $self->{my_nick} = $_[1]; # i'm really _not_ shure about this
472 539
473 my $ri = $self->{room}->{lc $_[0]} = { 540 my $ri = $self->{room}->{lc $_[0]} = {
541 name => $_[0],
474 picture => $_[7], 542 picture => $_[7],
475 }; 543 };
476 544
477 $self->{proto}->feed_event (room_info => $_[0], $ri); 545 $self->{proto}->feed_event (room_info => $_[0], $ri);
478 }); 546 });
547
479 $self->register (u => sub { 548 $self->register (u => sub {
480 my $room = shift; 549 my $room = shift;
481 my $rl = $self->{user_lists}->{lc $room} = {}; 550 my $rl = $self->{user_lists}->{lc $room} = {};
482 my $cur_u = {}; 551 my $cur_u = {};
483 552
559 my ($self, $url, $unknown) = @_; 628 my ($self, $url, $unknown) = @_;
560 629
561 $self->command ("t", "V8.6a", $url || "http://www.knuddels.de/applet.html?v=86a&c=0", $unknown || 3); 630 $self->command ("t", "V8.6a", $url || "http://www.knuddels.de/applet.html?v=86a&c=0", $unknown || 3);
562} 631}
563 632
564=item $client->set_nick ($room, $nick, $password) 633=item $client->enter_room ($room, $nick, $password)
565 634
566Registers the nick with the given password. 635Enters a room C<$room> with C<$nick> and C<$password>.
636(for joining multiple rooms call this multiple times)
567 637
568=cut 638NOTE: i won't allow joins to multiple rooms with different nick/password's,
639the java client reacted very confused.. don't know whether the server supports this.
569 640
570sub set_nick { 641=cut
642
643sub enter_room {
571 my ($self, $room, $nick, $password) = @_; 644 my ($self, $room, $nick, $password) = @_;
572 645
646 if (defined $self->{knuddels_nick} and $self->{knuddels_nick} ne $nick) {
647 return # i don't think knuddels-server will be happy if
648 # we join multiple rooms on multiple accounts over 1 connection
649 }
650
573 exists $self->{login_challenge} or Carp::croak "set_nick can only be called after a login event"; 651 exists $self->{login_challenge} or Carp::croak "set_nick can only be called after a login event";
574 652
575 $self->{knuddels_nick} = $nick; 653 $self->{knuddels_nick} = $nick;
654 print "ENTER: $room\n";
576 $self->command ("n", $room, $nick, Net::Knuddels::hash_pw $self->{login_challenge}, $password); 655 $self->command ("n", $room, $nick, Net::Knuddels::hash_pw $self->{login_challenge}, $password);
577} 656}
578 657
579=item $client->send_whois ($nick) 658=item $client->send_whois ($nick)
580 659
595 674
596=cut 675=cut
597sub send_room_msg { 676sub send_room_msg {
598 my ($self, $room, $message) = @_; 677 my ($self, $room, $message) = @_;
599 678
600 print "SEND ROOM: $room : $message\n"; 679 print "SEND ROOM:$room\: $message\n";
601 $self->command ("e", $room, $message); 680 $self->command ("e", $room, $message);
602} 681}
603 682
604 683
605=item $client->send_priv_msg ($nick, $room, $message) 684=item $client->send_priv_msg ($nick, $room, $message)
608 687
609=cut 688=cut
610sub send_priv_msg { 689sub send_priv_msg {
611 my ($self, $nick, $room, $message) = @_; 690 my ($self, $nick, $room, $message) = @_;
612 691
613 print "SEND ROOM: $room : /p $nick:$message\n"; 692 print "SEND PRIV:$room: /p $nick:$message\n";
614 $self->command ("e", $room, "/p $nick:$message"); 693 $self->command ("e", $room, "/p $nick:$message");
694}
695
696=item $client->send_join_room ($oldroom, $room)
697
698 Sends the server a join command for C<$room>. This
699 will result in a room change from C<$oldroom> to C<$room>.
700
701=cut
702sub send_join_room {
703 my ($self, $old_room, $room) = @_;
704
705 print "JOIN ROOM: #room : /go $room\n";
706 $self->command ("e", $old_room, "/go $room");
707}
708
709=item $client->send_exit_room ($room)
710
711 Exits C<$room> completly. (can be seen as counter method for C<enter_room ()>);
712
713=cut
714sub send_exit_room {
715 my ($self, $room) = @_;
716 print "EXIT EOORM: $room \n";
717 $self->command ("w", $room, "\0", "\0");
718 delete $self->{room}->{lc $room};
615} 719}
616 720
617=item $client->register ($type => $cb) 721=item $client->register ($type => $cb)
618 722
619See L<Net::Knuddels::Protocol::register>. The following extra events will 723See L<Net::Knuddels::Protocol::register>. The following extra events will

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines