Annotation of RasLoadTester/ras-load, revision 1.1

1.1     ! snw         1: #!/usr/bin/env perl
        !             2: 
        !             3: use Net::OSCAR;
        !             4: use Getopt::Long;
        !             5: 
        !             6: my $bot_version = "0.0.1";
        !             7: my $botsn = '';
        !             8: my $botct = 1;
        !             9: my $botno = 0;
        !            10: my $oscar = '';
        !            11: my $online = 0;
        !            12: my $room = '';
        !            13: 
        !            14: sub signon_done
        !            15: {
        !            16:     my ($oscar) = @_;
        !            17:     
        !            18:     print "$botsn:  signon done\n";
        !            19:     $online = 1;
        !            20:     $oscar->chat_join("General", 5);    
        !            21: }
        !            22: 
        !            23: sub chat_joined
        !            24: {
        !            25:     my($oscar, $chatname, $chat) = @_;
        !            26: 
        !            27:     $room = $chat;
        !            28:     
        !            29:     print "$botsn:  chat joined\n";
        !            30: }
        !            31: 
        !            32: sub chat_im_in
        !            33: {
        !            34: 
        !            35: }
        !            36: 
        !            37: sub im_in
        !            38: {
        !            39:     my($oscar, $sender, $message, $is_away) = @_;
        !            40:     print "$botsn:  message received from $sender\n";
        !            41: }
        !            42: 
        !            43: sub oscar_error
        !            44: {
        !            45:     my($oscar, $connection, $error, $description, $fatal) = @_;
        !            46: 
        !            47:     if($fatal != 0) {
        !            48:         print "$botsn:  fatal OSCAR error:  $description\n";        
        !            49:     }
        !            50:     else {
        !            51:         print "$botsn:  recoverable OSCAR error: $description\n";
        !            52:     }
        !            53: }
        !            54: 
        !            55: sub simulate_load
        !            56: {
        !            57:     my @services = ('im', 'chat', 'dice');    
        !            58:     my $tgtno = 0 + int(rand(($botct + 1) - 0));
        !            59:     my $tgtsn = "ldtest$tgtno";
        !            60: 
        !            61:     my $tgtsvc = $services[rand @services];
        !            62:     
        !            63:     if($tgtsvc eq "im") {
        !            64:         $oscar->send_im($tgtsn, "load test message");
        !            65:     }
        !            66:     elsif($tgtsvc eq "chat") {
        !            67:         if(ref($room) eq "Net::OSCAR::Connection::Chat") {
        !            68:             $room->chat_send("load test message");            
        !            69:         }
        !            70:     }
        !            71:     elsif($tgtsvc eq 'dice') {
        !            72:         if(ref($room) eq "Net::OSCAR::Connection::Chat") {
        !            73:             $room->chat_send("//roll-dice15-sides999");
        !            74:         }
        !            75:     }
        !            76:     sleep 1;
        !            77:     
        !            78: }
        !            79: 
        !            80: sub main
        !            81: {
        !            82:     my $botpw = '';
        !            83:     my $botsrv = '';
        !            84:     
        !            85:     GetOptions("botno=n" => \$botno,
        !            86:                "botct=n" => \$botct,
        !            87:                "aimpw=s" => \$botpw,
        !            88:                "aimhost=s" => \$botsrv)
        !            89:         or die("error in command line arguments");
        !            90: 
        !            91:     $botsn = "ldtest$botno";
        !            92:     
        !            93:     my %signon = (
        !            94:         screenname => $botsn,
        !            95:         password => $botpw,
        !            96:         host => $botsrv,
        !            97:         ); 
        !            98: 
        !            99:     $oscar = Net::OSCAR->new();
        !           100:     my $realno = $botno + 1;
        !           101:     
        !           102:     print "$botsn: $realno of $botct on host $botsrv\n";   
        !           103:     
        !           104:     $oscar->set_callback_signon_done(\&signon_done);
        !           105:     $oscar->set_callback_chat_joined(\&chat_joined);
        !           106:     $oscar->set_callback_chat_im_in(\&chat_im_in);
        !           107:     $oscar->set_callback_im_in(\&im_in);
        !           108:     $oscar->set_callback_error(\&oscar_error);
        !           109:     $oscar->signon(%signon);
        !           110: 
        !           111:     while(1) {
        !           112:         $oscar->do_one_loop();
        !           113:         if($online == 1) {
        !           114:             simulate_load();
        !           115:         }
        !           116:     }
        !           117: }
        !           118: 
        !           119: main()
        !           120:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>