Skip to content

Commit ad09940

Browse files
committed
allow streaming of data
1 parent 9b81709 commit ad09940

File tree

5 files changed

+121
-15
lines changed

5 files changed

+121
-15
lines changed

examples/SharedMemory/PhysicsClientSharedMemory.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1356,6 +1356,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus()
13561356

13571357
case CMD_CUSTOM_COMMAND_COMPLETED:
13581358
{
1359+
13591360
m_data->m_cachedReturnData.resize(serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes);
13601361
m_data->m_cachedReturnDataValue.m_length = serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes;
13611362

@@ -1365,7 +1366,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus()
13651366
m_data->m_cachedReturnDataValue.m_data1 = &m_data->m_cachedReturnData[0];
13661367
for (int i = 0; i < serverCmd.m_numDataStreamBytes; i++)
13671368
{
1368-
m_data->m_cachedReturnData[i] = m_data->m_testBlock1->m_bulletStreamDataServerToClientRefactor[i];
1369+
m_data->m_cachedReturnData[i + serverCmd.m_customCommandResultArgs.m_returnDataStart] = m_data->m_testBlock1->m_bulletStreamDataServerToClientRefactor[i];
13691370
}
13701371
}
13711372
break;
@@ -1680,6 +1681,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus()
16801681
m_data->m_lastServerStatus = m_data->m_tempBackupServerStatus;
16811682
}
16821683

1684+
16831685
if (serverCmd.m_type == CMD_REMOVE_USER_DATA_COMPLETED)
16841686
{
16851687
B3_PROFILE("CMD_REMOVE_USER_DATA_COMPLETED");
@@ -1867,6 +1869,23 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus()
18671869
return 0;
18681870
}
18691871

1872+
if (serverCmd.m_type == CMD_CUSTOM_COMMAND_COMPLETED)
1873+
{
1874+
int totalReceived = (serverCmd.m_numDataStreamBytes + serverCmd.m_customCommandResultArgs.m_returnDataStart);
1875+
int remaining = serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes - totalReceived;
1876+
1877+
if (remaining > 0)
1878+
{
1879+
// continue requesting return data
1880+
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
1881+
command.m_type = CMD_CUSTOM_COMMAND;
1882+
command.m_customCommandArgs.m_startingReturnBytes =
1883+
totalReceived;
1884+
submitClientCommand(command);
1885+
return 0;
1886+
}
1887+
}
1888+
18701889
return &m_data->m_lastServerStatus;
18711890
}
18721891
else

examples/SharedMemory/PhysicsDirect.cpp

Lines changed: 76 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,18 +1312,6 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd
13121312
}
13131313
case CMD_CUSTOM_COMMAND_COMPLETED:
13141314
{
1315-
m_data->m_cachedReturnData.resize(serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes);
1316-
m_data->m_cachedReturnDataValue.m_length = serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes;
1317-
1318-
if (serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes)
1319-
{
1320-
m_data->m_cachedReturnDataValue.m_type = serverCmd.m_customCommandResultArgs.m_returnDataType;
1321-
m_data->m_cachedReturnDataValue.m_data1 = &m_data->m_cachedReturnData[0];
1322-
for (int i = 0; i < serverCmd.m_numDataStreamBytes; i++)
1323-
{
1324-
m_data->m_cachedReturnData[i] = m_data->m_bulletStreamDataServerToClient[i];
1325-
}
1326-
}
13271315
break;
13281316
}
13291317
default:
@@ -1333,8 +1321,84 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd
13331321

