Сокет в handleIPCLoad () не получает никаких данных.
Я сделал проверку в конструкторе, чтобы увидеть, сколько байтов было отправлено (если есть), и получил исправленный результат 60 для строки C: \Mech Designer от MasterBLB \ Mech Designs \ SDR-5V.mechDesign В слоте я пробовал waitForRead (), но это не сработало.
Так что я делаю не так ?? *
//QString Application::ipcKey = MechDesignerByMasterBLBServerKey;
//QSharedMemory shared; <- in header file
InstanceGuard::InstanceGuard(int argc, char **argv, MainWindow *w)
:argc(argc), argv(argv), window(w), shared(Application::ipcKey)
{
if (shared.create(1))
{
QLocalServer::removeServer(Application::ipcKey);
server = new QLocalServer();
server->setSocketOptions(QLocalServer::UserAccessOption);
server->listen(Application::ipcKey);
connect(server, SIGNAL(newConnection()), this, SLOT(handleIPCLoad()));
if (argc > 1)
{
QStringList files;
files << QString::fromLocal8Bit(argv[1]);
window->loadMech(files);
}
}
else if (shared.error() == QSharedMemory::AlreadyExists && argc > 1)
{
QLocalSocket socket;
socket.connectToServer(Application::ipcKey);
// Wait for being connected
if (socket.state() == QLocalSocket::ConnectingState )
{
socket.waitForConnected(250);
}
auto writtenBytes = socket.write(argv[1]);
QMessageBox::information(0, "Written bytes", QString::number(writtenBytes));
socket.flush();
socket.waitForBytesWritten(250);
exit(-4);
}
}
void InstanceGuard::handleIPCLoad()
{
QLocalSocket *socket = server->nextPendingConnection();
socket->waitForConnected(250);
QStringList fileToLoad;
fileToLoad.append(socket->readAll());
socket->waitForReadyRead(250);
QMessageBox::information(window, 0, fileToLoad.at(0));
window->loadMech(fileToLoad);
}