Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / .pc / hashbang.patch / samples / socket / wxSocketServerDatagram.pl
1 #############################################################################
2 ## Name:        samples/socket/wxSocketServerDatagram.pl
3 ## Purpose:     wxDatagramSocket demo
4 ## Author:      Graciliano M. P., Mattia Barbon
5 ## Created:     07/02/2004
6 ## RCS-ID:      $Id: wxSocketServerDatagram.pl 2057 2007-06-18 23:03:00Z mbarbon $
7 ## Copyright:   (c) 2004 Graciliano M. P., Mattia Barbon
8 ## Licence:     This program is free software; you can redistribute it and/or
9 ##              modify it under the same terms as Perl itself
10 #############################################################################
11
12 use Wx;
13 use Wx::Socket ;
14
15 package MyApp;
16
17   use vars qw(@ISA);
18   @ISA=qw(Wx::App);
19
20 sub OnInit {
21   my( $this ) = @_;
22
23   my( $frame ) = MyFrame->new( "wxSocket Minimal demo",
24                                Wx::Point->new( 50, 50 ),
25                                Wx::Size->new( 450, 350 )
26                              );
27
28   $this->SetTopWindow( $frame );
29   $frame->Show( 1 );
30
31   1;
32 }
33
34 package MyFrame;
35   use vars qw(@ISA);
36   @ISA=qw(Wx::Frame);
37
38   use Wx qw(:sizer wxTE_MULTILINE );
39   use Wx::Event qw(EVT_BUTTON) ;
40
41   use Wx qw(wxDefaultPosition wxDefaultSize wxDEFAULT wxNORMAL);
42
43 sub new {
44   my( $class ) = shift;
45   my( $this ) = $class->SUPER::new( undef, -1, $_[0], $_[1], $_[2] );
46
47   my $top_s = Wx::BoxSizer->new( wxVERTICAL );
48
49   my $text = Wx::TextCtrl->new( $this , -1, '' , wxDefaultPosition, [200,-1] , wxTE_MULTILINE|wxTE_RICH2 );
50   my $button = Wx::Button->new( $this, -1, 'Start' );
51
52   $this->{TEXT} = $text ;
53
54   $top_s->Add( $text , 1, wxGROW|wxALL, 5 );
55   $top_s->Add( $button , 0, wxGROW|wxALL, 0);
56
57   $this->SetSizer( $top_s );
58   $this->SetAutoLayout( 1 );
59
60   EVT_BUTTON( $this, $button, \&OnConnect );
61
62   return( $this ) ;
63
64   $this;
65 }
66
67
68 #############
69 # ONCONNECT #
70 #############
71
72 sub OnConnect {
73   my $this = shift ;
74
75   use Wx qw(:socket) ;
76   use Wx::Event qw(EVT_SOCKET_INPUT) ;
77
78   my $addr = Wx::IPV4address->new;
79   $addr->SetAnyAddress;
80   $addr->SetService( 4444 );
81   my $sock = Wx::DatagramSocket->new( $addr );
82
83   EVT_SOCKET_INPUT($this , $sock , \&onConnect ) ;
84
85   my $stat = $sock->Ok ;
86   $this->{TEXT}->AppendText("Ok: <$stat>\n") ;
87   if (! $stat) { return ;}
88
89 }
90
91 sub onConnect {
92   my ( $sock , $this , $evt ) = @_ ;
93
94   my $addr = Wx::IPV4address->new;
95   my $buf = '';
96   $sock->RecvFrom($addr, $buf, 1000) ;
97   my $addr_str = $addr->GetHostname . ' ' . $addr->GetService;
98
99   $this->{TEXT}->AppendText("-------------------------\n") ;    
100   $this->{TEXT}->AppendText("New Client\n") ;
101   $this->{TEXT}->AppendText("  Peer: <$addr_str>\n") ;
102
103   $sock->SendTo($addr, "This is a data test!\n", 21) ;
104   $this->{TEXT}->AppendText("\n-------------------------(closed)\n") ;
105 }
106
107 package main;
108
109   my( $app ) = MyApp->new();
110   $app->MainLoop();
111
112 exit ;
113
114 # Local variables: #
115 # mode: cperl #
116 # End: #