PyBullet: TCP connection, optimized getVREvents to allow faster Windows -> Linux Vive tracking state communication.

This commit is contained in:
Erwin Coumans
2018-06-27 23:43:42 -07:00
parent ac59886960
commit bfc85ff1fd
2 changed files with 57 additions and 19 deletions

View File

@@ -180,10 +180,19 @@ bool TcpNetworkedPhysicsProcessor::processCommand(const struct SharedMemoryComma
data = (unsigned char*) &clientCmd.m_type; data = (unsigned char*) &clientCmd.m_type;
} }
else else
{
if (clientCmd.m_type == CMD_REQUEST_VR_EVENTS_DATA)
{
sz = 3 * sizeof(int) + sizeof(smUint64_t) + 16;
data = (unsigned char*)&clientCmd;
}
else
{ {
sz = sizeof(SharedMemoryCommand); sz = sizeof(SharedMemoryCommand);
data = (unsigned char*)&clientCmd; data = (unsigned char*)&clientCmd;
} }
}
m_data->m_tcpSocket.Send((const uint8 *)data,sz); m_data->m_tcpSocket.Send((const uint8 *)data,sz);

View File

@@ -185,10 +185,15 @@ int main(int argc, char *argv[])
cmd.m_type = *(int*)&bytesReceived[0]; cmd.m_type = *(int*)&bytesReceived[0];
} }
if (numBytesRec == sizeof(SharedMemoryCommand)) if (numBytesRec == sizeof(SharedMemoryCommand))
{ {
cmdPtr = (SharedMemoryCommand*)&bytesReceived[0]; cmdPtr = (SharedMemoryCommand*)&bytesReceived[0];
} }
else
{
cmdPtr = (SharedMemoryCommand*)&bytesReceived[0];
}
if (cmdPtr) if (cmdPtr)
{ {
SharedMemoryStatus serverStatus; SharedMemoryStatus serverStatus;
@@ -207,7 +212,7 @@ int main(int argc, char *argv[])
} }
if (gVerboseNetworkMessagesServer) if (gVerboseNetworkMessagesServer)
{ {
printf("buffer.size = %d\n", buffer.size()); //printf("buffer.size = %d\n", buffer.size());
printf("serverStatus.m_numDataStreamBytes = %d\n", serverStatus.m_numDataStreamBytes); printf("serverStatus.m_numDataStreamBytes = %d\n", serverStatus.m_numDataStreamBytes);
} }
if (hasStatus) if (hasStatus)
@@ -233,12 +238,35 @@ int main(int argc, char *argv[])
} }
else else
{
if (cmdPtr->m_type == CMD_REQUEST_VR_EVENTS_DATA)
{
int headerSize = 16+5 * sizeof(int) + sizeof(smUint64_t) + sizeof(char*) + sizeof(b3VRControllerEvent)*serverStatus.m_sendVREvents.m_numVRControllerEvents;
packetData.resize(4 + headerSize);
int sz = packetData.size();
int curPos = 0;
MySerializeInt(sz, &packetData[curPos]);
curPos += 4;
for (int i = 0; i < headerSize; i++)
{
packetData[i + curPos] = statBytes[i];
}
curPos += headerSize;
pClient->Send(&packetData[0], packetData.size());
}
else
{ {
//create packetData with [int packetSizeInBytes, status, streamBytes) //create packetData with [int packetSizeInBytes, status, streamBytes)
packetData.resize(4 + sizeof(SharedMemoryStatus) + serverStatus.m_numDataStreamBytes); packetData.resize(4 + sizeof(SharedMemoryStatus) + serverStatus.m_numDataStreamBytes);
int sz = packetData.size(); int sz = packetData.size();
int curPos = 0; int curPos = 0;
if (gVerboseNetworkMessagesServer)
{
//printf("buffer.size = %d\n", buffer.size());
printf("serverStatus packed size = %d\n", sz);
}
MySerializeInt(sz, &packetData[curPos]); MySerializeInt(sz, &packetData[curPos]);
curPos += 4; curPos += 4;
for (int i = 0; i < sizeof(SharedMemoryStatus); i++) for (int i = 0; i < sizeof(SharedMemoryStatus); i++)
@@ -255,6 +283,7 @@ int main(int argc, char *argv[])
pClient->Send(&packetData[0], packetData.size()); pClient->Send(&packetData[0], packetData.size());
} }
} }
}
bytesReceived.clear(); bytesReceived.clear();