in reply to Re: IRC Client not Joining Channel
in thread IRC Client not Joining Channel
#!/usr/bin/perl -w use strict; use Gtk2 '-init'; use Glib qw/TRUE FALSE/; use Gtk2::Gdk::Keysyms; use IO::Socket; use Gtk2::Helper; use Parse::IRC; #Global Variables my $sock; my $chat_textview; my $chat_entry; my $chat_send_sig; my $nick = "LOVERMET"; my $chat_state = 'Connect'; my $chat_button; my $watch; my $tag; my $login = $nick; my $job = 3; my $channel = "#GRRUVI"; my $irc = "irc.servercentral.net"; my $parser = Parse::IRC->new(public => 1); my %dispatch = ('001' => \&irc_001); #-------------------Main Loop------------------- &chat_build; Gtk2->main; ####################CHAT BLOCK#################### #-------------------chat Build------------------- sub chat_build { my $chat_window = Gtk2::Window->new('toplevel'); $chat_window->set_title('Chat Client'); $chat_window->set_position('center'); $chat_window->set_default_size( 300, 300 ); $chat_window->signal_connect(delete_event=> sub{ if (defined $sock){ close $sock; $chat_state='Connect'; Gtk2::Helper->remove_watch($watch); }; return FALSE; }); $chat_entry = Gtk2::Entry->new; my $chat_vbox = Gtk2::VBox->new; if ($job != 2){ my $menu_edit = Gtk2::Menu->new(); $menu_edit->append(Gtk2::TearoffMenuItem->new); if ($job == 1){ my $shortcut1 = Gtk2::MenuItem->new('Ctrl+C = Confirm Visu +al: Aircraft'); my $shortcut2 = Gtk2::MenuItem->new('Ctrl+L = Lost Visual: + Aircraft'); my $shortcut3 = Gtk2::MenuItem->new('Ctrl+P = Potential Co +nflict: Aircraft'); my $shortcut4 = Gtk2::MenuItem->new('Ctrl+N = No Visual: A +ircraft'); $shortcut1->signal_connect('activate' => sub {$chat_entry- +>set_text('Confirm Visual: Aircraft '); $chat_entry->set_position(25) +}); $shortcut2->signal_connect('activate' => sub {$chat_entry- +>set_text('Lost Visual: Aircraft '); $chat_entry->set_position(22)}); $shortcut3->signal_connect('activate' => sub {$chat_entry- +>set_text('Potential Conflict: Aircraft '); $chat_entry->set_position +(29)}); $shortcut4->signal_connect('activate' => sub {$chat_entry- +>set_text('No Visual: Aircraft '); $chat_entry->set_position(20)}); $menu_edit->append($shortcut1); $menu_edit->append($shortcut2); $menu_edit->append($shortcut3); $menu_edit->append($shortcut4); } if ($job == 3){ my $shortcut1 = Gtk2::MenuItem->new('Ctrl+M = Mandatory 1 +minute query: All spotters report status'); my $shortcut2 = Gtk2::MenuItem->new('Ctrl+L = Loss of visu +al 30 sec query: All spotters report status'); my $shortcut3 = Gtk2::MenuItem->new('Ctrl+D = Dual visual +contact confirmed: Aircraft'); my $shortcut4 = Gtk2::MenuItem->new('Ctrl+C = LOST VISUAL +CONTINGENCY INITIATED: Aircraft'); my $shortcut5 = Gtk2::MenuItem->new('Ctrl+E = EMERGENCY LA +NDING CONTINGENCY INITIATED: Aircraft'); $shortcut1->signal_connect('activate' => sub {$chat_entry- +>set_text('Mandatory 1 minute query: All spotters report status '); $ +chat_entry->set_position(53)}); $shortcut2->signal_connect('activate' => sub {$chat_entry- +>set_text('Loss of visual 30 sec query: All spotters report status ') +; $chat_entry->set_position(56)}); $shortcut3->signal_connect('activate' => sub {$chat_entry- +>set_text('Dual visual contact confirmed: Aircraft '); $chat_entry->s +et_position(40)}); $shortcut4->signal_connect('activate' => sub {$chat_entry- +>set_text('LOST VISUAL CONTINGENCY INITIATED: Aircraft '); $chat_entr +y->set_position(44)}); $shortcut5->signal_connect('activate' => sub {$chat_entry- +>set_text('EMERGENCY LANDING CONTINGENCY INITIATED: Aircraft '); $cha +t_entry->set_position(50)}); $menu_edit->append($shortcut1); $menu_edit->append($shortcut2); $menu_edit->append($shortcut3); $menu_edit->append($shortcut4); $menu_edit->append($shortcut5); } my $menu_item_edit= Gtk2::MenuItem->new('_Shortcuts'); $menu_item_edit->set_submenu ($menu_edit); my $menu_bar = Gtk2::MenuBar->new; $menu_bar->append($menu_item_edit); $chat_vbox->pack_start( $menu_bar, FALSE, FALSE, 0 ); } my $chat_scroll = Gtk2::ScrolledWindow->new; $chat_scroll->set_shadow_type( 'etched-out'); $chat_textview = Gtk2::TextView->new; #$chat_entry = Gtk2::Entry->new; my $chat_buffer = $chat_textview->get_buffer; $chat_buffer->create_mark( 'end', $chat_buffer->get_end_iter, FALS +E ); $chat_buffer->signal_connect(insert_text => sub { $chat_textview->scroll_to_mark( $chat_buffer->get_mark('end'), + 0.0, TRUE, 0, 0.5 ); }); $chat_button = Gtk2::Button->new; $chat_button->set_label($chat_state); # allows for sending each line with an enter keypress $chat_send_sig = $chat_entry->signal_connect ('key-press-event' => + sub { my ($widget,$event)= @_; if( $event->keyval() == 65293){ # a return key press my $text = $chat_entry->get_text; if(defined $sock){ print $sock "PRIVMSG $channel :$tex +t\r\n";} $chat_entry->set_text(''); $chat_entry->set_position(0); post($nick, $text); } }); $chat_entry->signal_handler_block($chat_send_sig); #not connected +yet $chat_entry->set_editable(0); $chat_textview->set_editable(0); $chat_textview->set_cursor_visible(0); $chat_textview->set_wrap_mode('word'); $chat_scroll->add($chat_textview); $chat_vbox->add($chat_scroll); $chat_vbox->pack_start( $chat_entry, FALSE, FALSE, 0 ); $chat_vbox->pack_start( $chat_button, FALSE, FALSE, 0 ); $chat_window->add($chat_vbox); $chat_window->show_all; $chat_button->signal_connect("clicked" => sub { if ($chat_state eq 'Connect') { $chat_button->set_label('Disconnect'); $chat_state='Disconnect'; &connecting; } else { $chat_button->set_label('Connect'); $chat_state='Connect'; &disconnecting; } }); #capures the shortcuts if ($job == 1){ my @chat_accels = ( #Spotter only #Confirm Aircraft 1-5 {key => 'C', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Confirm Visual: Aircraft "); $chat_entry->set_positi +on(25)}}, #Lost Aircraft 1-5 {key => 'L', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Lost Visual: Aircraft "); $chat_entry->set_position( +22)}}, #Potential Conflict Aircraft 1-5 {key => 'P', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Potential Conflict: Aircraft "); $chat_entry->set_po +sition(29)}}, #No visual Aircraft 1-5 {key => 'N', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("No Visual: Aircraft "); $chat_entry->set_position(20 +)}} ); my $chat_accel_group = Gtk2::AccelGroup->new; foreach my $a (@chat_accels) { $chat_accel_group->connect ($Gtk2::Gdk::Keysyms{$a->{key}} +, $a->{mod}, 'visible', $a->{func}); } $chat_window->add_accel_group ($chat_accel_group); }; if ($job == 3){ my @chat_accels = ( #Met Base #Manditory query {key => 'M', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Mandatory 1 minute query: All spotters report status + "); $chat_entry->set_position(53)}}, #Loss of Visual {key => 'L', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Loss of visual 30 sec query: All spotters report sta +tus "); $chat_entry->set_position(56)}}, #Dual visual contact confirmed {key => 'D', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("Dual visual contact confirmed: Aircraft "); $chat_en +try->set_position(40)}}, #LoV Contigency initiated 1-5 {key => 'C', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("LOST VISUAL CONTINGENCY INITIATED: Aircraft "); $cha +t_entry->set_position(44)}}, #Emergency Landing {key => 'E', mod => 'control-mask', func => sub {$chat_ent +ry->append_text("EMERGENCY LANDING CONTINGENCY INITIATED: Aircraft ") +; $chat_entry->set_position(50)}} ); my $chat_accel_group = Gtk2::AccelGroup->new; foreach my $a (@chat_accels) { $chat_accel_group->connect ($Gtk2::Gdk::Keysyms{$a->{key}} +, $a->{mod}, 'visible', $a->{func}); } $chat_window->add_accel_group ($chat_accel_group); #open chat output file: month day hour minute second if ($job == 3){ my @time = gmtime; my $m = $time[4]+1; my $d = $time[3]; my $h = $time[2]; my $mi = $time[1]; my $s = $time[0]; $m = "0$m" if $m < 9; $d = "0$d" if $d < 9; $h = "0$h" if $h < 9; $mi = "0$mi" if $mi < 9; $s = "0$s" if $s < 9; my $output = "$m$d$h$mi$s"; open(CHAT,'>', $output); } }; return; } #-------------------Connect to IRC Server------------------- sub connecting { # Connect to the IRC server. $sock = new IO::Socket::INET( PeerAddr => $irc, PeerPort => 6667, Proto => 'tcp', ) or die "Can't connect\n"; # Log on to the server. print $sock "NICK $nick\r\n"; print $sock "USER $login 8 * :CoCoNUE Member\r\n"; $watch = Gtk2::Helper->add_watch( fileno $sock, 'in', \&in +coming_data, $sock ); $chat_entry->set_editable(1); $chat_entry->grab_focus; $chat_entry->signal_handler_unblock ($chat_send_sig); Gtk2->main_iteration while Gtk2->events_pending; return 1; } #-------------------Watch for IRC Inputs------------------- sub incoming_data { my ( $fd, $condition, $fh ) = @_; print "its going\n"; if ( $condition eq 'in' ) { my $input; sysread $fh, $input, 1000000; #chop $input; $input =~ s/\r\n//g; my $hashref = $parser->parse( $input ); SWITCH: { my $type = lc $hashref->{command}; my @args; push @args, $hashref->{prefix} if $hashref->{prefix}; push @args, @{ $hashref->{params} }; if ( defined $dispatch{$type} ) { $dispatch{$type}->(@args); last SWITCH; } print STDOUT join( ' ', "irc_$type:", @args ), "\n"; } } return 1; } sub irc_001 { print STDOUT "Connected to $_[0]\n"; print $sock "JOIN $channel\r\n"; return 1; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: IRC Client not Joining Channel
by assemble (Friar) on Mar 04, 2008 at 17:35 UTC | |
by deadpickle (Pilgrim) on Mar 04, 2008 at 19:47 UTC |