//============================================================================== bool InterprocessConnection::readNextMessageInt() { uint32 messageHeader[2]; const int bytes = socket != nullptr ? socket->read (messageHeader, sizeof (messageHeader), true) : pipe ->read (messageHeader, sizeof (messageHeader), -1); if (bytes == sizeof (messageHeader) && ByteOrder::swapIfBigEndian (messageHeader[0]) == magicMessageHeader) { int bytesInMessage = (int) ByteOrder::swapIfBigEndian (messageHeader[1]); if (bytesInMessage > 0) { MemoryBlock messageData ((size_t) bytesInMessage, true); int bytesRead = 0; while (bytesInMessage > 0) { if (threadShouldExit()) return false; const int numThisTime = jmin (bytesInMessage, 65536); void* const data = addBytesToPointer (messageData.getData(), bytesRead); const int bytesIn = socket != nullptr ? socket->read (data, numThisTime, true) : pipe ->read (data, numThisTime, -1); if (bytesIn <= 0) break; bytesRead += bytesIn; bytesInMessage -= bytesIn; } if (bytesRead >= 0) deliverDataInt (messageData); } } else if (bytes < 0) { if (socket != nullptr) { const ScopedLock sl (pipeAndSocketLock); socket = nullptr; } connectionLostInt(); return false; } return true; }
bool InterprocessConnection::readNextMessage() { uint32 messageHeader[2]; auto bytes = readData (messageHeader, sizeof (messageHeader)); if (bytes == sizeof (messageHeader) && ByteOrder::swapIfBigEndian (messageHeader[0]) == magicMessageHeader) { auto bytesInMessage = (int) ByteOrder::swapIfBigEndian (messageHeader[1]); if (bytesInMessage > 0) { MemoryBlock messageData ((size_t) bytesInMessage, true); int bytesRead = 0; while (bytesInMessage > 0) { if (thread->threadShouldExit()) return false; auto numThisTime = jmin (bytesInMessage, 65536); auto bytesIn = readData (addBytesToPointer (messageData.getData(), bytesRead), numThisTime); if (bytesIn <= 0) break; bytesRead += bytesIn; bytesInMessage -= bytesIn; } if (bytesRead >= 0) deliverDataInt (messageData); } return true; } if (bytes < 0) { if (socket != nullptr) deletePipeAndSocket(); connectionLostInt(); } return false; }