]>
git.saurik.com Git - wxWidgets.git/blob - samples/wxsocket/server.cpp
3 * Purpose: wxSocket: server demo
4 * Author: LAVAUX Guilhem
7 * Copyright: (C) 1997, LAVAUX Guilhem
11 #pragma implementation
15 // For compilers that support precompilation, includes "wx.h".
16 #include "wx/wxprec.h"
26 #include "wx/socket.h"
28 #if defined(__WXMOTIF__) || defined(__WXGTK__)
29 #include "mondrian.xpm"
32 // Define a new application type
33 class MyApp
: public wxApp
40 // Define a new frame type
41 class MyFrame
: public wxFrame
48 MyFrame(wxFrame
*frame
);
50 void Menu_Exit(wxCommandEvent
& evt
);
51 void OnSockRequest(wxSocketEvent
& evt
);
52 void OnSockRequestServer(wxSocketEvent
& evt
);
53 void ExecTest1(wxSocketBase
*sock_o
);
54 void UpdateStatus(int incr
);
57 #define SKDEMO_QUIT 101
58 #define SKDEMO_SOCKET_SERV 102
59 #define SKDEMO_SOCKET 103
61 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
62 EVT_MENU(SKDEMO_QUIT
, MyFrame::Menu_Exit
)
63 EVT_SOCKET(SKDEMO_SOCKET_SERV
, MyFrame::OnSockRequestServer
)
64 EVT_SOCKET(SKDEMO_SOCKET
, MyFrame::OnSockRequest
)
69 // `Main program' equivalent, creating windows and returning main app frame
70 bool MyApp::OnInit(void)
72 // Create the main frame window
73 MyFrame
*frame
= new MyFrame(NULL
);
76 frame
->SetIcon(wxICON(mondrian
));
79 wxMenu
*file_menu
= new wxMenu
;
81 file_menu
->Append(SKDEMO_QUIT
, "E&xit");
82 wxMenuBar
*menu_bar
= new wxMenuBar
;
83 menu_bar
->Append(file_menu
, "File");
84 frame
->SetMenuBar(menu_bar
);
86 // Make a panel with a message
87 (void)new wxPanel(frame
, 0, 0, 300, 100);
92 // Return the main frame window
96 extern wxList wxPendingDelete
;
98 void MyFrame::OnSockRequest(wxSocketEvent
& evt
)
100 wxSocketBase
*sock
= evt
.Socket();
102 printf("OnSockRequest OK\n");
103 printf("OnSockRequest (event = %d)\n",evt
.SocketEvent());
104 switch (evt
.SocketEvent()) {
105 case wxSocketBase::EVT_READ
:
108 sock
->Read((char *)&c
, 1);
113 case wxSocketBase::EVT_LOST
:
115 printf("Destroying socket\n");
116 wxPendingDelete
.Append(sock
);
120 printf("OnSockRequest Exiting\n");
121 sock
->SetNotify(wxSocketBase::REQ_READ
| wxSocketBase::REQ_LOST
);
124 void MyFrame::OnSockRequestServer(wxSocketEvent
& evt
)
127 wxSocketServer
*server
= (wxSocketServer
*) evt
.Socket();
129 printf("OnSockRequestServer OK\n");
131 sock2
= server
->Accept();
135 sock2
->SetFlags(wxSocketBase::NONE
);
137 sock2
->SetEventHandler(*this, SKDEMO_SOCKET
);
138 server
->SetNotify(wxSocketBase::REQ_ACCEPT
);
142 // My frame Constructor
143 MyFrame::MyFrame(wxFrame
*frame
):
144 wxFrame(frame
, -1, "wxSocket sample (server)", wxDefaultPosition
,
151 wxSocketHandler::Master();
153 sock
= new wxSocketServer(addr
);
154 wxSocketHandler::Master().Register(sock
);
155 sock
->SetNotify(wxSocketBase::REQ_ACCEPT
);
156 sock
->SetEventHandler(*this, SKDEMO_SOCKET_SERV
);
169 // Intercept menu commands
170 void MyFrame::Menu_Exit(wxCommandEvent
& WXUNUSED(event
))
175 void MyFrame::ExecTest1(wxSocketBase
*sock_o
)
177 char *buf
= new char[50];
180 l
= sock_o
->Read(buf
, 50).LastCount();
181 sock_o
->Write(buf
, l
);
184 void MyFrame::UpdateStatus(int incr
)
188 sprintf(s
, "%d clients connected", nb_clients
);