6 DEFINE_EVENT_TYPE(EVT_SOCKET_INPUT
)
7 DEFINE_EVENT_TYPE(EVT_SOCKET_WRITE
)
8 DEFINE_EVENT_TYPE(EVT_SOCKET_LOST
)
10 BEGIN_EVENT_TABLE(MonitorSocket
, wxEvtHandler
)
11 EVT_SOCKET(wxID_ANY
, MonitorSocket::OnSocketEvent
)
14 MonitorSocket::MonitorSocket() : wxEvtHandler(){
17 bool MonitorSocket::Connect(const wxString
& host
, const unsigned int port
){
18 wxIPV4address address
;
19 address
.Hostname(host
);
20 address
.Service(port
);
21 socket
= new wxSocketClient();
22 socket
->SetEventHandler(*this, wxID_ANY
);
23 socket
->SetFlags(wxSOCKET_NOWAIT
);
24 socket
->SetNotify(wxSOCKET_CONNECTION_FLAG
|
28 bool state
= socket
->Connect(address
,true /* wait and block */);
34 void MonitorSocket::Disconnect(){
38 void MonitorSocket::OnSocketEvent(wxSocketEvent
& event
){
39 switch(event
.GetSocketEvent()){
40 case wxSOCKET_INPUT
: {
43 while(socket
->IsData()){
44 buffer
.Append(Read());
51 wxCommandEvent
event(EVT_SOCKET_INPUT
,wxID_ANY
);
52 event
.SetEventObject(this);
53 event
.SetString(buffer
);
59 case wxSOCKET_CONNECTION
:
64 void MonitorSocket::Write(const wxString
& cmd
, bool block
){
68 //wxString tmp = cmd + wxT("\r\n");
69 wxString tmp
= cmd
+ wxT("\n");
70 socket
->Write(tmp
.fn_str(),tmp
.Len());
72 wxCommandEvent
event(EVT_SOCKET_WRITE
,wxID_ANY
);
73 event
.SetEventObject(this);
78 wxString
MonitorSocket::Read(){
80 socket
->Read(buf
, 1024);
81 buf
[socket
->LastCount()] = '\0';
83 wxString
buffer(buf
, wxConvUTF8
);
86 found
= buffer
.Find(wxT("[K"));
88 buffer
.Remove(0,found
+ 2);
90 //buffer.Replace(wxT("\r\n"),wxT(""));
91 buffer
.Trim().Trim(false);
95 wxString
MonitorSocket::ReadAll(){
98 socket
->WaitForRead(0,250);
99 } while((found
= data
.Find(wxT("(qemu)"))) < 0);
101 wxString tmp
= data
.Left(found
);
103 data
.Remove(0,found
+ 6);
108 void MonitorSocket::AddEventHandler(wxEvtHandler
*handler
){
109 evtHandlers
.Add(handler
);
112 void MonitorSocket::SendEvent(wxCommandEvent
& event
){
113 for(int i
= 0; i
< evtHandlers
.GetCount(); i
++){
114 evtHandlers
.Item(i
)->ProcessEvent(event
);