OSDN Git Service

[denncoCreator] fixed a bug in the IPC communication between denncoCreator and dennco.
authortkawata <tkawata@users.sourceforge.jp>
Tue, 23 Oct 2012 14:59:24 +0000 (23:59 +0900)
committertkawata <tkawata@users.sourceforge.jp>
Tue, 23 Oct 2012 14:59:24 +0000 (23:59 +0900)
Source/mainwindow.cpp

index 3ca1749..f877ec5 100644 (file)
@@ -69,11 +69,6 @@ MainWindow::MainWindow(QWidget *parent) :
 
     TKLog::setDestination(new TKConsole);
 
-    d_IPCServerName = "denncoCreator_";
-    QTextStream s(&d_IPCServerName);
-    s.setIntegerBase(16);
-    s << qrand();
-
     d_creator = new DCCreator(this);
     d_visualizerWidget = new DCGLVisualizerWidget(d_creator, this) ;
     setCentralWidget(d_visualizerWidget);
@@ -377,7 +372,7 @@ void MainWindow::playContent()
         QLocalSocket *socket = new QLocalSocket(this);
         connect(socket, SIGNAL(disconnected()), socket,SLOT(deleteLater()));
 
-        for (int retry = 0; retry < 10; retry++)
+        for (int retry = 0; retry < 20; retry++)
         {
             socket->connectToServer(d_IPCServerName);
             if (socket->waitForConnected())
@@ -389,11 +384,17 @@ void MainWindow::playContent()
         QString requestData = "close,";
         socket->write(requestData.toLocal8Bit());
         socket->flush();
+        socket->waitForBytesWritten();
         socket->close();
+
+        if (!d_player.waitForFinished())
+            d_player.kill();
     }
 
-    if (!d_player.waitForFinished(5000))
-        d_player.kill();
+    d_IPCServerName = "denncoCreator_";
+    QTextStream s(&d_IPCServerName);
+    s.setIntegerBase(16);
+    s << qrand();
 
     if (d_player.state() == QProcess::NotRunning)
     {
@@ -402,14 +403,14 @@ void MainWindow::playContent()
         args << d_IPCServerName;
 
         d_player.start(DENNCO_ENGINE, args);
-        d_player.waitForStarted(5000);
+        d_player.waitForStarted();
     }
 
     if (d_player.state() == QProcess::Running)
     {
         QLocalSocket *socket = new QLocalSocket(this);
         connect(socket, SIGNAL(disconnected()), socket,SLOT(deleteLater()));
-        for (int retry = 0; retry < 10; retry++)
+        for (int retry = 0; retry < 20; retry++)
         {
             socket->connectToServer(d_IPCServerName);
             if (socket->waitForConnected())
@@ -422,6 +423,7 @@ void MainWindow::playContent()
         requestData.append(d_creator->getCurrentContent()->getContentRootPath());
         socket->write(requestData.toLocal8Bit());
         socket->flush();
+        socket->waitForBytesWritten();
         socket->close();
     }
 }