13341322
};
13351323
}
1324+
1325+
1326+
bool PhysicsDirect::processCustomCommand(const struct SharedMemoryCommand& orgCommand)
1327+
{
1328+
SharedMemoryCommand command = orgCommand;
1329+
1330+
const SharedMemoryStatus& serverCmd = m_data->m_serverStatus;
1331+
1332+
int remaining = 0;
1333+
do
1334+
{
1335+
bool hasStatus = m_data->m_commandProcessor->processCommand(command, m_data->m_serverStatus, &m_data->m_bulletStreamDataServerToClient[0], SHARED_MEMORY_MAX_STREAM_CHUNK_SIZE);
1336+
1337+
b3Clock clock;
1338+
double startTime = clock.getTimeInSeconds();
1339+
double timeOutInSeconds = m_data->m_timeOutInSeconds;
1340+
1341+
while ((!hasStatus) && (clock.getTimeInSeconds() - startTime < timeOutInSeconds))
1342+
{
1343+
const SharedMemoryStatus* stat = processServerStatus();
1344+
if (stat)
1345+
{
1346+
hasStatus = true;
1347+
}
1348+
}
1349+
1350+
m_data->m_hasStatus = hasStatus;
1351+
1352+
if (hasStatus)
1353+
{
1354+
1355+
if (m_data->m_verboseOutput)
1356+
{
1357+
b3Printf("Success receiving %d return data\n",
1358+
serverCmd.m_numDataStreamBytes);
1359+
}
1360+
1361+
1362+
btAssert(m_data->m_serverStatus.m_type == CMD_CUSTOM_COMMAND_COMPLETED);
1363+
1364+
if (m_data->m_serverStatus.m_type == CMD_CUSTOM_COMMAND_COMPLETED)
1365+
{
1366+
m_data->m_cachedReturnData.resize(serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes);
1367+
m_data->m_cachedReturnDataValue.m_length = serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes;
1368+
1369+
if (serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes)
1370+
{
1371+
m_data->m_cachedReturnDataValue.m_type = serverCmd.m_customCommandResultArgs.m_returnDataType;
1372+
m_data->m_cachedReturnDataValue.m_data1 = &m_data->m_cachedReturnData[0];
1373+
for (int i = 0; i < serverCmd.m_numDataStreamBytes; i++)
1374+
{
1375+
m_data->m_cachedReturnData[i+ serverCmd.m_customCommandResultArgs.m_returnDataStart] = m_data->m_bulletStreamDataServerToClient[i];
1376+
}
1377+
}
1378+
int totalReceived = serverCmd.m_numDataStreamBytes + serverCmd.m_customCommandResultArgs.m_returnDataStart;
1379+
remaining = serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes - totalReceived;
1380+
1381+
if (remaining > 0)
1382+
{
1383+
m_data->m_hasStatus = false;
1384+
command.m_type = CMD_CUSTOM_COMMAND;
1385+
command.m_customCommandArgs.m_startingReturnBytes =
1386+
totalReceived;
1387+
}
1388+
}
1389+
}
1390+
1391+
} while (remaining > 0);
1392+
1393+
return m_data->m_hasStatus;
1394+
}
1395+
13361396
bool PhysicsDirect::submitClientCommand(const struct SharedMemoryCommand& command)
13371397
{
1398+
if (command.m_type == CMD_CUSTOM_COMMAND)
1399+
{
1400+
return processCustomCommand(command);
1401+
}
13381402
if (command.m_type == CMD_REQUEST_DEBUG_LINES)
13391403
{
13401404
return processDebugLines(command);

examples/SharedMemory/PhysicsDirect.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ class PhysicsDirect : public PhysicsClient
2222

2323
bool processVisualShapeData(const struct SharedMemoryCommand& orgCommand);
2424

25-
bool processMeshData(const struct SharedMemoryCommand& orgCommand);
25+
bool processMeshData(const struct SharedMemoryCommand& orgCommand);
2626

2727
void processBodyJointInfo(int bodyUniqueId, const struct SharedMemoryStatus& serverCmd);
2828

2929
void processAddUserData(const struct SharedMemoryStatus& serverCmd);
3030

31+
bool processCustomCommand(const struct SharedMemoryCommand& orgCommand);
32+
3133
void postProcessStatus(const struct SharedMemoryStatus& serverCmd);
3234

3335
void resetData();

examples/SharedMemory/PhysicsServerCommandProcessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5802,7 +5802,7 @@ bool PhysicsServerCommandProcessor::processCustomCommand(const struct SharedMemo
58025802
serverStatusOut.m_numDataStreamBytes = numBytes;
58035803
for (int i = 0; i < numBytes; i++)
58045804
{
5805-
bufferServerToClient[i] = returnData->m_data1[i];
5805+
bufferServerToClient[i] = returnData->m_data1[i+ startBytes];
58065806
}
58075807
serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes = returnData->m_length;
58085808
serverCmd.m_customCommandResultArgs.m_returnDataType = returnData->m_type;

examples/SharedMemory/plugins/tinyRendererPlugin/tinyRendererPlugin.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,18 @@ while (1):
2121
struct MyRendererPluginClass
2222
{
2323
TinyRendererVisualShapeConverter m_renderer;
24+
b3UserDataValue* m_returnData;
2425
MyRendererPluginClass()
26+
:m_returnData(0)
2527
{
2628
}
2729
virtual ~MyRendererPluginClass()
2830
{
31+
if (m_returnData)
32+
{
33+
delete[] m_returnData->m_data1;
34+
}
35+
delete m_returnData;
2936
}
3037
};
3138

@@ -38,6 +45,20 @@ B3_SHARED_API int initPlugin_tinyRendererPlugin(struct b3PluginContext* context)
3845

3946
B3_SHARED_API int executePluginCommand_tinyRendererPlugin(struct b3PluginContext* context, const struct b3PluginArguments* arguments)
4047
{
48+
MyRendererPluginClass* obj = (MyRendererPluginClass*)context->m_userPointer;
49+
if (obj->m_returnData==0)
50+
{
51+
obj->m_returnData = new b3UserDataValue();
52+
obj->m_returnData->m_type = 1;
53+
obj->m_returnData->m_length = 123;
54+
char* data = new char[obj->m_returnData->m_length];
55+
for (int i = 0; i < obj->m_returnData->m_length; i++)
56+
{
57+
data[i] = i;
58+
}
59+
obj->m_returnData->m_data1 = data;
60+
}
61+
context->m_returnData = obj->m_returnData;
4162
return -1;
4263
}
4364

0 commit comments

Comments
 (0)