7 #define EOL wxT("\r\n \r\n")
12 DEFINE_EVENT_TYPE(EVT_SOCKET_INPUT
)
13 DEFINE_EVENT_TYPE(EVT_SOCKET_WRITE
)
14 DEFINE_EVENT_TYPE(EVT_SOCKET_LOST
)
16 BEGIN_EVENT_TABLE(MonitorSocket
, wxEvtHandler
)
17 EVT_SOCKET(wxID_ANY
, MonitorSocket::OnSocketEvent
)
20 MonitorSocket::MonitorSocket() : wxEvtHandler(){
23 bool MonitorSocket::Connect(const wxString
& host
, const unsigned int port
){
24 wxIPV4address address
;
25 address
.Hostname(host
);
26 address
.Service(port
);
27 socket
= new wxSocketClient();
28 socket
->SetEventHandler(*this, wxID_ANY
);
29 socket
->SetFlags(wxSOCKET_NOWAIT
);
30 socket
->SetNotify(wxSOCKET_CONNECTION_FLAG
|
34 bool state
= socket
->Connect(address
,true /* wait and block */);
40 void MonitorSocket::Disconnect(){
44 void MonitorSocket::OnSocketEvent(wxSocketEvent
& event
){
45 switch(event
.GetSocketEvent()){
46 case wxSOCKET_INPUT
: {
49 while(socket
->IsData()){
50 buffer
.Append(Read());
57 wxCommandEvent
event(EVT_SOCKET_INPUT
,wxID_ANY
);
58 event
.SetEventObject(this);
59 event
.SetString(buffer
);
65 case wxSOCKET_CONNECTION
:
70 void MonitorSocket::Write(const wxString
& cmd
, bool block
){
74 wxString tmp
= cmd
+ EOL
;
75 socket
->Write(tmp
.fn_str(),tmp
.Len());
77 wxCommandEvent
event(EVT_SOCKET_WRITE
,wxID_ANY
);
78 event
.SetEventObject(this);
83 wxString
MonitorSocket::Read(){
85 socket
->Read(buf
, 1024);
86 buf
[socket
->LastCount()] = '\0';
88 wxString
buffer(buf
, wxConvUTF8
);
91 found
= buffer
.Find(wxT("[K"));
93 buffer
.Remove(0,found
+ 2);
95 //buffer.Replace(wxT("\r\n"),wxT(""));
96 buffer
.Trim().Trim(false);
100 wxString
MonitorSocket::ReadAll(){
103 socket
->WaitForRead(0,250);
104 } while((found
= data
.Find(wxT("(qemu)"))) < 0);
106 wxString tmp
= data
.Left(found
);
108 data
.Remove(0,found
+ 6);
113 void MonitorSocket::AddEventHandler(wxEvtHandler
*handler
){
114 evtHandlers
.Add(handler
);
117 void MonitorSocket::SendEvent(wxCommandEvent
& event
){
118 for(int i
= 0; i
< evtHandlers
.GetCount(); i
++){
119 evtHandlers
.Item(i
)->ProcessEvent(event
);