From: John L. <jr...@us...> - 2006-10-04 05:55:09
|
Update of /cvsroot/wxlua/wxLua/modules/wxluasocket/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv10846/wxLua/modules/wxluasocket/src Modified Files: dservice.cpp wxldserv.cpp wxldtarg.cpp wxlsock.cpp Log Message: add wxSocket implementation for wxLuaSockets... ifdefed off since it seems very slow and doesn't always connect Index: wxldtarg.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldtarg.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** wxldtarg.cpp 3 Oct 2006 19:52:16 -0000 1.28 --- wxldtarg.cpp 4 Oct 2006 05:55:02 -0000 1.29 *************** *** 151,154 **** --- 151,155 ---- } } + return !m_fErrorsSeen; } *************** *** 185,196 **** { unsigned char debugCommand = 0; // wxLuaSocketDebuggerCommands_Type ! if (!m_clientSocket.ReadCmd(debugCommand)) { ! //wxMilliSleep(250); // FIXME slow down reading a bit and cross fingers ! continue; } - if (HandleDebuggerCmd(debugCommand) == -1) - fThreadRunning = false; } catch(...) --- 186,195 ---- { unsigned char debugCommand = 0; // wxLuaSocketDebuggerCommands_Type ! if (!m_clientSocket.ReadCmd(debugCommand) || ! (HandleDebuggerCmd(debugCommand) == -1)) { ! fThreadRunning = false; } } catch(...) Index: dservice.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/dservice.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** dservice.cpp 3 Oct 2006 05:12:45 -0000 1.25 --- dservice.cpp 4 Oct 2006 05:55:02 -0000 1.26 *************** *** 63,71 **** // ---------------------------------------------------------------------------- int wxLuaDebugSocket::Read(char *buffer, wxUint32 length) { wxCHECK_MSG(m_socket, 0, wxT("Invalid wxSocketBase")); ! m_socket->Read(buffer, length); ! return m_socket->LastCount(); } --- 63,85 ---- // ---------------------------------------------------------------------------- + bool wxLuaDebugSocket::Destroy() + { + if (m_socket) + { + wxSocketBase* sock = m_socket; + m_socket = NULL; + return sock->Destroy(); + } + + return true; + } + int wxLuaDebugSocket::Read(char *buffer, wxUint32 length) { wxCHECK_MSG(m_socket, 0, wxT("Invalid wxSocketBase")); ! if (m_socket->WaitForRead(20, 0)) ! return m_socket->Read(buffer, length).LastCount(); ! ! return 0; } *************** *** 73,78 **** { wxCHECK_MSG(m_socket, 0, wxT("Invalid wxSocketBase")); ! m_socket->Write(buffer, length); ! return m_socket->LastCount(); } --- 87,94 ---- { wxCHECK_MSG(m_socket, 0, wxT("Invalid wxSocketBase")); ! if (m_socket->WaitForWrite(20, 0)) ! return m_socket->Write(buffer, length).LastCount(); ! ! return 0; } Index: wxldserv.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldserv.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** wxldserv.cpp 3 Oct 2006 19:52:16 -0000 1.27 --- wxldserv.cpp 4 Oct 2006 05:55:02 -0000 1.28 *************** *** 113,116 **** --- 113,117 ---- { wxCHECK_RET(m_luaDebugger, wxT("Invalid wxLuaDebuggerServer")); + wxBeginBusyCursor(); m_luaDebugger->EnumerateStack(); } *************** *** 119,122 **** --- 120,124 ---- { wxCHECK_RET(m_luaDebugger, wxT("Invalid wxLuaDebuggerServer")); + wxBeginBusyCursor(); m_luaDebugger->EnumerateStackEntry(nEntry); } *************** *** 125,128 **** --- 127,131 ---- { wxCHECK_RET(m_luaDebugger, wxT("Invalid wxLuaDebuggerServer")); + wxBeginBusyCursor(); m_luaDebugger->EnumerateTable(nRef, nEntry, (long)treeId.m_pItem); } *************** *** 131,134 **** --- 134,138 ---- { wxCHECK_RET(m_luaDebugger, wxT("Invalid wxLuaDebuggerServer")); + wxBeginBusyCursor(); m_luaDebugger->EnumerateTable(-1, -1, (long)treeId.m_pItem); } *************** *** 312,316 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); debugEvent.SetMessage(errMsg); ! AddPendingEvent(debugEvent); return ret == -1; --- 316,320 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); debugEvent.SetMessage(errMsg); ! SendEvent(debugEvent); return ret == -1; *************** *** 332,336 **** { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName); ! AddPendingEvent(debugEvent); } else return -1; --- 336,340 ---- { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName); ! SendEvent(debugEvent); } else return -1; *************** *** 346,350 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this); debugEvent.SetMessage(strMessage); ! AddPendingEvent(debugEvent); } else return -1; --- 350,354 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this); debugEvent.SetMessage(strMessage); ! SendEvent(debugEvent); } else return -1; *************** *** 360,364 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); debugEvent.SetMessage(strMessage); ! AddPendingEvent(debugEvent); } else return -1; --- 364,368 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); debugEvent.SetMessage(strMessage); ! SendEvent(debugEvent); } else return -1; *************** *** 369,373 **** { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! AddPendingEvent(debugEvent); break; } --- 373,377 ---- { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! SendEvent(debugEvent); break; } *************** *** 380,384 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this); debugEvent.SetDebugData(-1, debugData); ! AddPendingEvent(debugEvent); } else return -1; --- 384,388 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this); debugEvent.SetDebugData(-1, debugData); ! SendEvent(debugEvent); } else return -1; *************** *** 396,400 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this); debugEvent.SetDebugData(stackRef, debugData); ! AddPendingEvent(debugEvent); } else return -1; --- 400,404 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this); debugEvent.SetDebugData(stackRef, debugData); ! SendEvent(debugEvent); } else return -1; *************** *** 412,416 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this); debugEvent.SetDebugData(itemNode, debugData); ! AddPendingEvent(debugEvent); } else return -1; --- 416,420 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this); debugEvent.SetDebugData(itemNode, debugData); ! SendEvent(debugEvent); } else return -1; *************** *** 429,433 **** debugEvent.SetMessage(strResult); debugEvent.SetDebugData(exprRef); ! AddPendingEvent(debugEvent); } else return -1; --- 433,437 ---- debugEvent.SetMessage(strResult); debugEvent.SetDebugData(exprRef); ! SendEvent(debugEvent); } else return -1; *************** *** 446,450 **** { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_ADDED, this, line, fileName, enabled ? true : false); ! AddPendingEvent(debugEvent); } else return -1; --- 450,454 ---- { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_ADDED, this, line, fileName, enabled ? true : false); ! SendEvent(debugEvent); } else return -1; *************** *** 461,465 **** { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_REMOVED, this, line, fileName); ! AddPendingEvent(debugEvent); } else return -1; --- 465,469 ---- { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_REMOVED, this, line, fileName); ! SendEvent(debugEvent); } else return -1; *************** *** 492,495 **** --- 496,501 ---- else event.Skip(); + + wxEndBusyCursor(); } void wxLuaDebuggerBase::OnDebugStackEntryEnum(wxLuaDebuggerEvent &event) *************** *** 499,502 **** --- 505,510 ---- else event.Skip(); + + wxEndBusyCursor(); } void wxLuaDebuggerBase::OnDebugTableEnum(wxLuaDebuggerEvent &event) *************** *** 506,509 **** --- 514,519 ---- else event.Skip(); + + wxEndBusyCursor(); } *************** *** 519,522 **** --- 529,534 ---- } + #ifdef WXLUASOCKET_USE_C_SOCKET + // ---------------------------------------------------------------------------- // wxLuaDebuggerServer::LuaThread *************** *** 712,717 **** HandleDebuggeeEvent(debugEvent); } - //else - // wxMilliSleep(250); // FIXME slow down reading a bit and cross fingers } } --- 724,727 ---- *************** *** 734,735 **** --- 744,901 ---- } } + + #else // !WXLUASOCKET_USE_C_SOCKET + + // --------------------------------------------------------------------------- + + // --------------------------------------------------------------------------- + IMPLEMENT_ABSTRACT_CLASS(wxLuaDebuggerwxSocketServer, wxLuaDebuggerBase) + + BEGIN_EVENT_TABLE(wxLuaDebuggerwxSocketServer, wxLuaDebuggerBase) + EVT_SOCKET(ID_WXLUA_SERVER, wxLuaDebuggerwxSocketServer::OnServerEvent) + EVT_SOCKET(ID_WXLUA_SOCKET, wxLuaDebuggerwxSocketServer::OnSocketEvent) + END_EVENT_TABLE() + + + wxLuaDebuggerwxSocketServer::wxLuaDebuggerwxSocketServer(int portNumber) + : m_serverSocket(NULL), m_acceptedSocket(NULL), m_portNumber(portNumber) + { + StartServer(); + } + + wxLuaDebuggerwxSocketServer::~wxLuaDebuggerwxSocketServer() + { + StopServer(); + } + + // Start Debugging Service + bool wxLuaDebuggerwxSocketServer::StartServer() + { + if (!m_serverSocket) + { + // Create the address - defaults to localhost:0 initially + wxIPV4address addr; + addr.Service(m_portNumber); + + // Create the server socket + m_serverSocket = new wxSocketServer(addr, wxSOCKET_NOWAIT|wxSOCKET_BLOCK); + m_serverSocket->SetEventHandler(*this, ID_WXLUA_SERVER); + m_serverSocket->SetNotify(wxSOCKET_CONNECTION_FLAG); + m_serverSocket->SetFlags(wxSOCKET_BLOCK); + m_serverSocket->Notify(true); + } + + return m_serverSocket->Ok(); + } + + bool wxLuaDebuggerwxSocketServer::StopServer() + { + if (m_acceptedSocket) + { + m_acceptedSocket->GetSocket()->Notify(false); + m_acceptedSocket->Destroy(); + m_acceptedSocket = NULL; + } + + if (m_serverSocket) + { + m_serverSocket->Notify(false); + m_serverSocket->Destroy(); + m_serverSocket = NULL; + } + + return true; + } + + bool wxLuaDebuggerwxSocketServer::StartClient() + { + if (m_debuggeeProcess == NULL) + { + m_debuggeeProcess = new wxProcess(this, ID_WXLUASOCKET_DEBUGGEE_PROCESS); + wxString command = wxString::Format(wxT("%s -d%s:%u"), + GetProgramName().c_str(), + GetNetworkName().c_str(), + m_portNumber); + + m_debuggeeProcessID = wxExecute(command, wxEXEC_ASYNC, m_debuggeeProcess); + + return (m_debuggeeProcessID > 0); + } + return false; + } + + void wxLuaDebuggerwxSocketServer::OnServerEvent(wxSocketEvent& event) + { + switch(event.GetSocketEvent()) + { + case wxSOCKET_CONNECTION: + { + wxSocketBase *sock = m_serverSocket->Accept(false); + if (!sock) + { + // Error + return; + } + + sock->SetFlags(wxSOCKET_NOWAIT); + m_acceptedSocket = new wxLuaDebugSocket(sock); + m_acceptedSocket->m_name = wxString::Format(wxT("wxLuaDebuggerwxSocketServer::m_acceptedSocket (%ld)"), (long)wxGetProcessId()); + + // Setup Handler + sock->SetEventHandler(*this, ID_WXLUA_SOCKET); + sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); + sock->Notify(true); + + wxMilliSleep(500); + + // Notify that a client has connected and we are ready to debug + wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_CLIENT_CONNECTED, this); + AddPendingEvent(debugEvent); + + break; + } + + default: + // Error + break; + } + } + + // Handle Commands from debugger (and lost connections) + void wxLuaDebuggerwxSocketServer::OnSocketEvent(wxSocketEvent& event) + { + wxSocketBase *sock = event.GetSocket(); + + wxPrintf(wxT("OnSocketEvent\n")); + + // Now we process the event + switch(event.GetSocketEvent()) + { + case wxSOCKET_INPUT: + { + // We disable input events, so that the test doesn't trigger + // wxSocketEvent again. + sock->SetNotify(wxSOCKET_LOST_FLAG); + + unsigned char debugEvent = 0; // wxLuaSocketDebuggeeEvents_Type + if (m_acceptedSocket->ReadCmd(debugEvent)) + HandleDebuggeeEvent(debugEvent); + + // Enable input events again. + sock->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); + break; + } + case wxSOCKET_LOST: + { + m_acceptedSocket->Destroy(); + delete m_acceptedSocket; + m_acceptedSocket = NULL; + break; + } + default: + // Error + break; + } + } + + #endif // WXLUASOCKET_USE_C_SOCKET Index: wxlsock.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxlsock.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** wxlsock.cpp 2 Oct 2006 21:19:24 -0000 1.17 --- wxlsock.cpp 4 Oct 2006 05:55:02 -0000 1.18 *************** *** 32,37 **** // A simple way to debug the sockets to see if things are right ! // prints to the console (in linux at least) the socket cmd/event and the ! // socket read/write //#define DEBUG_WXLUASOCKET --- 32,37 ---- // A simple way to debug the sockets to see if things are right ! // prints to the console for unix and to a file (see below) for MSW the socket ! // cmd/event and the socket read/write //#define DEBUG_WXLUASOCKET *************** *** 88,96 **** void wxLuaSocketDebugMsg(const wxString& title, const wxString& msg) { ! //wxSafeShowMessage(title, wxString::Format(wxT("PID %ld TIME %s "), (long)wxGetProcessId(), wxT(__TIME__)) + msg); wxLuaCharBuffer buf(title+ wxString::Format(wxT(" PID %ld TIME %s "), (long)wxGetProcessId(), wxT(__TIME__)) + msg + wxT("\n")); FILE* h = fopen("wxLua_socketdebug.log", "a"); fprintf(h, buf.GetData()); fclose(h); } #else --- 88,99 ---- void wxLuaSocketDebugMsg(const wxString& title, const wxString& msg) { ! #ifdef __WXMSW__ // no console in MSW wxLuaCharBuffer buf(title+ wxString::Format(wxT(" PID %ld TIME %s "), (long)wxGetProcessId(), wxT(__TIME__)) + msg + wxT("\n")); FILE* h = fopen("wxLua_socketdebug.log", "a"); fprintf(h, buf.GetData()); fclose(h); + #else + wxSafeShowMessage(title, wxString::Format(wxT("PID %ld TIME %s "), (long)wxGetProcessId(), wxT(__TIME__)) + msg); + #endif } #else |