From: John L. <jr...@us...> - 2007-05-19 02:05:51
|
Update of /cvsroot/wxlua/wxLua/modules/wxluasocket/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv11964/wxLua/modules/wxluasocket/src Modified Files: Makefile dservice.cpp wxldserv.cpp wxldtarg.cpp wxlsock.cpp Log Message: Make wxProcess Kill and Exists functions %staticonly Remove all exception code from wxLuaSocket code (debugger code) Rename wxLuaSocket to wxLuaCSocket and move wxLuaDebuggerSocket to wxLuawxSocket we have two options C or wx sockets now... both work in 2.8 GTK2 Lots of reorganization in server and socket code Update the editor.wx.lua for new code and only Delete() the debugger server in EVT_IDLE to give it a chance to exit gracefully Index: wxldtarg.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldtarg.cpp,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** wxldtarg.cpp 23 Mar 2007 00:09:36 -0000 1.33 --- wxldtarg.cpp 19 May 2007 02:05:47 -0000 1.34 *************** *** 25,29 **** #endif // !wxCHECK_VERSION(2, 6, 0) - static const char *debugName = "__wxLuaDebug__"; #define WXLUASOCKET_CONNECT_TIMEOUT 200 // 20 seconds --- 25,28 ---- *************** *** 35,38 **** --- 34,38 ---- { m_pTarget->ThreadFunction(); + m_pTarget->m_pThread = NULL; return 0; } *************** *** 63,68 **** lua_State* L = m_wxlState.GetLuaState(); ! lua_pushlightuserdata(L, this); ! lua_setglobal(L, debugName); lua_sethook(L, LuaDebugHook, LUA_MASKCALL | LUA_MASKLINE | LUA_MASKRET, 0); --- 63,71 ---- lua_State* L = m_wxlState.GetLuaState(); ! // Stick us into the lua_State - push key, value ! lua_pushstring( L, "__wxLuaDebugTarget__" ); ! lua_pushlightuserdata( L, (void*)this ); ! // set the value ! lua_rawset( L, LUA_REGISTRYINDEX ); lua_sethook(L, LuaDebugHook, LUA_MASKCALL | LUA_MASKLINE | LUA_MASKRET, 0); *************** *** 76,81 **** wxLuaDebugTarget::~wxLuaDebugTarget() { ! if (m_pThread != NULL) ! delete m_pThread; LeaveLuaCriticalSection(); --- 79,84 ---- wxLuaDebugTarget::~wxLuaDebugTarget() { ! //if (m_pThread != NULL) ! // delete m_pThread; LeaveLuaCriticalSection(); *************** *** 153,157 **** { NotifyExit(); - wxMilliSleep(900); if (m_fConnected) --- 156,159 ---- *************** *** 169,196 **** { bool fThreadRunning = false; - try - { - m_clientSocket.Connect(m_serverName, m_portNumber); m_fConnected = true; fThreadRunning = true; } ! catch(wxLuaSocketException &) { } while (fThreadRunning && !m_pThread->TestDestroy() && !m_resetRequested && !m_fExiting) { ! try ! { ! unsigned char debugCommand = 0; // wxLuaSocketDebuggerCommands_Type ! if (!m_clientSocket.ReadCmd(debugCommand) || ! (HandleDebuggerCmd(debugCommand) == -1)) ! { ! fThreadRunning = false; ! } ! ! } ! catch(...) { fThreadRunning = false; --- 171,190 ---- { bool fThreadRunning = false; + if (m_clientSocket.Connect(m_serverName, m_portNumber)) + { m_fConnected = true; fThreadRunning = true; } ! else { + return; // FIXME } while (fThreadRunning && !m_pThread->TestDestroy() && !m_resetRequested && !m_fExiting) { ! unsigned char debugCommand = 0; // wxLuaSocketDebuggerCommands_Type ! if (!m_clientSocket.ReadCmd(debugCommand) || ! !HandleDebuggerCmd(debugCommand)) { fThreadRunning = false; *************** *** 199,350 **** } ! int wxLuaDebugTarget::HandleDebuggerCmd(int debugCommand) { ! try { ! switch ((int)debugCommand) { ! case wxLUASOCKET_DEBUGGER_CMD_NONE : ! { ! // This is an error, but maybe we can continue? ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ADD_BREAKPOINT: ! { ! wxString fileName; ! wxInt32 lineNumber = 0; ! ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadInt32(lineNumber)) ! { ! AddBreakPoint(fileName, lineNumber); ! } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_REMOVE_BREAKPOINT: ! { ! wxString fileName; ! wxInt32 lineNumber = 0; ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadInt32(lineNumber)) ! { ! RemoveBreakPoint(fileName, lineNumber); ! } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_CLEAR_ALL_BREAKPOINTS: { ! ClearAllBreakPoints(); ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_RUN_BUFFER: ! { ! wxString fileName; ! wxString buffer; ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadString(buffer)) ! { ! Run(fileName, buffer); ! } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEP: ! { ! Step(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOVER: ! { ! StepOver(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOUT: ! { ! StepOut(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_CONTINUE: ! { ! Continue(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_BREAK: { ! Break(); ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK: { ! EnumerateStack(); ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK_ENTRY: ! { ! wxInt32 stackRef = 0; ! if (m_clientSocket.ReadInt32(stackRef)) ! EnumerateStackEntry(stackRef); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_TABLE_REF: ! { ! wxInt32 tableRef = 0; ! wxInt32 index = 0; ! long itemNode = 0; ! if (m_clientSocket.ReadInt32(tableRef) && ! m_clientSocket.ReadInt32(index) && ! m_clientSocket.ReadLong(itemNode)) ! { ! EnumerateTable(tableRef, index, itemNode); ! } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_RESET: { ! Reset(); ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_EVALUATE_EXPR: ! { ! wxInt32 exprRef = 0; ! wxString buffer; ! if (m_clientSocket.ReadInt32(exprRef) && ! m_clientSocket.ReadString(buffer)) ! { ! EvaluateExpr(exprRef, buffer); ! } ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_CLEAR_DEBUG_REFERENCES: { ! size_t idx, idxMax = m_references.GetCount(); ! for (idx = 0; idx < idxMax; ++idx) ! { ! int iItem = m_references.Item(idx); ! m_wxlState.tremove(iItem); ! } ! m_references.Clear(); ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT: ! break; ! case wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT: ! break; ! default : ! wxFAIL_MSG(wxT("Invalid wxLuaSocketDebuggerCommands_Type in wxLuaDebugTarget::ThreadFunction")); ! return -1; } ! } ! catch(...) ! { ! return -1; // let someone else deal with the error } ! return debugCommand; } --- 193,341 ---- } ! bool wxLuaDebugTarget::HandleDebuggerCmd(int debugCommand) { ! bool ret = false; ! ! switch ((int)debugCommand) { ! case wxLUASOCKET_DEBUGGER_CMD_NONE : { ! // This is an error, but maybe we can continue? ! ret = true; ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ADD_BREAKPOINT: ! { ! wxString fileName; ! wxInt32 lineNumber = 0; ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadInt32(lineNumber)) { ! ret = AddBreakPoint(fileName, lineNumber); } ! } ! case wxLUASOCKET_DEBUGGER_CMD_REMOVE_BREAKPOINT: ! { ! wxString fileName; ! wxInt32 lineNumber = 0; ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadInt32(lineNumber)) { ! ret = RemoveBreakPoint(fileName, lineNumber); } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_CLEAR_ALL_BREAKPOINTS: ! { ! ret = ClearAllBreakPoints(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_RUN_BUFFER: ! { ! wxString fileName; ! wxString buffer; ! ! if (m_clientSocket.ReadString(fileName) && ! m_clientSocket.ReadString(buffer)) { ! ret = Run(fileName, buffer); } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEP: ! { ! ret = Step(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOVER: ! { ! ret = StepOver(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOUT: ! { ! ret = StepOut(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_CONTINUE: ! { ! ret = Continue(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_DEBUG_BREAK: ! { ! ret = Break(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK: ! { ! ret = EnumerateStack(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK_ENTRY: ! { ! wxInt32 stackRef = 0; ! if (m_clientSocket.ReadInt32(stackRef)) ! ret = EnumerateStackEntry(stackRef); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_TABLE_REF: ! { ! wxInt32 tableRef = 0; ! wxInt32 index = 0; ! long itemNode = 0; ! if (m_clientSocket.ReadInt32(tableRef) && ! m_clientSocket.ReadInt32(index) && ! m_clientSocket.ReadLong(itemNode)) { ! ret = EnumerateTable(tableRef, index, itemNode); } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_RESET: ! { ! ret = Reset(); ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_EVALUATE_EXPR: ! { ! wxInt32 exprRef = 0; ! wxString buffer; ! if (m_clientSocket.ReadInt32(exprRef) && ! m_clientSocket.ReadString(buffer)) ! { ! ret = EvaluateExpr(exprRef, buffer); } ! break; ! } ! case wxLUASOCKET_DEBUGGER_CMD_CLEAR_DEBUG_REFERENCES: ! { ! size_t idx, idxMax = m_references.GetCount(); ! for (idx = 0; idx < idxMax; ++idx) { ! int iItem = m_references.Item(idx); ! m_wxlState.tremove(iItem); } ! m_references.Clear(); ! ret = true; ! break; } ! case wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT: ! ret = true; ! break; ! case wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT: ! ret = true; ! break; ! default : ! wxFAIL_MSG(wxT("Invalid wxLuaSocketDebuggerCommands_Type in wxLuaDebugTarget::ThreadFunction")); } ! return ret; } *************** *** 440,444 **** { NotifyExit(); - wxMilliSleep(900); m_forceBreak = true; --- 431,434 ---- *************** *** 658,663 **** bool wxLuaDebugTarget::NotifyExit() { ! return IsConnected() && m_clientSocket.WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EXIT); } --- 648,655 ---- bool wxLuaDebugTarget::NotifyExit() { ! bool ret = IsConnected() && m_clientSocket.WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EXIT); + + return ret; } *************** *** 797,802 **** void LUACALL wxLuaDebugTarget::LuaDebugHook(lua_State *L, lua_Debug *pLuaDebug) { ! lua_getglobal(L, debugName); ! wxLuaDebugTarget *pTarget = (wxLuaDebugTarget *) lua_touserdata(L, -1); lua_pop(L, 1); --- 789,801 ---- void LUACALL wxLuaDebugTarget::LuaDebugHook(lua_State *L, lua_Debug *pLuaDebug) { ! wxLuaDebugTarget *pTarget = NULL; ! ! // try to get the state we've stored ! lua_pushstring( L, "__wxLuaDebugTarget__" ); ! lua_rawget( L, LUA_REGISTRYINDEX ); ! // if nothing was returned or it wasn't a ptr, abort ! if ( lua_islightuserdata(L, -1) ) ! pTarget = (wxLuaDebugTarget*)lua_touserdata( L, -1 ); ! lua_pop(L, 1); *************** *** 831,836 **** } ! lua_getglobal(L, debugName); ! wxLuaDebugTarget *pTarget = (wxLuaDebugTarget *) lua_touserdata(L, -1); lua_pop(L, 1); --- 830,842 ---- } ! wxLuaDebugTarget *pTarget = NULL; ! ! // try to get the state we've stored ! lua_pushstring( L, "__wxLuaDebugTarget__" ); ! lua_rawget( L, LUA_REGISTRYINDEX ); ! // if nothing was returned or it wasn't a ptr, abort ! if ( lua_islightuserdata(L, -1) ) ! pTarget = (wxLuaDebugTarget*)lua_touserdata( L, -1 ); ! lua_pop(L, 1); Index: dservice.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/dservice.cpp,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** dservice.cpp 23 Mar 2007 00:09:36 -0000 1.31 --- dservice.cpp 19 May 2007 02:05:47 -0000 1.32 *************** *** 31,37 **** static const char *debugName = "__wxLuaDebug__"; WX_DEFINE_LIST(wxLuaBreakPointList); WX_DEFINE_LIST(wxLuaDebuggeeList); - WX_DEFINE_LIST(wxLuaDebugSocketList); // ---------------------------------------------------------------------------- --- 31,38 ---- static const char *debugName = "__wxLuaDebug__"; + #include "wx/listimpl.cpp" + WX_DEFINE_LIST(wxLuawxSocketList); WX_DEFINE_LIST(wxLuaBreakPointList); WX_DEFINE_LIST(wxLuaDebuggeeList); // ---------------------------------------------------------------------------- *************** *** 56,93 **** // ---------------------------------------------------------------------------- - // wxLuaDebugSocket - Handles Debugger/Debuggee IO - // ---------------------------------------------------------------------------- - - 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; - } - - int wxLuaDebugSocket::Write(const char *buffer, wxUint32 length) - { - wxCHECK_MSG(m_socket, 0, wxT("Invalid wxSocketBase")); - if (m_socket->WaitForWrite(20, 0)) - return m_socket->Write(buffer, length).LastCount(); - - return 0; - } - - // ---------------------------------------------------------------------------- // wxLuaDebugService - App Debugging Service // ---------------------------------------------------------------------------- --- 57,60 ---- *************** *** 129,134 **** // Cleanup Debugger Socket List ! wxLuaDebugSocketList::compatibility_iterator nodeDebuggerSocket; ! wxLuaDebugSocketList::compatibility_iterator nextDebuggerSocket; for (nodeDebuggerSocket = m_debuggerSocketList.GetFirst(); nodeDebuggerSocket; nodeDebuggerSocket = nextDebuggerSocket) --- 96,101 ---- // Cleanup Debugger Socket List ! wxLuawxSocketList::compatibility_iterator nodeDebuggerSocket; ! wxLuawxSocketList::compatibility_iterator nextDebuggerSocket; for (nodeDebuggerSocket = m_debuggerSocketList.GetFirst(); nodeDebuggerSocket; nodeDebuggerSocket = nextDebuggerSocket) *************** *** 136,140 **** nextDebuggerSocket = nodeDebuggerSocket->GetNext(); ! wxLuaDebugSocket* debuggerSocket = nodeDebuggerSocket->GetData(); m_debuggerSocketList.DeleteNode(nodeDebuggerSocket); delete debuggerSocket; --- 103,107 ---- nextDebuggerSocket = nodeDebuggerSocket->GetNext(); ! wxLuawxSocket* debuggerSocket = nodeDebuggerSocket->GetData(); m_debuggerSocketList.DeleteNode(nodeDebuggerSocket); delete debuggerSocket; *************** *** 177,181 **** case wxSOCKET_CONNECTION: { ! wxLuaDebugSocket* debugSocket; wxSocketBase *sock = m_serverSocket->Accept(false); if (!sock) --- 144,148 ---- case wxSOCKET_CONNECTION: { ! wxLuawxSocket* debugSocket; wxSocketBase *sock = m_serverSocket->Accept(false); if (!sock) *************** *** 191,195 **** wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); ! debugSocket = new wxLuaDebugSocket(sock); m_debuggerSocketList.Append(debugSocket); --- 158,162 ---- wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); ! debugSocket = new wxLuawxSocket(sock); m_debuggerSocketList.Append(debugSocket); *************** *** 228,232 **** sock->SetNotify(wxSOCKET_LOST_FLAG); ! wxLuaDebugSocket* debugSocket = GetDebugSocket(sock); wxLuaDebuggee* debuggee = GetActiveDebuggee(); --- 195,199 ---- sock->SetNotify(wxSOCKET_LOST_FLAG); ! wxLuawxSocket* debugSocket = GetDebugSocket(sock); wxLuaDebuggee* debuggee = GetActiveDebuggee(); *************** *** 375,384 **** wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); ! wxLuaDebugSocketList::compatibility_iterator node; for ( node = m_debuggerSocketList.GetFirst(); node; node = node->GetNext() ) { if (node->GetData()->GetSocket() == sock) { ! wxLuaDebugSocket* debugSocket = node->GetData(); m_debuggerSocketList.DeleteNode(node); --- 342,351 ---- wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); ! wxLuawxSocketList::compatibility_iterator node; for ( node = m_debuggerSocketList.GetFirst(); node; node = node->GetNext() ) { if (node->GetData()->GetSocket() == sock) { ! wxLuawxSocket* debugSocket = node->GetData(); m_debuggerSocketList.DeleteNode(node); *************** *** 420,424 **** // Get Lua Debug Socket ! wxLuaDebugSocket* wxLuaDebugService::GetDebugSocket(wxSocketBase* sock) { wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); --- 387,391 ---- // Get Lua Debug Socket ! wxLuawxSocket* wxLuaDebugService::GetDebugSocket(wxSocketBase* sock) { wxCriticalSectionLocker locker(m_debuggerSocketListCriticalSection); *************** *** 481,485 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAK); dSocket->WriteString(fileName.GetFullPath()); --- 448,452 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAK); dSocket->WriteString(fileName.GetFullPath()); *************** *** 503,507 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_ERROR); dSocket->WriteString(errorMsg); --- 470,474 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_ERROR); dSocket->WriteString(errorMsg); *************** *** 524,528 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_ERROR); dSocket->WriteString(errorMsg); --- 491,495 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_ERROR); dSocket->WriteString(errorMsg); *************** *** 545,549 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EXIT); --- 512,516 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EXIT); *************** *** 565,569 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENUM); dSocket->WriteDebugData(debugData); --- 532,536 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENUM); dSocket->WriteDebugData(debugData); *************** *** 586,590 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENTRY_ENUM); dSocket->WriteInt32(entryRef); --- 553,557 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENTRY_ENUM); dSocket->WriteInt32(entryRef); *************** *** 608,612 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_TABLE_ENUM); dSocket->WriteLong(itemNode); --- 575,579 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_TABLE_ENUM); dSocket->WriteLong(itemNode); *************** *** 630,634 **** for (i = 0; i < count; i++) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EVALUATE_EXPR); dSocket->WriteInt32(exprRef); --- 597,601 ---- for (i = 0; i < count; i++) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_EVALUATE_EXPR); dSocket->WriteInt32(exprRef); *************** *** 643,647 **** // Debugger Notification ! bool wxLuaDebugService::NotifyBreakpointAdded(wxLuaBreakPoint& breakPoint, wxLuaDebugSocket* debugSocket) { bool result = false; --- 610,614 ---- // Debugger Notification ! bool wxLuaDebugService::NotifyBreakpointAdded(wxLuaBreakPoint& breakPoint, wxLuawxSocket* debugSocket) { bool result = false; *************** *** 654,658 **** if (!debugSocket || debugSocket == m_debuggerSocketList[i]) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_ADDED); dSocket->WriteString(breakPoint.GetFileName().GetFullPath()); --- 621,625 ---- if (!debugSocket || debugSocket == m_debuggerSocketList[i]) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_ADDED); dSocket->WriteString(breakPoint.GetFileName().GetFullPath()); *************** *** 669,673 **** // Debugger Notification ! bool wxLuaDebugService::NotifyBreakpointRemoved(wxLuaBreakPoint& breakPoint, wxLuaDebugSocket* debugSocket) { bool result = false; --- 636,640 ---- // Debugger Notification ! bool wxLuaDebugService::NotifyBreakpointRemoved(wxLuaBreakPoint& breakPoint, wxLuawxSocket* debugSocket) { bool result = false; *************** *** 680,684 **** if (!debugSocket || debugSocket == m_debuggerSocketList[i]) { ! wxLuaDebugSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_REMOVED); dSocket->WriteString(breakPoint.GetFileName().GetFullPath()); --- 647,651 ---- if (!debugSocket || debugSocket == m_debuggerSocketList[i]) { ! wxLuawxSocket* dSocket = m_debuggerSocketList[i]; dSocket->WriteCmd(wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_REMOVED); dSocket->WriteString(breakPoint.GetFileName().GetFullPath()); *************** *** 718,722 **** wxLuaDebugger::wxLuaDebugger(int port_number) : wxLuaDebuggerBase(port_number) { ! m_debuggerSocket = new wxLuaDebugSocket(); } --- 685,689 ---- wxLuaDebugger::wxLuaDebugger(int port_number) : wxLuaDebuggerBase(port_number) { ! m_debuggerSocket = new wxLuawxSocket(); } *************** *** 1382,1386 **** } ! void wxLuaDebuggee::NotifyBreakPoints(wxLuaDebugSocket* debugSocket) { wxCriticalSectionLocker locker(m_breakPointListCriticalSection); --- 1349,1353 ---- } ! void wxLuaDebuggee::NotifyBreakPoints(wxLuawxSocket* debugSocket) { wxCriticalSectionLocker locker(m_breakPointListCriticalSection); Index: Makefile =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/Makefile,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** Makefile 21 Dec 2006 06:02:04 -0000 1.11 --- Makefile 19 May 2007 02:05:47 -0000 1.12 *************** *** 36,40 **** CXX = $(WXCXX) ! APPEXTRADEFS = -I$(WXLUA_WXLUASETUP_DIR) -I$(WXLUA_DIR) -I$(WXLUA_DIR)/modules -I$(WXLUA_DIR)/modules/lua/include -I$(WXPREFIX)/contrib/include -fexceptions -DLUACALL= TARGET_LIBNAME = lib$(WXBASENAME)_wxluasocket-$(WXRELEASE) --- 36,40 ---- CXX = $(WXCXX) ! APPEXTRADEFS = -I$(WXLUA_WXLUASETUP_DIR) -I$(WXLUA_DIR) -I$(WXLUA_DIR)/modules -I$(WXLUA_DIR)/modules/lua/include -I$(WXPREFIX)/contrib/include -DLUACALL= TARGET_LIBNAME = lib$(WXBASENAME)_wxluasocket-$(WXRELEASE) Index: wxldserv.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldserv.cpp,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** wxldserv.cpp 13 Dec 2006 07:02:10 -0000 1.36 --- wxldserv.cpp 19 May 2007 02:05:47 -0000 1.37 *************** *** 185,193 **** if (sm_networkName.IsEmpty()) { ! #ifdef __WXMSW__ sm_networkName = wxGetHostName(); #else sm_networkName = wxT("localhost"); ! #endif } } --- 185,193 ---- if (sm_networkName.IsEmpty()) { ! #ifdef __WXMSW__ sm_networkName = wxGetHostName(); #else sm_networkName = wxT("localhost"); ! #endif // __WXMSW__ } } *************** *** 198,324 **** if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0)) { m_debuggeeProcess = NULL; wxProcess::Kill(m_debuggeeProcessID, wxSIGTERM, wxKILL_CHILDREN); ! wxPrintf(wxT("Deleting the m_debuggeeProcess %d\n"), m_debuggeeProcessID); } } bool wxLuaDebuggerBase::AddBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ADD_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber)); } bool wxLuaDebuggerBase::RemoveBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_REMOVE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber)); } bool wxLuaDebuggerBase::DisableBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber)); } bool wxLuaDebuggerBase::EnableBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber)); } bool wxLuaDebuggerBase::ClearAllBreakPoints() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_CLEAR_ALL_BREAKPOINTS)); } bool wxLuaDebuggerBase::Run(const wxString &fileName, const wxString &buffer) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_RUN_BUFFER) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteString(buffer)); } bool wxLuaDebuggerBase::Step() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEP)); } bool wxLuaDebuggerBase::StepOver() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOVER)); } bool wxLuaDebuggerBase::StepOut() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOUT)); } bool wxLuaDebuggerBase::Continue() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_CONTINUE)); } bool wxLuaDebuggerBase::Break() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_BREAK)); } bool wxLuaDebuggerBase::Reset() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_RESET)); } bool wxLuaDebuggerBase::EnumerateStack() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK)); } bool wxLuaDebuggerBase::EnumerateStackEntry(int stackEntry) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK_ENTRY) && ! GetSocketBase()->WriteInt32(stackEntry)); } bool wxLuaDebuggerBase::EnumerateTable(int tableRef, int nIndex, long nItemNode) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_TABLE_REF) && GetSocketBase()->WriteInt32(tableRef) && GetSocketBase()->WriteInt32(nIndex) && ! GetSocketBase()->WriteLong(nItemNode)); } bool wxLuaDebuggerBase::CleanupDebugReferences() { ! return CheckSocketConnected() && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_CLEAR_DEBUG_REFERENCES)); } bool wxLuaDebuggerBase::EvaluateExpr(int exprRef, const wxString &strExpression) { ! return CheckSocketConnected() && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_EVALUATE_EXPR) && GetSocketBase()->WriteInt32(exprRef) && ! GetSocketBase()->WriteString(strExpression)); } --- 198,361 ---- if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0)) { + m_debuggeeProcess->m_debugger = NULL; m_debuggeeProcess = NULL; wxProcess::Kill(m_debuggeeProcessID, wxSIGTERM, wxKILL_CHILDREN); ! //wxPrintf(wxT("Deleting the m_debuggeeProcess %d\n"), m_debuggeeProcessID); } } + long wxLuaDebuggerBase::StartClient() + { + if (m_debuggeeProcess == NULL) + { + m_debuggeeProcess = new wxLuaDebuggerProcess(this, ID_WXLUASOCKET_DEBUGGEE_PROCESS); + wxString command = wxString::Format(wxT("%s -d%s:%u"), + GetProgramName().c_str(), + GetNetworkName().c_str(), + m_port_number); + + m_debuggeeProcessID = wxExecute(command, wxEXEC_ASYNC|wxEXEC_MAKE_GROUP_LEADER, m_debuggeeProcess); + + if (m_debuggeeProcessID < 1) + KillDebuggee(); + } + + return m_debuggeeProcessID; + } + bool wxLuaDebuggerBase::AddBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected(true, wxT("Debugger AddBreakPoint")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ADD_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber), ! wxT("Debugger AddBreakPoint")); } bool wxLuaDebuggerBase::RemoveBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected(true, wxT("Debugger RemoveBreakPoint")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_REMOVE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber), ! wxT("Debugger RemoveBreakPoint")); } bool wxLuaDebuggerBase::DisableBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected(true, wxT("Debugger DisableBreakPoint")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber), ! wxT("Debugger DisableBreakPoint")); } bool wxLuaDebuggerBase::EnableBreakPoint(const wxString &fileName, int lineNumber) { ! return CheckSocketConnected(true, wxT("Debugger EnableBreakPoint")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteInt32(lineNumber), ! wxT("Debugger EnableBreakPoint")); } bool wxLuaDebuggerBase::ClearAllBreakPoints() { ! return CheckSocketConnected(true, wxT("Debugger ClearAllBreakPoints")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_CLEAR_ALL_BREAKPOINTS), ! wxT("Debugger ClearAllBreakPoints")); } bool wxLuaDebuggerBase::Run(const wxString &fileName, const wxString &buffer) { ! return CheckSocketConnected(true, wxT("Debugger Run")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_RUN_BUFFER) && GetSocketBase()->WriteString(fileName) && ! GetSocketBase()->WriteString(buffer), ! wxT("Debugger Run")); } bool wxLuaDebuggerBase::Step() { ! return CheckSocketConnected(true, wxT("Debugger Step")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEP), ! wxT("Debugger Step")); } bool wxLuaDebuggerBase::StepOver() { ! return CheckSocketConnected(true, wxT("Debugger StepOver")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOVER), ! wxT("Debugger StepOver")); } bool wxLuaDebuggerBase::StepOut() { ! return CheckSocketConnected(true, wxT("Debugger StepOut")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_STEPOUT), ! wxT("Debugger StepOut")); } bool wxLuaDebuggerBase::Continue() { ! return CheckSocketConnected(true, wxT("Debugger Continue")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_CONTINUE), ! wxT("Debugger Continue")); } bool wxLuaDebuggerBase::Break() { ! return CheckSocketConnected(true, wxT("Debugger Break")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_DEBUG_BREAK), ! wxT("Debugger Break")); } bool wxLuaDebuggerBase::Reset() { ! return CheckSocketConnected(true, wxT("Debugger Reset")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_RESET), ! wxT("Debugger Reset")); } bool wxLuaDebuggerBase::EnumerateStack() { ! return CheckSocketConnected(true, wxT("Debugger EnumerateStack")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK), ! wxT("Debugger EnumerateStack")); } bool wxLuaDebuggerBase::EnumerateStackEntry(int stackEntry) { ! return CheckSocketConnected(true, wxT("Debugger EnumerateStackEntry")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_STACK_ENTRY) && ! GetSocketBase()->WriteInt32(stackEntry), ! wxT("Debugger EnumerateStackEntry")); } bool wxLuaDebuggerBase::EnumerateTable(int tableRef, int nIndex, long nItemNode) { ! return CheckSocketConnected(true, wxT("Debugger EnumerateTable")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_ENUMERATE_TABLE_REF) && GetSocketBase()->WriteInt32(tableRef) && GetSocketBase()->WriteInt32(nIndex) && ! GetSocketBase()->WriteLong(nItemNode), ! wxT("Debugger EnumerateTable")); } bool wxLuaDebuggerBase::CleanupDebugReferences() { ! return CheckSocketConnected(true, wxT("Debugger CleanupDebugReferences")) && CheckSocketWrite( ! GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_CLEAR_DEBUG_REFERENCES), ! wxT("Debugger CleanupDebugReferences")); } bool wxLuaDebuggerBase::EvaluateExpr(int exprRef, const wxString &strExpression) { ! return CheckSocketConnected(true, wxT("Debugger EvaluateExpr")) && CheckSocketWrite( GetSocketBase()->WriteCmd(wxLUASOCKET_DEBUGGER_CMD_EVALUATE_EXPR) && GetSocketBase()->WriteInt32(exprRef) && ! GetSocketBase()->WriteString(strExpression), ! wxT("Debugger EvaluateExpr")); } *************** *** 336,340 **** if (CheckSocketRead( GetSocketBase()->ReadString(fileName) && ! GetSocketBase()->ReadInt32(lineNumber))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName); --- 373,378 ---- if (CheckSocketRead( GetSocketBase()->ReadString(fileName) && ! GetSocketBase()->ReadInt32(lineNumber), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_BREAK"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName); *************** *** 350,354 **** if (CheckSocketRead( ! GetSocketBase()->ReadString(strMessage))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this); --- 388,393 ---- if (CheckSocketRead( ! GetSocketBase()->ReadString(strMessage), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_PRINT"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this); *************** *** 365,369 **** if (CheckSocketRead( ! GetSocketBase()->ReadString(strMessage))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); --- 404,409 ---- if (CheckSocketRead( ! GetSocketBase()->ReadString(strMessage), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_ERROR"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); *************** *** 378,382 **** { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! SendEvent(debugEvent); break; } --- 418,422 ---- { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! wxPostEvent(this, debugEvent); break; } *************** *** 386,390 **** if (CheckSocketRead( ! GetSocketBase()->ReadDebugData(debugData))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this); --- 426,431 ---- if (CheckSocketRead( ! GetSocketBase()->ReadDebugData(debugData), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this); *************** *** 403,407 **** if (CheckSocketRead( GetSocketBase()->ReadInt32(stackRef) && ! GetSocketBase()->ReadDebugData(debugData))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this); --- 444,449 ---- if (CheckSocketRead( GetSocketBase()->ReadInt32(stackRef) && ! GetSocketBase()->ReadDebugData(debugData), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_STACK_ENTRY_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this); *************** *** 420,424 **** if (CheckSocketRead( GetSocketBase()->ReadLong(itemNode) && ! GetSocketBase()->ReadDebugData(debugData))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this); --- 462,467 ---- if (CheckSocketRead( GetSocketBase()->ReadLong(itemNode) && ! GetSocketBase()->ReadDebugData(debugData), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_TABLE_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this); *************** *** 437,441 **** if (CheckSocketRead( GetSocketBase()->ReadInt32(exprRef) && ! GetSocketBase()->ReadString(strResult))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EVALUATE_EXPR, this); --- 480,485 ---- if (CheckSocketRead( GetSocketBase()->ReadInt32(exprRef) && ! GetSocketBase()->ReadString(strResult), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_EVALUATE_EXPR"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EVALUATE_EXPR, this); *************** *** 457,461 **** GetSocketBase()->ReadString(fileName) && GetSocketBase()->ReadInt32(line) && ! GetSocketBase()->ReadInt32(enabled))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_ADDED, this, line, fileName, enabled ? true : false); --- 501,506 ---- GetSocketBase()->ReadString(fileName) && GetSocketBase()->ReadInt32(line) && ! GetSocketBase()->ReadInt32(enabled), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_ADDED"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_ADDED, this, line, fileName, enabled ? true : false); *************** *** 473,477 **** if (CheckSocketRead( GetSocketBase()->ReadString(fileName) && ! GetSocketBase()->ReadInt32(line))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_REMOVED, this, line, fileName); --- 518,523 ---- if (CheckSocketRead( GetSocketBase()->ReadString(fileName) && ! GetSocketBase()->ReadInt32(line), ! wxT("Debugger wxLUASOCKET_DEBUGGEE_EVENT_BREAKPOINT_REMOVED"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAKPOINT_REMOVED, this, line, fileName); *************** *** 502,507 **** return false; } ! ! if (!GetSocketBase()->IsConnected()) { if (send_event) --- 548,552 ---- return false; } ! else if (!GetSocketBase()->IsConnected()) { if (send_event) *************** *** 521,526 **** if (!read_ok) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_DISCONNECTED, this); ! debugEvent.SetMessage(wxT("Failed reading from the debugger socket. ") + msg); SendEvent(debugEvent); } --- 566,574 ---- if (!read_ok) { + wxString s = wxT("Failed reading from the debugger socket. ") + msg + wxT("\n"); + s += GetSocketErrorMsg(); + wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_DISCONNECTED, this); ! debugEvent.SetMessage(s); SendEvent(debugEvent); } *************** *** 532,537 **** if (!write_ok) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_DISCONNECTED, this); ! debugEvent.SetMessage(wxT("Failed writing to the debugger socket. ") + msg); SendEvent(debugEvent); } --- 580,588 ---- if (!write_ok) { + wxString s = wxT("Failed writing to the debugger socket. ") + msg + wxT("\n"); + s += GetSocketErrorMsg(); + wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_DISCONNECTED, this); ! debugEvent.SetMessage(s); SendEvent(debugEvent); } *************** *** 587,593 **** wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); debugEvent.SetMessage(wxString::Format(wxT("Process (%d) ended with exit code : %d"), event.GetPid(), event.GetExitCode())); ! ProcessEvent(debugEvent); ! event.Skip(); } } --- 638,645 ---- wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); debugEvent.SetMessage(wxString::Format(wxT("Process (%d) ended with exit code : %d"), event.GetPid(), event.GetExitCode())); ! wxPostEvent(this, debugEvent); } + + event.Skip(); } *************** *** 618,625 **** // ---------------------------------------------------------------------------- ! // wxLuaDebuggerServer::LuaThread // ---------------------------------------------------------------------------- ! void *wxLuaDebuggerServer::LuaThread::Entry() { m_pServer->ThreadFunction(); --- 670,677 ---- // ---------------------------------------------------------------------------- ! // wxLuaDebuggerCServer::LuaThread // ---------------------------------------------------------------------------- ! void *wxLuaDebuggerCServer::LuaThread::Entry() { m_pServer->ThreadFunction(); *************** *** 627,631 **** } ! void wxLuaDebuggerServer::LuaThread::OnExit() { wxThread::OnExit(); --- 679,683 ---- } ! void wxLuaDebuggerCServer::LuaThread::OnExit() { wxThread::OnExit(); *************** *** 634,672 **** // ---------------------------------------------------------------------------- ! // wxLuaDebuggerServer // ---------------------------------------------------------------------------- ! IMPLEMENT_ABSTRACT_CLASS(wxLuaDebuggerServer, wxLuaDebuggerBase) ! wxLuaDebuggerServer::wxLuaDebuggerServer(int port_number) ! :wxLuaDebuggerBase(port_number), ! m_serverSocket(NULL), m_acceptedSocket(NULL), ! m_pThread(NULL), ! m_fShutdown(false) { } ! wxLuaDebuggerServer::~wxLuaDebuggerServer() { StopServer(); } ! bool wxLuaDebuggerServer::StartServer() { wxCHECK_MSG(m_serverSocket == NULL, false, wxT("Debugger server socket already created")); m_fShutdown = false; ! m_serverSocket = new wxLuaSocket; ! m_serverSocket->m_name = wxString::Format(wxT("wxLuaDebuggerServer::m_serverSocket (%ld)"), (long)wxGetProcessId()); ! try { ! // listen on the specified port ! m_serverSocket->Listen(m_port_number); ! return StartServerThread(); } ! catch(wxLuaSocketException & e) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(wxString::Format(_("Error while opening listening socket. %s"), e.description().c_str())); AddPendingEvent(debugEvent); --- 686,731 ---- // ---------------------------------------------------------------------------- ! // wxLuaDebuggerCServer // ---------------------------------------------------------------------------- ! IMPLEMENT_ABSTRACT_CLASS(wxLuaDebuggerCServer, wxLuaDebuggerBase) ! wxLuaDebuggerCServer::wxLuaDebuggerCServer(int port_number) ! :wxLuaDebuggerBase(port_number), ! m_serverSocket(NULL), m_acceptedSocket(NULL), ! m_pThread(NULL), ! m_fShutdown(false) { } ! wxLuaDebuggerCServer::~wxLuaDebuggerCServer() { StopServer(); } ! bool wxLuaDebuggerCServer::StartServer() { wxCHECK_MSG(m_serverSocket == NULL, false, wxT("Debugger server socket already created")); m_fShutdown = false; ! m_serverSocket = new wxLuaCSocket(); ! m_serverSocket->m_name = wxString::Format(wxT("wxLuaDebuggerCServer::m_serverSocket (%ld)"), (long)wxGetProcessId()); ! if (m_serverSocket->Listen(m_port_number)) { ! wxCHECK_MSG(m_pThread == NULL, false, wxT("Debugger server thread already created")); ! ! if (!m_fShutdown) ! { ! m_pThread = new wxLuaDebuggerCServer::LuaThread(this); ! ! return ((m_pThread != NULL) && ! (m_pThread->Create() == wxTHREAD_NO_ERROR) && ! (m_pThread->Run() == wxTHREAD_NO_ERROR)); ! } } ! else { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(m_serverSocket->GetErrorMsg(true)); AddPendingEvent(debugEvent); *************** *** 679,722 **** } ! long wxLuaDebuggerServer::StartClient() { wxCHECK_MSG(m_serverSocket, false, wxT("Debugger server not started")); wxCHECK_MSG(m_pThread, false, wxT("Debugger server thread not running")); - if ((m_debuggeeProcess == NULL) && !m_fShutdown) - { - m_debuggeeProcess = new wxLuaDebuggerProcess(this, ID_WXLUASOCKET_DEBUGGEE_PROCESS); - wxString command = wxString::Format(wxT("%s -d%s:%u"), - GetProgramName().c_str(), - GetNetworkName().c_str(), - m_port_number); - - m_debuggeeProcessID = wxExecute(command, wxEXEC_ASYNC|wxEXEC_MAKE_GROUP_LEADER, m_debuggeeProcess); - - if (m_debuggeeProcessID < 1) - KillDebuggee(); - } - - return m_debuggeeProcessID; - } - - bool wxLuaDebuggerServer::StartServerThread() - { - wxCHECK_MSG(m_serverSocket, false, wxT("Debugger server not started")); - wxCHECK_MSG(m_pThread == NULL, false, wxT("Debugger server thread already created")); - if (!m_fShutdown) ! { ! m_pThread = new wxLuaDebuggerServer::LuaThread(this); ! ! return ((m_pThread != NULL) && ! (m_pThread->Create() == wxTHREAD_NO_ERROR) && ! (m_pThread->Run() == wxTHREAD_NO_ERROR)); ! } ! return false; } ! bool wxLuaDebuggerServer::StopServer() { // NO checks, can always call stop server --- 738,753 ---- } ! long wxLuaDebuggerCServer::StartClient() { wxCHECK_MSG(m_serverSocket, false, wxT("Debugger server not started")); wxCHECK_MSG(m_pThread, false, wxT("Debugger server thread not running")); if (!m_fShutdown) ! return wxLuaDebuggerBase::StartClient(); ! return m_debuggeeProcessID; } ! bool wxLuaDebuggerCServer::StopServer() { // NO checks, can always call stop server *************** *** 728,739 **** if (m_acceptedSocket != NULL) { ! try ! { ! m_acceptedSocket->Shutdown(SD_BOTH); ! } ! catch(wxLuaSocketException & /*e*/) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(_("Error while shutting down session socket")); AddPendingEvent(debugEvent); } --- 759,766 ---- if (m_acceptedSocket != NULL) { ! if (!m_acceptedSocket->Shutdown(SD_BOTH)) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(m_acceptedSocket->GetErrorMsg(true)); AddPendingEvent(debugEvent); } *************** *** 755,781 **** // so the thread will not loop and instead will just destroy the // session socket object and return. ! try ! { ! wxLuaSocket closeSocket; ! closeSocket.m_name = wxString::Format(wxT("wxLuaDebuggerServer closeSocket (%ld)"), (long)wxGetProcessId()); ! closeSocket.Connect(GetNetworkName(), m_port_number); ! closeSocket.Shutdown(SD_BOTH); ! ! wxMilliSleep(100); ! wxLuaSocket *serverSocket = m_serverSocket; ! m_serverSocket = NULL; ! delete serverSocket; ! } ! catch(wxLuaSocketException & /*e*/) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(_("Error while shutting down server socket")); AddPendingEvent(debugEvent); } } // One of the above two operations terminates the thread. Wait for it to stop. ! if ((m_pThread != NULL) && m_pThread->IsRunning()) m_pThread->Wait(); --- 782,805 ---- // so the thread will not loop and instead will just destroy the // session socket object and return. ! wxLuaSocket closeSocket; ! closeSocket.m_name = wxString::Format(wxT("wxLuaDebuggerCServer closeSocket (%ld)"), (long)wxGetProcessId()); ! if (!closeSocket.Connect(GetNetworkName(), m_port_number) || ! !closeSocket.Shutdown(SD_BOTH)) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(m_acceptedSocket->GetErrorMsg(true)); AddPendingEvent(debugEvent); } + + wxMilliSleep(100); + + wxLuaSocket *serverSocket = m_serverSocket; + m_serverSocket = NULL; + delete serverSocket; } // One of the above two operations terminates the thread. Wait for it to stop. ! if ((m_pThread != NULL))// && m_pThread->IsRunning()) m_pThread->Wait(); *************** *** 786,798 **** } ! void wxLuaDebuggerServer::ThreadFunction() { wxCHECK_RET(m_serverSocket, wxT("Invalid server socket")); wxCHECK_RET(m_acceptedSocket == NULL, wxT("The debugger server has already accepted a socket connection")); ! try { ! m_acceptedSocket = new wxLuaSocket(m_serverSocket->Accept()); ! m_acceptedSocket->m_name = wxString::Format(wxT("wxLuaDebuggerServer::m_acceptedSocket (%ld)"), (long)wxGetProcessId()); wxLuaSocket *serverSocket = m_serverSocket; --- 810,828 ---- } ! void wxLuaDebuggerCServer::ThreadFunction() { wxCHECK_RET(m_serverSocket, wxT("Invalid server socket")); wxCHECK_RET(m_acceptedSocket == NULL, wxT("The debugger server has already accepted a socket connection")); ! m_acceptedSocket = m_serverSocket->Accept(); ! if (!m_acceptedSocket) { ! wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); ! debugEvent.SetMessage(m_serverSocket->GetErrorMsg(true)); ! AddPendingEvent(debugEvent); ! } ! else ! { ! m_acceptedSocket->m_name = wxString::Format(wxT("wxLuaDebuggerCServer::m_acceptedSocket (%ld)"), (long)wxGetProcessId()); wxLuaSocket *serverSocket = m_serverSocket; *************** *** 802,829 **** wxMilliSleep(500); // why ?? ! try ! { ! // Notify that a client has connected and we are ready to debug ! wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_CONNECTED, this); ! AddPendingEvent(debugEvent); ! // Enter the debug loop ! while (!m_fShutdown && m_acceptedSocket) ! { ! unsigned char debugEvent = 0; // wxLuaSocketDebuggeeEvents_Type ! if (//m_acceptedSocket->IsReadable() && ! m_acceptedSocket->ReadCmd(debugEvent)) ! { ! HandleDebuggeeEvent(debugEvent); ! if (debugEvent == wxLUASOCKET_DEBUGGEE_EVENT_EXIT) ! m_fShutdown = true; ! } ! } ! } ! catch(wxLuaSocketException &) { ! wxPrintf(wxT("I'm here!\n")); ! } --- 832,853 ---- wxMilliSleep(500); // why ?? ! // Notify that a client has connected and we are ready to debug ! wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_DEBUGGEE_CONNECTED, this); ! AddPendingEvent(debugEvent); ! unsigned char debug_event = 0; // wxLuaSocketDebuggeeEvents_Type ! // Enter the debug loop ! while (!m_pThread->TestDestroy() && !m_fShutdown && m_acceptedSocket) { ! debug_event = 0; ! if (m_acceptedSocket->ReadCmd(debug_event) && ! ((debug_event == wxLUASOCKET_DEBUGGEE_EVENT_EXIT) || ! (HandleDebuggeeEvent(debug_event) != -1))) ! { ! // don't send exit event until we've closed the socket ! if (debug_event == wxLUASOCKET_DEBUGGEE_EVENT_EXIT) ! m_fShutdown = true; ! } } *************** *** 836,846 **** } } ! catch(wxLuaSocketException &) { }... [truncated message content] |