############################################################################# ## Name: samples/socket/wxSocketServer.pl ## Purpose: wxSocketServer minimal demo ## Author: Graciliano M. P. ## Created: 06/02/2003 ## RCS-ID: $Id: wxSocketServer.pl 2057 2007-06-18 23:03:00Z mbarbon $ ## Copyright: (c) 2003-2004 Graciliano M. P. ## Licence: This program is free software; you can redistribute it and/or ## modify it under the same terms as Perl itself ############################################################################# BEGIN { eval { require blib; 'blib'->import; } } use Wx; use Wx::Socket ; package MyApp; use vars qw(@ISA); @ISA=qw(Wx::App); sub OnInit { my( $this ) = @_; my( $frame ) = MyFrame->new( "wxSocket Minimal demo", Wx::Point->new( 50, 50 ), Wx::Size->new( 450, 350 ) ); $this->SetTopWindow( $frame ); $frame->Show( 1 ); 1; } package MyFrame; use vars qw(@ISA); @ISA=qw(Wx::Frame); use Wx qw(:sizer wxTE_MULTILINE ); use Wx::Event qw(EVT_BUTTON) ; use Wx qw(wxDefaultPosition wxDefaultSize wxDEFAULT wxNORMAL); sub new { my( $class ) = shift; my( $this ) = $class->SUPER::new( undef, -1, $_[0], $_[1], $_[2] ); my $top_s = Wx::BoxSizer->new( wxVERTICAL ); my $text = Wx::TextCtrl->new( $this , -1, '' , wxDefaultPosition, [200,-1] , wxTE_MULTILINE ); my $button = Wx::Button->new( $this, -1, 'Start' ); $this->{TEXT} = $text ; $top_s->Add( $text , 1, wxGROW|wxALL, 5 ); $top_s->Add( $button , 0, wxGROW|wxALL, 0); $this->SetSizer( $top_s ); $this->SetAutoLayout( 1 ); EVT_BUTTON( $this, $button, \&OnConnect ); return( $this ) ; $this; } ############# # ONCONNECT # ############# sub OnConnect { my $this = shift ; use Wx qw(:socket) ; use Wx::Event qw(EVT_SOCKET_CONNECTION) ; my $sock = Wx::SocketServer->new('localhost',5050,wxSOCKET_WAITALL); EVT_SOCKET_CONNECTION($this , $sock , \&onConnect ) ; my $stat = $sock->Ok ; $this->{TEXT}->AppendText("Ok: <$stat>\n") ; if (! $stat) { return ;} } sub onConnect { my ( $sock , $this , $evt ) = @_ ; my $client = $sock->Accept(0) ; my @lcaddr = $client->GetLocal ; my @praddr = $client->GetPeer ; $this->{TEXT}->AppendText("-------------------------\n") ; $this->{TEXT}->AppendText("New Client\n") ; $this->{TEXT}->AppendText(" Local: <@lcaddr>\n") ; $this->{TEXT}->AppendText(" Peer: <@praddr>\n") ; $client->Write("This is a data test!\n") ; $client->Close ; $client->Destroy ; $this->{TEXT}->AppendText("\n-------------------------(closed)\n") ; } package main; my( $app ) = MyApp->new(); $app->MainLoop(); exit ; # Local variables: # # mode: cperl # # End: #