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 <<
"pyobj: " << pyobj;
98 char *channel_name =
nullptr;
100 uint32_t qos_depth = 1;
102 PyObject *node_pyobj =
nullptr;
103 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssIO:new_PyWriter"),
104 &channel_name, &
data_type, &qos_depth, &node_pyobj)) {
109 Node *node =
reinterpret_cast<Node *
>(
110 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
111 if (
nullptr == node) {
118 new PyWriter((std::string
const &)*channel_name,
119 (std::string
const &)*
data_type, qos_depth, node);
120 PyObject *pyobj_writer =
121 PyCapsule_New(writer,
"apollo_cyber_pywriter",
nullptr);
126 PyObject *writer_py =
nullptr;
127 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyWriter"),
134 PyCapsule_GetPointer(writer_py,
"apollo_cyber_pywriter"));
141 PyObject *pyobj_writer =
nullptr;
142 char *data =
nullptr;
144 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Os#:cyber_PyWriter_write"),
145 &pyobj_writer, &data, &len)) {
146 AERROR <<
"cyber_PyWriter_write:cyber_PyWriter_write failed!";
151 PyObjectToPtr<PyWriter *>(pyobj_writer,
"apollo_cyber_pywriter");
153 if (
nullptr == writer) {
154 AERROR <<
"cyber_PyWriter_write:writer ptr is null!";
158 std::string data_str(data, len);
159 int ret = writer->
write(data_str);
164 char *channel_name =
nullptr;
166 PyObject *node_pyobj =
nullptr;
167 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyReader"),
168 &channel_name, &
data_type, &node_pyobj)) {
173 Node *node =
reinterpret_cast<Node *
>(
174 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
183 PyObject *pyobj_reader =
184 PyCapsule_New(reader,
"apollo_cyber_pyreader",
nullptr);
189 PyObject *reader_py =
nullptr;
190 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyReader"),
197 PyCapsule_GetPointer(reader_py,
"apollo_cyber_pyreader"));
204 PyObject *pyobj_reader =
nullptr;
205 PyObject *pyobj_iswait =
nullptr;
207 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:cyber_PyReader_read"),
208 &pyobj_reader, &pyobj_iswait)) {
209 AERROR <<
"cyber_PyReader_read:PyArg_ParseTuple failed!";
214 PyObjectToPtr<PyReader *>(pyobj_reader,
"apollo_cyber_pyreader");
215 if (
nullptr == reader) {
216 AERROR <<
"cyber_PyReader_read:PyReader ptr is null!";
221 int r = PyObject_IsTrue(pyobj_iswait);
223 AERROR <<
"cyber_PyReader_read:pyobj_iswait is error!";
228 bool wait = (r == 1);
230 const std::string reader_ret = reader->
read(wait);
235 PyObject *pyobj_regist_fun =
nullptr;
236 PyObject *pyobj_reader =
nullptr;
238 int (*callback_fun)(
char const *) = (
int (*)(
char const *))0;
240 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:PyReader_register_func"),
241 &pyobj_reader, &pyobj_regist_fun)) {
247 PyObjectToPtr<PyReader *>(pyobj_reader,
"apollo_cyber_pyreader");
248 callback_fun = (int (*)(
const char *i))
PyInt_AsLong(pyobj_regist_fun);
250 AINFO <<
"reader regist fun";
259 char *channel_name =
nullptr;
261 PyObject *node_pyobj =
nullptr;
262 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyClient"),
263 &channel_name, &
data_type, &node_pyobj)) {
268 Node *node =
reinterpret_cast<Node *
>(
269 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
278 PyObject *pyobj_client =
279 PyCapsule_New(client,
"apollo_cyber_pyclient",
nullptr);
284 PyObject *client_py =
nullptr;
285 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyClient"),
292 PyCapsule_GetPointer(client_py,
"apollo_cyber_pyclient"));
299 PyObject *pyobj_client =
nullptr;
300 char *data =
nullptr;
302 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Os#:PyClient_send_request"),
303 &pyobj_client, &data, &len)) {
304 AERROR <<
"cyber_PyClient_send_request:PyArg_ParseTuple failed!";
309 PyObjectToPtr<PyClient *>(pyobj_client,
"apollo_cyber_pyclient");
311 if (
nullptr == client) {
312 AERROR <<
"cyber_PyClient_send_request:client ptr is null!";
316 std::string data_str(data, len);
317 ADEBUG <<
"c++:PyClient_send_request data->[ " << data_str <<
"]";
318 const std::string response_str =
320 ADEBUG <<
"c++:response data->[ " << response_str <<
"]";
325 char *channel_name =
nullptr;
327 PyObject *node_pyobj =
nullptr;
328 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"ssO:new_PyService"),
329 &channel_name, &
data_type, &node_pyobj)) {
334 Node *node =
reinterpret_cast<Node *
>(
335 PyCapsule_GetPointer(node_pyobj,
"apollo_cyber_pynode"));
344 PyObject *pyobj_service =
345 PyCapsule_New(service,
"apollo_cyber_pyservice",
nullptr);
346 return pyobj_service;
350 PyObject *pyobj_service =
nullptr;
351 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyService"),
358 PyCapsule_GetPointer(pyobj_service,
"apollo_cyber_pyservice"));
365 PyObject *pyobj_regist_fun =
nullptr;
366 PyObject *pyobj_service =
nullptr;
368 int (*callback_fun)(
char const *) = (
int (*)(
char const *))0;
370 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OO:PyService_register_func"),
371 &pyobj_service, &pyobj_regist_fun)) {
377 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
378 callback_fun = (int (*)(
const char *i))
PyInt_AsLong(pyobj_regist_fun);
380 AINFO <<
"service regist fun";
389 PyObject *pyobj_service =
nullptr;
390 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:cyber_PyService_read"),
392 AERROR <<
"cyber_PyService_read:PyArg_ParseTuple failed!";
396 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
397 if (
nullptr == service) {
398 AERROR <<
"cyber_PyService_read:service ptr is null!";
402 const std::string reader_ret = service->
read();
403 ADEBUG <<
"c++:PyService_read -> " << reader_ret;
408 PyObject *pyobj_service =
nullptr;
409 char *data =
nullptr;
411 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Os#:cyber_PyService_write"),
412 &pyobj_service, &data, &len)) {
413 AERROR <<
"cyber_PyService_write:PyArg_ParseTuple failed!";
418 PyObjectToPtr<PyService *>(pyobj_service,
"apollo_cyber_pyservice");
420 if (
nullptr == service) {
421 AERROR <<
"cyber_PyService_write:writer ptr is null!";
425 std::string data_str(data, len);
426 ADEBUG <<
"c++:PyService_write data->[ " << data_str <<
"]";
427 int ret = service->
write((std::string
const &)data_str);
432 char *node_name =
nullptr;
433 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"s:new_PyNode"), &node_name)) {
438 PyNode *node =
new PyNode((std::string
const &)node_name);
439 PyObject *pyobj_node = PyCapsule_New(node,
"apollo_cyber_pynode",
nullptr);
444 PyObject *pyobj_node =
nullptr;
445 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:delete_PyNode"),
452 PyCapsule_GetPointer(pyobj_node,
"apollo_cyber_pynode"));
459 PyObject *pyobj_node =
nullptr;
460 char *channel_name =
nullptr;
461 char *type_name =
nullptr;
462 uint32_t qos_depth = 1;
464 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"OssI:PyNode_create_writer"),
465 &pyobj_node, &channel_name, &type_name, &qos_depth)) {
466 AERROR <<
"cyber_PyNode_create_writer:PyArg_ParseTuple failed!";
471 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
472 if (
nullptr == node) {
473 AERROR <<
"cyber_PyNode_create_writer:node ptr is null!";
480 (std::string
const &)type_name, qos_depth)));
482 if (
nullptr == writer) {
483 AERROR <<
"cyber_PyNode_create_writer:writer is null!";
487 PyObject *pyobj_writer =
488 PyCapsule_New(writer,
"apollo_cyber_pywriter",
nullptr);
493 char *channel_name =
nullptr;
494 char *type_name =
nullptr;
495 PyObject *pyobj_node =
nullptr;
497 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oss:PyNode_create_reader"),
498 &pyobj_node, &channel_name, &type_name)) {
499 AERROR <<
"PyNode_create_reader:PyArg_ParseTuple failed!";
504 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
505 if (
nullptr == node) {
506 AERROR <<
"PyNode_create_reader:node ptr is null!";
512 (std::string
const &)channel_name, (std::string
const &)type_name)));
513 ACHECK(reader) <<
"PyReader is NULL!";
515 PyObject *pyobj_reader =
516 PyCapsule_New(reader,
"apollo_cyber_pyreader",
nullptr);
521 char *channel_name =
nullptr;
522 char *type_name =
nullptr;
523 PyObject *pyobj_node =
nullptr;
525 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"Oss:PyNode_create_client"),
526 &pyobj_node, &channel_name, &type_name)) {
527 AERROR <<
"PyNode_create_client:PyArg_ParseTuple failed!";
532 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
533 if (
nullptr == node) {
534 AERROR <<
"PyNode_create_client:node ptr is null!";
540 (std::string
const &)channel_name, (std::string
const &)type_name)));
541 PyObject *pyobj_client =
542 PyCapsule_New(client,
"apollo_cyber_pyclient",
nullptr);
548 char *channel_name =
nullptr;
549 char *type_name =
nullptr;
550 PyObject *pyobj_node =
nullptr;
552 if (!PyArg_ParseTuple(args,
553 const_cast<char *
>(
"Oss:cyber_PyNode_create_service"),
554 &pyobj_node, &channel_name, &type_name)) {
555 AERROR <<
"cyber_PyNode_create_service:PyArg_ParseTuple failed!";
560 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
561 if (
nullptr == node) {
562 AERROR <<
"cyber_PyNode_create_service:node ptr is null!";
568 (std::string
const &)channel_name, (std::string
const &)type_name)));
569 PyObject *pyobj_service =
570 PyCapsule_New(service,
"apollo_cyber_pyservice",
nullptr);
571 return pyobj_service;
575 PyObject *pyobj_node =
nullptr;
577 if (!PyArg_ParseTuple(args,
const_cast<char *
>(
"O:PyNode_shutdown"),
579 AERROR <<
"cyber_PyNode_shutdown:PyNode_shutdown failed!";
584 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
585 if (
nullptr == node) {
586 AERROR <<
"cyber_PyNode_shutdown:node ptr is null!";
596 PyObject *pyobj_node =
nullptr;
597 char *desc =
nullptr;
599 if (!PyArg_ParseTuple(args,
600 const_cast<char *
>(
"Os#:cyber_PyNode_register_message"),
601 &pyobj_node, &desc, &len)) {
602 AERROR <<
"cyber_PyNode_register_message: failed!";
606 PyNode *node = PyObjectToPtr<PyNode *>(pyobj_node,
"apollo_cyber_pynode");
607 if (
nullptr == node) {
608 AERROR <<
"cyber_PyNode_register_message:node ptr is null! desc->" << desc;
612 std::string desc_str(desc, len);
619 char *channel_name =
nullptr;
621 unsigned char sleep_s = 0;
622 if (!PyArg_ParseTuple(
623 args,
const_cast<char *
>(
"s#B:cyber_PyChannelUtils_get_msg_type"),
624 &channel_name, &len, &sleep_s)) {
625 AERROR <<
"cyber_PyChannelUtils_get_msg_type failed!";
628 std::string channel(channel_name, len);
629 const std::string msg_type =
635 PyObject *self, PyObject *args) {
636 char *msgtype =
nullptr;
637 char *rawdata =
nullptr;
639 if (!PyArg_ParseTuple(
642 "ss#:cyber_PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata"),
643 &msgtype, &rawdata, &len)) {
645 <<
"cyber_PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata failed!";
648 std::string raw_data(rawdata, len);
649 const std::string debug_string =
654static PyObject *cyber_PyChannelUtils_get_active_channels(PyObject *self,
656 unsigned char sleep_s = 0;
657 if (!PyArg_ParseTuple(
659 const_cast<char *
>(
"B:cyber_PyChannelUtils_get_active_channels"),
661 AERROR <<
"cyber_PyChannelUtils_get_active_channels failed!";
666 std::vector<std::string> channel_list =
668 PyObject *pyobj_list = PyList_New(channel_list.size());
670 for (
const std::string &channel : channel_list) {
671 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
682static PyObject *cyber_PyChannelUtils_get_channels_info(PyObject *self,
685 PyObject *pyobj_channelinfo_dict = PyDict_New();
686 for (
auto &channelinfo : channelsinfo) {
687 std::string channel_name = channelinfo.first;
688 PyObject *bld_name = Py_BuildValue(
"s", channel_name.c_str());
689 std::vector<std::string> &roleAttr_list = channelinfo.second;
690 PyObject *pyobj_list = PyList_New(roleAttr_list.size());
693 for (
auto &attr : roleAttr_list) {
697 PyDict_SetItem(pyobj_channelinfo_dict, bld_name, pyobj_list);
700 return pyobj_channelinfo_dict;
704 unsigned char sleep_s = 0;
705 if (!PyArg_ParseTuple(
706 args,
const_cast<char *
>(
"B:cyber_PyNodeUtils_get_active_nodes"),
708 AERROR <<
"cyber_PyNodeUtils_get_active_nodes failed!";
713 std::vector<std::string> nodes_name =
715 PyObject *pyobj_list = PyList_New(nodes_name.size());
717 for (
const std::string &name : nodes_name) {
718 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", name.c_str()));
726 char *node_name =
nullptr;
728 unsigned char sleep_s = 0;
729 if (!PyArg_ParseTuple(
730 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_node_attr"),
731 &node_name, &len, &sleep_s)) {
732 AERROR <<
"cyber_PyNodeUtils_get_node_attr failed!";
736 std::string name(node_name, len);
737 const std::string node_attr =
743 char *node_name =
nullptr;
745 unsigned char sleep_s = 0;
746 if (!PyArg_ParseTuple(
747 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_readersofnode"),
748 &node_name, &len, &sleep_s)) {
749 AERROR <<
"cyber_PyNodeUtils_get_readersofnode failed!";
753 std::string name(node_name, len);
754 std::vector<std::string> readers_channel =
756 PyObject *pyobj_list = PyList_New(readers_channel.size());
758 for (
const std::string &channel : readers_channel) {
759 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
767 char *node_name =
nullptr;
769 unsigned char sleep_s = 0;
770 if (!PyArg_ParseTuple(
771 args,
const_cast<char *
>(
"s#B:cyber_PyNodeUtils_get_writersofnode"),
772 &node_name, &len, &sleep_s)) {
773 AERROR <<
"cyber_PyNodeUtils_get_writersofnode failed!";
777 std::string name(node_name, len);
778 std::vector<std::string> writers_channel =
780 PyObject *pyobj_list = PyList_New(writers_channel.size());
782 for (
const std::string &channel : writers_channel) {
783 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", channel.c_str()));
792 unsigned char sleep_s = 0;
793 if (!PyArg_ParseTuple(
795 const_cast<char *
>(
"B:cyber_PyServiceUtils_get_active_services"),
797 AERROR <<
"cyber_PyServiceUtils_get_active_services failed!";
802 std::vector<std::string> services_name =
804 PyObject *pyobj_list = PyList_New(services_name.size());
806 for (
const std::string &name : services_name) {
807 PyList_SetItem(pyobj_list, pos, Py_BuildValue(
"s", name.c_str()));
816 char *srv_name =
nullptr;
818 unsigned char sleep_s = 0;
819 if (!PyArg_ParseTuple(
820 args,
const_cast<char *
>(
"s#B:cyber_PyServiceUtils_get_service_attr"),
821 &srv_name, &len, &sleep_s)) {
822 AERROR <<
"cyber_PyServiceUtils_get_service_attr failed!";
826 std::string name(srv_name, len);
834static PyMethodDef _cyber_methods[] = {
836 {
"py_init", cyber_py_init, METH_VARARGS,
""},
837 {
"py_ok", cyber_py_ok, METH_NOARGS,
""},
838 {
"py_shutdown", cyber_py_shutdown, METH_NOARGS,
""},
839 {
"py_is_shutdown", cyber_py_is_shutdown, METH_NOARGS,
""},
840 {
"py_waitforshutdown", cyber_py_waitforshutdown, METH_NOARGS,
""},
877 {
"PyChannelUtils_get_debugstring_by_msgtype_rawmsgdata",
880 {
"PyChannelUtils_get_active_channels",
881 cyber_PyChannelUtils_get_active_channels, METH_VARARGS,
""},
882 {
"PyChannelUtils_get_channels_info", cyber_PyChannelUtils_get_channels_info,
894 {
"PyServiceUtils_get_active_services",
899 {
nullptr,
nullptr, 0,
nullptr}
904 static struct PyModuleDef module_def = {
905 PyModuleDef_HEAD_INIT,
916 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)