AnyEvent-XMPP

 view release on metacpan or  search on metacpan

t/z_05_muc2.t  view on Meta::CPAN

my $sr_created    = 0;
my $sr_pass_field = 0;
my $sr_config_ok  = 0;

my $sjo_join_error_type = '';

my $sjop_error = '';
my $sjop_join  = 0;

my $nick_info = {};
my $second = 0;

$cl->state (['two_accounts_ready'], step_join => {}, undef, sub {
   $muc->join_room ($cl->{acc}->connection, $ROOM, "test1owner");
   my $guard;
   $guard = $muc->reg_cb (
      enter => sub {
         my ($muc, $room, $user) = @_;

         if ($user->did_create_room) {
            $sjr_created = 1;
            $cl->{room} = $room;
            $cl->state_done ('step_join_done');
         } else {
            $cl->finish;
         }

         undef $guard;
      }, join_error => sub {
         my ($muc, $room, $error) = @_;

         $sjr_error = $error->string;
         undef $guard;
      }
   );
});

my $room_cnt_after_leave;

$cl->state (['step_join_done'], step_rejoin => {}, undef, sub {
   $cl->{room}->send_part ("rejoin");
   my $guard;
   $guard = $muc->reg_cb (
      enter => sub {
         my ($muc, $room, $user) = @_;

         $cl->finish; # error!
         undef $guard;
      },
      after_leave => sub {
         my ($muc, $room) = @_;

         $muc->join_room ($cl->{acc}->connection, $ROOM, "test1owner",
                          create_instant => 0);
      },
      leave => sub {
         my ($muc, $room) = @_;

         $room_cnt_after_leave = scalar ($muc->get_rooms ($cl->{acc}->connection));
      },
      locked => sub {
         my ($muc, $room) = @_;

         $cl->{room} = $room;
         $sr_created = 1;
         $room->request_configuration (sub {
            my ($form, $error) = @_;

            if ($form) {

               if ($form->get_field ('muc#roomconfig_passwordprotectedroom')
                   && $form->get_field ('muc#roomconfig_roomsecret')) {

                  $sr_pass_field = 1;

                  my $af = AnyEvent::XMPP::Ext::DataForm->new;
                  $af->make_answer_form ($form);
                  $af->set_field_value ('muc#roomconfig_passwordprotectedroom', 1);
                  $af->set_field_value ('muc#roomconfig_roomsecret', "abc123");
                  $af->clear_empty_fields;

                  $room->send_configuration ($af, sub {
                     my ($ok, $error) = @_;
                     if ($error) {
                        $sr_error = $error->string;
                        $cl->finish;
                     } else {
                        $sr_config_ok = 1;
                        $cl->state_done ('step_rejoin_done');
                     }
                  });

               } else {
                  $cl->finish;
               }
            }
         });

         undef $guard;
      },
      join_error => sub {
         my ($muc, $room, $error) = @_;
         $sr_error = $error->string;
         undef $guard;
         $cl->finish;
      }
   );

});

$cl->state (['step_rejoin_done'], 'step_join_occ', {}, undef, sub {
   $muc->join_room ($cl->{acc2}->connection, $ROOM, "test2user");
   my $guard;
   $guard = $muc->reg_cb (
      enter => sub {
         my ($muc, $room, $user) = @_;
         undef $guard;
         $cl->finish
      },
      join_error => sub {
         my ($muc, $room, $error) = @_;



( run in 3.606 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )