33#define PyInt_AsLong PyLong_AsLong
34#define PyInt_FromLong PyLong_FromLong
35#define PYOBJECT_NULL_STRING PyBytes_FromStringAndSize("", 0)
36#define C_STR_TO_PY_BYTES(cstr) \
37 PyBytes_FromStringAndSize(cstr.c_str(), cstr.size())
39google::protobuf::Message *PyChannelUtils::raw_msg_class_ =
nullptr;
41static PyObject *cyber_py_init(PyObject *self, PyObject *args) {
44 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"s#:cyber_py_init"), &data,
46 AERROR <<
"cyber_py_init:PyArg_ParseTuple failed!";
49 std::string module_name(data, len);
58static PyObject *cyber_py_ok(PyObject *self, PyObject *args) {
67static PyObject *cyber_py_shutdown(PyObject *self, PyObject *args) {
73static PyObject *cyber_py_is_shutdown(PyObject *self, PyObject *args) {
82static PyObject *cyber_py_waitforshutdown(PyObject *self, PyObject *args) {
90 T obj_ptr = (T)PyCapsule_GetPointer(pyobj, type_ptr.c_str());
91 if (obj_ptr ==
nullptr) {
92 AERROR <<
"PyObjectToPtr failed,type->" << type_ptr <<
" "
93 <<
"pyobj: " << pyobj;
99 char *channel_name =
nullptr;
101 uint32_t qos_depth = 1;
103 PyObject *node_pyobj =
nullptr;
104 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssIO:new_PyWriter"),
105 &channel_name, &
data_type, &qos_depth, &node_pyobj)) {
110 Node *node =
reinterpret_cast<Node *
>(
111 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
112 if (
nullptr == node) {
119 new PyWriter((std::string
const &)*channel_name,
120 (std::string
const &)*
data_type, qos_depth, node);
121 PyObject *pyobj_writer =
122 PyCapsule_New(writer,
"apollo_cyber_pywriter",
nullptr);
127 PyObject *writer_py =
nullptr;
128 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyWriter"),
135 PyCapsule_GetPointer(writer_py,
"apollo_cyber_pywriter"));
142 PyObject *pyobj_writer =
nullptr;
145 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oy*:cyber_PyWriter_write"),
146 &pyobj_writer, &buffer)) {
147 AERROR <<
"cyber_PyWriter_write:cyber_PyWriter_write failed!";
148 PyBuffer_Release(&buffer);
153 PyObjectToPtr<PyWriter *>(pyobj_writer,
"apollo_cyber_pywriter");
155 if (
nullptr == writer) {
156 AERROR <<
"cyber_PyWriter_write:writer ptr is null!";
157 PyBuffer_Release(&buffer);
161 std::string data_str(
162 const_cast<const char *
>(
static_cast<char *
>(buffer.buf)), buffer.len);
163 int ret = writer->
write(data_str);
164 PyBuffer_Release(&buffer);
169 char *channel_name =
nullptr;
171 PyObject *node_pyobj =
nullptr;
172 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyReader"),
173 &channel_name, &
data_type, &node_pyobj)) {
178 Node *node =
reinterpret_cast<Node *
>(
179 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
188 PyObject *pyobj_reader =
189 PyCapsule_New(reader,
"apollo_cyber_pyreader",
nullptr);
194 PyObject *reader_py =
nullptr;
195 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyReader"),
202 PyCapsule_GetPointer(reader_py,
"apollo_cyber_pyreader"));
209 PyObject *pyobj_reader =
nullptr;
210 PyObject *pyobj_iswait =
nullptr;
212 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:cyber_PyReader_read"),
213 &pyobj_reader, &pyobj_iswait)) {
214 AERROR <<
"cyber_PyReader_read:PyArg_ParseTuple failed!";
219 PyObjectToPtr<PyReader *>(pyobj_reader,
"apollo_cyber_pyreader");
220 if (
nullptr == reader) {
221 AERROR <<
"cyber_PyReader_read:PyReader ptr is null!";
226 int r = PyObject_IsTrue(pyobj_iswait);
228 AERROR <<
"cyber_PyReader_read:pyobj_iswait is error!";
233 bool wait = (r == 1);
235 const std::string reader_ret = reader->
read(wait);
240 PyObject *pyobj_regist_fun =
nullptr;
241 PyObject *pyobj_reader =
nullptr;
243 int (*callback_fun)(
char const *) = (
int (*)(
char const *))0;
245 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:PyReader_register_func"),
246 &pyobj_reader, &pyobj_regist_fun)) {
252 PyObjectToPtr<PyReader *>(pyobj_reader,
"apollo_cyber_pyreader");
253 callback_fun = (int (*)(
const char *i))
PyInt_AsLong(pyobj_regist_fun);
255 AINFO <<
"reader regist fun";
264 char *channel_name =
nullptr;
266 PyObject *node_pyobj =
nullptr;
267 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyClient"),
268 &channel_name, &
data_type, &node_pyobj)) {
273 Node *node =
reinterpret_cast<Node *
>(
274 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
283 PyObject *pyobj_client =
284 PyCapsule_New(client,
"apollo_cyber_pyclient",
nullptr);
289 PyObject *client_py =
nullptr;
290 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyClient"),
297 PyCapsule_GetPointer(client_py,
"apollo_cyber_pyclient"));
304 PyObject *pyobj_client =
nullptr;
307 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oy*:PyClient_send_request"),
308 &pyobj_client, &buffer)) {
309 AERROR <<
"cyber_PyClient_send_request:PyArg_ParseTuple failed!";
310 PyBuffer_Release(&buffer);
315 PyObjectToPtr<PyClient *>(pyobj_client,
"apollo_cyber_pyclient");
317 if (
nullptr == client) {
318 AERROR <<
"cyber_PyClient_send_request:client ptr is null!";
319 PyBuffer_Release(&buffer);
323 std::string data_str(
324 const_cast<const char *
>(
static_cast<char *
>(buffer.buf)), buffer.len);
325 ADEBUG <<
"c++:PyClient_send_request data->[ " << data_str <<
"]";
326 const std::string response_str =
328 ADEBUG <<
"c++:response data->[ " << response_str <<
"]";
329 PyBuffer_Release(&buffer);
334 char *channel_name =
nullptr;
336 PyObject *node_pyobj =
nullptr;
337 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyService"),
338 &channel_name, &
data_type, &node_pyobj)) {
343 Node *node =
reinterpret_cast<Node *
>(
344 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
353 PyObject *pyobj_service =
354 PyCapsule_New(service,
"apollo_cyber_pyservice",
nullptr);
355 return pyobj_service;
359 PyObject *pyobj_service =
nullptr;
360 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyService"),
367 PyCapsule_GetPointer(pyobj_service,
"apollo_cyber_pyservice"));
374 PyObject *pyobj_regist_fun =
nullptr;
375 PyObject *pyobj_service =
nullptr;
377 int (*callback_fun)(
char const *) = (
int (*)(
char const *))0;
379 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:PyService_register_func"),
380 &pyobj_service, &pyobj_regist_fun)) {
386 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
387 callback_fun = (int (*)(
const char *i))
PyInt_AsLong(pyobj_regist_fun);
389 AINFO <<
"service regist fun";
398 PyObject *pyobj_service =
nullptr;
399 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:cyber_PyService_read"),
401 AERROR <<
"cyber_PyService_read:PyArg_ParseTuple failed!";
405 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
406 if (
nullptr == service) {
407 AERROR <<
"cyber_PyService_read:service ptr is null!";
411 const std::string reader_ret = service->
read();
412 ADEBUG <<
"c++:PyService_read -> " << reader_ret;
417 PyObject *pyobj_service =
nullptr;
420 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oy*:cyber_PyService_write"),
421 &pyobj_service, &buffer)) {
422 AERROR <<
"cyber_PyService_write:PyArg_ParseTuple failed!";
423 PyBuffer_Release(&buffer);
428 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
430 if (
nullptr == service) {
431 AERROR <<
"cyber_PyService_write:writer ptr is null!";
432 PyBuffer_Release(&buffer);
436 std::string data_str(
437 const_cast<const char *
>(
static_cast<char *
>(buffer.buf)), buffer.len);
438 ADEBUG <<
"c++:PyService_write data->[ " << data_str <<
"]";
439 int ret = service->
write((std::string
const &)data_str);
440 PyBuffer_Release(&buffer);
445 char *node_name =
nullptr;
446 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"s:new_PyNode"), &node_name)) {
451 PyNode *node =
new PyNode((std::string
const &)node_name);
452 PyObject *pyobj_node = PyCapsule_New(node,
"apollo_cyber_pynode",
nullptr);
457 PyObject *pyobj_node =
nullptr;
458 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyNode"),
465 PyCapsule_GetPointer(pyobj_node,
"apollo_cyber_pynode"));
472 PyObject *pyobj_node =
nullptr;
473 char *channel_name =
nullptr;
474 char *type_name =
nullptr;
475 uint32_t qos_depth = 1;
477 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OssI:PyNode_create_writer"),
478 &pyobj_node, &channel_name, &type_name, &qos_depth)) {
479 AERROR <<
"cyber_PyNode_create_writer:PyArg_ParseTuple failed!";
484 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
485 if (
nullptr == node) {
486 AERROR <<
"cyber_PyNode_create_writer:node ptr is null!";
493 (std::string
const &)type_name, qos_depth)));
495 if (
nullptr == writer) {
496 AERROR <<
"cyber_PyNode_create_writer:writer is null!";
500 PyObject *pyobj_writer =
501 PyCapsule_New(writer,
"apollo_cyber_pywriter",
nullptr);
506 char *channel_name =
nullptr;
507 char *type_name =
nullptr;
508 PyObject *pyobj_node =
nullptr;
510 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oss:PyNode_create_reader"),
511 &pyobj_node, &channel_name, &type_name)) {
512 AERROR <<
"PyNode_create_reader:PyArg_ParseTuple failed!";
517 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
518 if (
nullptr == node) {
519 AERROR <<
"PyNode_create_reader:node ptr is null!";
525 (std::string
const &)channel_name, (std::string
const &)type_name)));
526 ACHECK(reader) <<
"PyReader is NULL!";
528 PyObject *pyobj_reader =
529 PyCapsule_New(reader,
"apollo_cyber_pyreader",
nullptr);
534 char *channel_name =
nullptr;
535 char *type_name =
nullptr;
536 PyObject *pyobj_node =
nullptr;
538 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oss:PyNode_create_client"),
539 &pyobj_node, &channel_name, &type_name)) {
540 AERROR <<
"PyNode_create_client:PyArg_ParseTuple failed!";
545 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
546 if (
nullptr == node) {
547 AERROR <<
"PyNode_create_client:node ptr is null!";
553 (std::string
const &)channel_name, (std::string
const &)type_name)));
554 PyObject *pyobj_client =
555 PyCapsule_New(client,
"apollo_cyber_pyclient",
nullptr);
561 char *channel_name =
nullptr;
562 char *type_name =
nullptr;
563 PyObject *pyobj_node =
nullptr;
565 if (!PyArg_ParseTuple(args,
566 const_cast<char *
>(
"Oss:cyber_PyNode_create_service"),
567 &pyobj_node, &channel_name, &type_name)) {
568 AERROR <<
"cyber_PyNode_create_service:PyArg_ParseTuple failed!";
573 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
574 if (
nullptr == node) {
575 AERROR <<
"cyber_PyNode_create_service:node ptr is null!";
581 (std::string
const &)channel_name, (std::string
const &)type_name)));
582 PyObject *pyobj_service =
583 PyCapsule_New(service,
"apollo_cyber_pyservice",
nullptr);
584 return pyobj_service;
588 PyObject *pyobj_node =
nullptr;
590 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:PyNode_shutdown"),
592 AERROR <<
"cyber_PyNode_shutdown:PyNode_shutdown failed!";
597 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
598 if (
nullptr == node) {
599 AERROR <<
"cyber_PyNode_shutdown:node ptr is null!";
609 PyObject *pyobj_node =
nullptr;
612 if (!PyArg_ParseTuple(args,
613 const_cast<char *
>(
"Oy*:cyber_PyNode_register_message"),
614 &pyobj_node, &buffer)) {
615 AERROR <<
"cyber_PyNode_register_message: failed!";
617 PyBuffer_Release(&buffer);
620 std::string desc_str(
621 const_cast<const char *
>(
static_cast<char *
>(buffer.buf)), buffer.len);
622 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
623 if (
nullptr == node) {
624 AERROR <<
"cyber_PyNode_register_message:node ptr is null! desc->"
627 PyBuffer_Release(&buffer);
632 PyBuffer_Release(&buffer);
637 char *channel_name =
nullptr;
639 unsigned char sleep_s = 0;
640 if (!PyArg_ParseTuple(
641 args,
const_cast<char *
>(
"s#B:cyber_PyChannelUtils_get_msg_type"),
642 &channel_name, &len, &sleep_s)) {
643 AERROR <<
"cyber_PyChannelUtils_get_msg_type failed!";
646 std::string channel(channel_name, len);
647 const std::string msg_type =
653 PyObject *self, PyObject *args) {
654 char *msgtype =
nullptr;
655 char *rawdata =
nullptr;
657 if (!PyArg_ParseTuple(
660 "ss#:cyber_PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata"),
661 &msgtype, &rawdata, &len)) {
663 <<
"cyber_PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata failed!";
666 std::string raw_data(rawdata, len);
667 const std::string debug_string =
672static PyObject *cyber_PyChannelUtils_get_active_channels(PyObject *self,
674 unsigned char sleep_s = 0;
675 if (!PyArg_ParseTuple(
677 const_cast<char *
>(
"B:cyber_PyChannelUtils_get_active_channels"),
679 AERROR <<
"cyber_PyChannelUtils_get_active_channels failed!";
684 std::vector<std::string> channel_list =
686 PyObject *pyobj_list = PyList_New(channel_list.size());
688 for (
const std::string &channel : channel_list) {
689 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
700static PyObject *cyber_PyChannelUtils_get_channels_info(PyObject *self,
703 PyObject *pyobj_channelinfo_dict = PyDict_New();
704 for (
auto &channelinfo : channelsinfo) {
705 std::string channel_name = channelinfo.first;
706 PyObject *bld_name = Py_BuildValue(
"s", channel_name.c_str());
707 std::vector<std::string> &roleAttr_list = channelinfo.second;
708 PyObject *pyobj_list = PyList_New(roleAttr_list.size());
711 for (
auto &attr : roleAttr_list) {
715 PyDict_SetItem(pyobj_channelinfo_dict, bld_name, pyobj_list);
718 return pyobj_channelinfo_dict;
722 unsigned char sleep_s = 0;
723 if (!PyArg_ParseTuple(
724 args,
const_cast<char *
>(
"B:cyber_PyNodeUtils_get_active_nodes"),
726 AERROR <<
"cyber_PyNodeUtils_get_active_nodes failed!";
731 std::vector<std::string> nodes_name =
733 PyObject *pyobj_list = PyList_New(nodes_name.size());
735 for (
const std::string &name : nodes_name) {
736 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", name.c_str()));
744 char *node_name =
nullptr;
746 unsigned char sleep_s = 0;
747 if (!PyArg_ParseTuple(
748 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_node_attr"),
749 &node_name, &len, &sleep_s)) {
750 AERROR <<
"cyber_PyNodeUtils_get_node_attr failed!";
754 std::string name(node_name, len);
755 const std::string node_attr =
761 char *node_name =
nullptr;
763 unsigned char sleep_s = 0;
764 if (!PyArg_ParseTuple(
765 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_readersofnode"),
766 &node_name, &len, &sleep_s)) {
767 AERROR <<
"cyber_PyNodeUtils_get_readersofnode failed!";
771 std::string name(node_name, len);
772 std::vector<std::string> readers_channel =
774 PyObject *pyobj_list = PyList_New(readers_channel.size());
776 for (
const std::string &channel : readers_channel) {
777 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
785 char *node_name =
nullptr;
787 unsigned char sleep_s = 0;
788 if (!PyArg_ParseTuple(
789 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_writersofnode"),
790 &node_name, &len, &sleep_s)) {
791 AERROR <<
"cyber_PyNodeUtils_get_writersofnode failed!";
795 std::string name(node_name, len);
796 std::vector<std::string> writers_channel =
798 PyObject *pyobj_list = PyList_New(writers_channel.size());
800 for (
const std::string &channel : writers_channel) {
801 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
810 unsigned char sleep_s = 0;
811 if (!PyArg_ParseTuple(
813 const_cast<char *
>(
"B:cyber_PyServiceUtils_get_active_services"),
815 AERROR <<
"cyber_PyServiceUtils_get_active_services failed!";
820 std::vector<std::string> services_name =
822 PyObject *pyobj_list = PyList_New(services_name.size());
824 for (
const std::string &name : services_name) {
825 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", name.c_str()));
834 char *srv_name =
nullptr;
836 unsigned char sleep_s = 0;
837 if (!PyArg_ParseTuple(
838 args,
const_cast<char *
>(
"s#B:cyber_PyServiceUtils_get_service_attr"),
839 &srv_name, &len, &sleep_s)) {
840 AERROR <<
"cyber_PyServiceUtils_get_service_attr failed!";
844 std::string name(srv_name, len);
852static PyMethodDef _cyber_methods[] = {
854 {
"py_init", cyber_py_init, METH_VARARGS,
""},
855 {
"py_ok", cyber_py_ok, METH_NOARGS,
""},
856 {
"py_shutdown", cyber_py_shutdown, METH_NOARGS,
""},
857 {
"py_is_shutdown", cyber_py_is_shutdown, METH_NOARGS,
""},
858 {
"py_waitforshutdown", cyber_py_waitforshutdown, METH_NOARGS,
""},
895 {
"PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata",
898 {
"PyChannelUtils_get_active_channels",
899 cyber_PyChannelUtils_get_active_channels, METH_VARARGS,
""},
900 {
"PyChannelUtils_get_channels_info", cyber_PyChannelUtils_get_channels_info,
912 {
"PyServiceUtils_get_active_services",
917 {
nullptr,
nullptr, 0,
nullptr}
922 static struct PyModuleDef module_def = {
923 PyModuleDef_HEAD_INIT,
934 return PyModule_Create(&module_def);
Node is the fundamental building block of Cyber RT.
static std::unordered_map< std::string, std::vector< std::string > > get_channels_info(uint8_t sleep_s=2)
static std::string get_msgtype_by_channelname(const std::string &channel_name, uint8_t sleep_s=0)
static std::string get_debugstring_by_msgtype_rawmsgdata(const std::string &msg_type, const std::string &rawmsgdata)
static std::vector< std::string > get_active_channels(uint8_t sleep_s=2)
std::string send_request(std::string request)
static std::vector< std::string > get_readersofnode(const std::string &node_name, uint8_t sleep_s=2)
static std::vector< std::string > get_writersofnode(const std::string &node_name, uint8_t sleep_s=2)
static std::string get_node_attr(const std::string &node_name, uint8_t sleep_s=2)
static std::vector< std::string > get_active_nodes(uint8_t sleep_s=2)
PyReader * create_reader(const std::string &channel, const std::string &type)
PyService * create_service(const std::string &service, const std::string &type)
PyWriter * create_writer(const std::string &channel, const std::string &type, uint32_t qos_depth=1)
PyClient * create_client(const std::string &service, const std::string &type)
void register_message(const std::string &desc)
std::string read(bool wait=false)
void register_func(int(*func)(const char *))
static std::vector< std::string > get_active_services(uint8_t sleep_s=2)
static std::string get_service_attr(const std::string &service_name, uint8_t sleep_s=2)
void register_func(int(*func)(const char *))
int write(const std::string &data)
int write(const std::string &data)
void py_waitforshutdown()
bool py_init(const std::string &module_name)
PyObject * cyber_PyChannelUtils_get_msg_type(PyObject *self, PyObject *args)
PyObject * cyber_PyReader_read(PyObject *self, PyObject *args)
PyObject * cyber_PyNodeUtils_get_node_attr(PyObject *self, PyObject *args)
PyObject * cyber_delete_PyReader(PyObject *self, PyObject *args)
PyObject * cyber_PyServiceUtils_get_active_services(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_create_client(PyObject *self, PyObject *args)
#define PYOBJECT_NULL_STRING
PyObject * cyber_PyNodeUtils_get_active_nodes(PyObject *self, PyObject *args)
PyObject * cyber_delete_PyClient(PyObject *self, PyObject *args)
PyObject * cyber_delete_PyWriter(PyObject *self, PyObject *args)
PyMODINIT_FUNC PyInit__cyber_wrapper(void)
Init function of this module
PyObject * cyber_new_PyWriter(PyObject *self, PyObject *args)
PyObject * cyber_new_PyClient(PyObject *self, PyObject *args)
PyObject * cyber_PyService_register_func(PyObject *self, PyObject *args)
PyObject * cyber_PyWriter_write(PyObject *self, PyObject *args)
PyObject * cyber_PyNodeUtils_get_writersofnode(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_create_service(PyObject *self, PyObject *args)
T PyObjectToPtr(PyObject *pyobj, const std::string &type_ptr)
PyObject * cyber_delete_PyNode(PyObject *self, PyObject *args)
#define C_STR_TO_PY_BYTES(cstr)
PyObject * cyber_PyService_write(PyObject *self, PyObject *args)
PyObject * cyber_PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata(PyObject *self, PyObject *args)
PyObject * cyber_new_PyReader(PyObject *self, PyObject *args)
PyObject * cyber_new_PyNode(PyObject *self, PyObject *args)
PyObject * cyber_PyReader_register_func(PyObject *self, PyObject *args)
PyObject * cyber_PyClient_send_request(PyObject *self, PyObject *args)
PyObject * cyber_new_PyService(PyObject *self, PyObject *args)
PyObject * cyber_PyNodeUtils_get_readersofnode(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_shutdown(PyObject *self, PyObject *args)
PyObject * cyber_PyService_read(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_create_writer(PyObject *self, PyObject *args)
PyObject * cyber_PyServiceUtils_get_service_attr(PyObject *self, PyObject *args)
PyObject * cyber_delete_PyService(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_register_message(PyObject *self, PyObject *args)
PyObject * cyber_PyNode_create_reader(PyObject *self, PyObject *args)