diff --git a/examples/SharedMemory/PhysicsClientGRPC.cpp b/examples/SharedMemory/PhysicsClientGRPC.cpp index fe32bd5d1..5b788ecbb 100644 --- a/examples/SharedMemory/PhysicsClientGRPC.cpp +++ b/examples/SharedMemory/PhysicsClientGRPC.cpp @@ -67,7 +67,11 @@ struct GRPCNetworkedInternalData { if (m_isConnected) return true; - std::string hostport = m_hostName + ':' + std::to_string(m_port); + std::string hostport = m_hostName; + if (m_port >= 0) + { + hostport += ':' + std::to_string(m_port); + } m_grpcChannel = grpc::CreateChannel( hostport, grpc::InsecureChannelCredentials()); diff --git a/examples/SharedMemory/grpc/main.cpp b/examples/SharedMemory/grpc/main.cpp index 5560abd55..da9bc2d30 100644 --- a/examples/SharedMemory/grpc/main.cpp +++ b/examples/SharedMemory/grpc/main.cpp @@ -255,7 +255,11 @@ int main(int argc, char** argv) int port = 6667; parseArgs.GetCmdLineArgument("port", port); std::string hostName = "localhost"; - std::string hostNamePort = hostName + ":" + std::to_string(port); + std::string hostNamePort = hostName; + if (port>=0) + { + hostNamePort += ":" + std::to_string(port); + } gVerboseNetworkMessagesServer = parseArgs.CheckCmdLineFlag("verbose"); diff --git a/examples/pybullet/examples/grpcClient.py b/examples/pybullet/examples/grpcClient.py new file mode 100644 index 000000000..cc44d06f1 --- /dev/null +++ b/examples/pybullet/examples/grpcClient.py @@ -0,0 +1,19 @@ + +import pybullet as p + +usePort = True + +if (usePort): + id = p.connect(p.GRPC,"localhost:12345") +else: + id = p.connect(p.GRPC,"localhost") +print("id=",id) + +if (id<0): + print("Cannot connect to GRPC server") + exit(0) + +print ("Connected to GRPC") +r2d2 = p.loadURDF("r2d2.urdf") +print("numJoints = ", p.getNumJoints(r2d2)) + diff --git a/examples/pybullet/examples/grpcServer.py b/examples/pybullet/examples/grpcServer.py new file mode 100644 index 000000000..a1960714f --- /dev/null +++ b/examples/pybullet/examples/grpcServer.py @@ -0,0 +1,29 @@ +import pybullet as p +import time + +useDirect = False +usePort = True + +p.connect(p.GUI) +id = p.loadPlugin("grpcPlugin") +#dynamically loading the plugin +#id = p.loadPlugin("E:/develop/bullet3/bin/pybullet_grpcPlugin_vs2010_x64_debug.dll", postFix="_grpcPlugin") + +#start the GRPC server at hostname, port +if (id<0): + print("Cannot load grpcPlugin") + exit(0) + +if usePort: + p.executePluginCommand(id, "localhost:12345") +else: + p.executePluginCommand(id, "localhost") + +while p.isConnected(): + if (useDirect): + #Only in DIRECT mode, since there is no 'ping' you need to manually call to handle RCPs: + numRPC = 10 + p.executePluginCommand(id, intArgs=[numRPC]) + else: + dt = 1./240. + time.sleep(dt) diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c index 5a500c4ee..d3ca5fb96 100644 --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -330,6 +330,7 @@ static PyObject* pybullet_connectPhysicsServer(PyObject* self, PyObject* args, P int key = SHARED_MEMORY_KEY; int udpPort = 1234; int tcpPort = 6667; + int grpcPort = -1; int argc = 0; char** argv=0; @@ -352,6 +353,7 @@ static PyObject* pybullet_connectPhysicsServer(PyObject* self, PyObject* args, P { udpPort = port; tcpPort = port; + grpcPort = port; } } } @@ -437,7 +439,7 @@ static PyObject* pybullet_connectPhysicsServer(PyObject* self, PyObject* args, P case eCONNECT_GRPC: { #ifdef BT_ENABLE_GRPC - sm = b3ConnectPhysicsGRPC(hostName, tcpPort); + sm = b3ConnectPhysicsGRPC(hostName, grpcPort); #else PyErr_SetString(SpamError, "GRPC is not enabled in this pybullet build"); #endif