issue #2823: firefox remote connection ok.

This commit is contained in:
James Chen 2013-10-05 10:56:52 +08:00
parent 2e07b0736b
commit c381e4ce50
2 changed files with 167 additions and 12 deletions

View File

@ -1938,6 +1938,7 @@ void ScriptingCore::enableDebugger() {
JS_DefineFunction(cx_, debugGlobal_, "_unlockVM", JSBDebug_UnlockExecution, 0, JSPROP_READONLY | JSPROP_PERMANENT); JS_DefineFunction(cx_, debugGlobal_, "_unlockVM", JSBDebug_UnlockExecution, 0, JSPROP_READONLY | JSPROP_PERMANENT);
runScript("jsb_debugger.js", debugGlobal_); runScript("jsb_debugger.js", debugGlobal_);
runScript("SysTest/script.js", debugGlobal_);
// prepare the debugger // prepare the debugger
jsval argv = OBJECT_TO_JSVAL(global_); jsval argv = OBJECT_TO_JSVAL(global_);
@ -2166,6 +2167,13 @@ static void clearBuffers() {
} }
} }
static int replyToClient(int socket, const std::string& buf)
{
std::stringstream bufSend;
bufSend << buf.length() << ":" << buf;
return ::send(socket, bufSend.str().c_str(), bufSend.str().length(), 0);
}
static void serverEntryPoint(void) static void serverEntryPoint(void)
{ {
// start a server, accept the connection and keep reading data from it // start a server, accept the connection and keep reading data from it
@ -2218,25 +2226,172 @@ static void serverEntryPoint(void)
listen(s, 1); listen(s, 1);
int recieveIndex = 0;
while (true) { while (true) {
clientSocket = accept(s, NULL, NULL); clientSocket = accept(s, NULL, NULL);
if (clientSocket < 0) if (clientSocket < 0)
{ {
TRACE_DEBUGGER_SERVER("debug server : error on accept"); TRACE_DEBUGGER_SERVER("debug server : error on accept");
return; return;
} else { }
else
{
// read/write data // read/write data
TRACE_DEBUGGER_SERVER("debug server : client connected"); TRACE_DEBUGGER_SERVER("debug server : client connected");
char buf[256];
int readBytes; if (recieveIndex == 0)
while ((readBytes = read(clientSocket, buf, 256)) > 0) { {
replyToClient(clientSocket, "{\"from\":\"root\",\"applicationType\":\"browser\",\"traits\":{\"sources\": true}}");
++recieveIndex;
}
char buf[256] = {0};
int readBytes = 0;
while ((readBytes = ::recv(clientSocket, buf, sizeof(buf), 0)) > 0)
{
buf[readBytes] = '\0'; buf[readBytes] = '\0';
TRACE_DEBUGGER_SERVER("debug server : received command >%s", buf); TRACE_DEBUGGER_SERVER("debug server : received command >%s", buf);
if (recieveIndex == 1)
{
replyToClient(clientSocket, "{ \"from\":\"root\", \"tabs\":[{ \"actor\":\"JSBTabActor\", \"title\":\"Hello cocos2d-x JSB\", \"url\":\"http://www.cocos2d-x.org\" }], \"selected\":0 }");
}
else if (recieveIndex == 2)
{
replyToClient(clientSocket, "{ \"from\":\"JSBTabActor\", \"type\":\"tabAttached\", \"threadActor\":\"tabThreadActor111\" }");
}
else if (recieveIndex == 3)
{
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"paused\",\
\"actor\": \"JSBTabActor\",\
\"poppedFrames\": [],\
\"why\": {\
\"type\": \"attached\"\
}\
}");
//replyToClient(clientSocket, "{ \"from\":\"JSBTabActor\", \"type\":\"tabNavigated\", \"state\":\"start\", \"url\":\"my_url.js\" }");
}
else if (recieveIndex == 4)
{
// replyToClient(clientSocket, "{\"from\": \"tabThreadActor111\",\
// \"type\": \"newSource\",\
// \"source\": {\
// \"actor\": \"source_actor2\",\
// \"url\": \"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js\",\
// \"isBlackBoxed\": false\
// }}");
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"newSource\",\
\"source\": {\
\"actor\": \"source_actor1\",\
\"url\": \"file://~/Project/cocos2d-html5/cocos2d/CCDirector.js\",\
\"isBlackBoxed\": false\
}\
}");
replyToClient(clientSocket,
"{\
\"sources\": [\
{\
\"actor\": \"source_actor1\",\
\"url\": \"file://~/Project/cocos2d-html5/cocos2d/CCDirector.js\",\
\"isBlackBoxed\": false\
}\
],\
\"from\": \"tabThreadActor111\"\
}");
}
else if (recieveIndex == 5)
{
replyToClient(clientSocket, "{\
\"from\": \"source_actor1\",\
\"source\": {\
\"type\": \"longString\",\
\"initial\": \"var cc = cc || {}; cc.Director = {};\",\
\"length\": 100,\
\"actor\": \"conn2.longString48\"\
}\
}");
}
else if (recieveIndex == 6)
{
replyToClient(clientSocket, "{\
\"from\": \"conn2.longString48\",\
\"substring\": \"var cc = cc || {}; cc.Director = {};\
\\ncc.Sprite = {};\"\
}");
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"resumed\"\
}");
}
else if (recieveIndex == 7)
{
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"resumed\"\
}");
}
else if (recieveIndex == 8)
{
replyToClient(clientSocket, "{ \"from\":\"tabThreadActor111\", \"actor\":\"breakActor\"}");//, \"actualLocation\":2 }");
}
else if (recieveIndex == 9)
{
replyToClient(clientSocket, "{ \"from\":\"breakActor\" }");
}
else if (recieveIndex == 10)
{
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"resumed\"\
}");
}
else
{
std::string recvBuf = buf;
auto found = recvBuf.find("setBreakpoint");
if (found != std::string::npos)
{
replyToClient(clientSocket, "{ \"from\":\"tabThreadActor111\", \"actor\":\"breakActor\"}");//, \"actualLocation\":2 }");
}
found = recvBuf.find("delete");
if (found != std::string::npos)
{
replyToClient(clientSocket, "{ \"from\":\"breakActor\" }");
}
found = recvBuf.find("interrupt");
if (found != std::string::npos)
{
replyToClient(clientSocket, "{\
\"from\": \"tabThreadActor111\",\
\"type\": \"resumed\"\
}");
}
}
++recieveIndex;
// no other thread is using this // no other thread is using this
inData.append(buf); // inData.append(buf);
// process any input, send any output // // process any input, send any output
clearBuffers(); // clearBuffers();
} // while(read) } // while(read)
close(clientSocket); close(clientSocket);
} }
} // while(true) } // while(true)

View File

@ -141,7 +141,7 @@
Set this to 1 to enable the debugger Set this to 1 to enable the debugger
*/ */
#ifndef JSB_ENABLE_DEBUGGER #ifndef JSB_ENABLE_DEBUGGER
#define JSB_ENABLE_DEBUGGER 0 #define JSB_ENABLE_DEBUGGER 1
#endif // JSB_ENABLE_DEBUGGER #endif // JSB_ENABLE_DEBUGGER
#if JSB_ENABLE_DEBUGGER #if JSB_ENABLE_DEBUGGER