void EventWorker::Run() { wxIPV4address ca; ca.Hostname(m_host); ca.Service(3000); m_clientSocket->SetNotify(wxSOCKET_CONNECTION_FLAG|wxSOCKET_LOST_FLAG|wxSOCKET_OUTPUT_FLAG|wxSOCKET_INPUT_FLAG); m_clientSocket->Notify(true); m_currentType = WorkerEvent::CONNECTING; m_doneSent = false; //wxLogMessage(wxT("EventWorker: Connecting.....")); m_clientSocket->Connect(ca,false); }
void socketStream::setUp() { // create the socket threads and wait until they are ready to accept // connections (if we called Connect() before this happens, it would fail) { wxMutexLocker lock(gs_mutex); m_writeThread = new SocketServerThread(TEST_PORT_READ, &socketStream::WriteSocket); CPPUNIT_ASSERT_EQUAL( wxCOND_NO_ERROR, gs_cond.Wait() ); m_readThread = new SocketServerThread(TEST_PORT_WRITE, &socketStream::ReadSocket); CPPUNIT_ASSERT_EQUAL( wxCOND_NO_ERROR, gs_cond.Wait() ); } m_readSocket = new wxSocketClient(ms_flags); CPPUNIT_ASSERT( m_readSocket->Connect(LocalAddress(TEST_PORT_READ)) ); m_writeSocket = new wxSocketClient(ms_flags); CPPUNIT_ASSERT( m_writeSocket->Connect(LocalAddress(TEST_PORT_WRITE)) ); }
void StreamerFrame::OnConnectDisconnect(wxCommandEvent& event){ string connect_label = "Connect"; string disconnect_label = "Disconnect"; //we connect to the client //we first check the label of the btn if(connect->GetLabel() == connect_label){ client = new wxSocketClient(wxSOCKET_WAITALL); client->Connect(ip,0); }else if(connect->GetLabel() == disconnect_label){ //we will disconnect connect->SetValue(false); connect->SetLabel("Connect"); SetStatusText("Disconnected"); } }
wxThread::ExitCode ThreadWorker::Entry() { wxIPV4address ca; ca.Hostname(m_host); ca.Service(5678); //wxLogDebug(wxT("ThreadWorker: Connecting.....")); m_clientSocket->SetTimeout(60); bool failed = false; WorkerEvent::evt_type etype = WorkerEvent::CONNECTING; if (!m_clientSocket->Connect(ca)) { wxLogError(wxT("Cannot connect to %s:%d"),ca.IPAddress().c_str(), ca.Service()); failed = true; } else { //wxLogMessage(wxT("ThreadWorker: Connected. Sending %d bytes of data"),m_outsize); etype = WorkerEvent::SENDING; WorkerEvent e(this,etype); wxGetApp().AddPendingEvent(e); int to_process = m_outsize; do { m_clientSocket->Write(m_outbuf,m_outsize); if (m_clientSocket->Error()) { wxLogError(wxT("ThreadWorker: Write error")); failed = true; } to_process -= m_clientSocket->LastCount(); //wxLogDebug(wxT("EventWorker: written %d bytes, %d bytes to do"),m_clientSocket->LastCount(),to_process); } while(!m_clientSocket->Error() && to_process != 0); if (!failed) { etype = WorkerEvent::RECEIVING; WorkerEvent e(this,etype); wxGetApp().AddPendingEvent(e); to_process = m_insize; do { m_clientSocket->Read(m_inbuf,m_insize); if (m_clientSocket->Error()) { wxLogError(wxT("ThreadWorker: Read error")); failed = true; break; } to_process -= m_clientSocket->LastCount(); //wxLogDebug(wxT("EventWorker: readed %d bytes, %d bytes to do"),m_clientSocket->LastCount(),to_process); } while(!m_clientSocket->Error() && to_process != 0); } char* outdat = (char*)m_outbuf+2; if (!failed && (memcmp(m_inbuf,outdat,m_insize) != 0)) { wxLogError(wxT("Data mismatch")); failed = true; } } //wxLogDebug(wxT("ThreadWorker: Finished")); if (!failed) { etype = WorkerEvent::DISCONNECTING; WorkerEvent e(this,etype); wxGetApp().AddPendingEvent(e); }; m_clientSocket->Close(); m_clientSocket->Destroy(); m_clientSocket = NULL; delete [] m_outbuf; delete [] m_inbuf; if (!failed) etype = WorkerEvent::DONE; WorkerEvent e(this,etype); if (failed) e.setFailed(); wxGetApp().AddPendingEvent(e); return 0; }