theLink 10.0
Loading...
Searching...
No Matches
LibMqMsgque_py.c
Go to the documentation of this file.
1
9/* LABEL-NO */
10
11#include "LibMqMsgque_py.h"
12#include "misc_check_py.h"
13
14#define OT_SETUP_hdl AllRtSetup_NULL; \
15 MK_OBJ hdl = MK_ERROR_PRINT;
16#define OT_SETUP_hdl_static __attribute__((unused)) MK_RT mkrt = MkRT; \
17 __attribute__((unused)) MK_ERR hdl = &MkERROR;
18
19#define MqSetupTmpl()
20#define MqCleanupTmpl()
21
22// MARK_D ################################################################
23// -----------------------------------------------------------------------
24// documentation order
25
36
49
73
82
91
99
108
116
117// --------------------------------------------------------------------------------
118
119// BEGIN-EnumDef - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
120
121// UNDEF
122
123// END-EnumDef - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
124
125int NS(pMqFactoryC_Setup) (MK_RT_ARGS OT_OBJ_T) ;
126
132
133// BEGIN-DOC - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
134
135// doc-key: MqMsgque,EnumFunc,sco,func
136#define IdentE_FromInt_doc "MqIdentE IdentE_FromInt(value:int32)"
137#define SlaveE_FromInt_doc "MqSlaveE SlaveE_FromInt(value:int32)"
138#define StartE_FromInt_doc "MqStartE StartE_FromInt(value:int32)"
139#define StatusIsEF_FromInt_doc "MqStatusIsEF StatusIsEF_FromInt(value:int32)"
140#define WaitOnEventE_FromInt_doc "MqWaitOnEventE WaitOnEventE_FromInt(value:int32)"
141
142// doc-key: MqMsgque,EnumFunc,sm_,func
143#define IdentE_ToInt_doc "int32 IdentE_ToInt(value:MqIdentE)"
144#define IdentE_ToString_doc "string IdentE_ToString(value:MqIdentE)"
145#define SlaveE_ToInt_doc "int32 SlaveE_ToInt(value:MqSlaveE)"
146#define SlaveE_ToString_doc "string SlaveE_ToString(value:MqSlaveE)"
147#define StartE_ToInt_doc "int32 StartE_ToInt(value:MqStartE)"
148#define StartE_ToString_doc "string StartE_ToString(value:MqStartE)"
149#define StatusIsEF_ToInt_doc "int32 StatusIsEF_ToInt(value:MqStatusIsEF)"
150#define StatusIsEF_ToString_doc "string StatusIsEF_ToString(value:MqStatusIsEF)"
151#define WaitOnEventE_ToInt_doc "int32 WaitOnEventE_ToInt(value:MqWaitOnEventE)"
152#define WaitOnEventE_ToString_doc "string WaitOnEventE_ToString(value:MqWaitOnEventE)"
153
154// doc-key: MqMsgque,MqHelp,sm_,func
155#define Help_doc "string Help(tool:string)"
156#define HelpMsgque_doc "string HelpMsgque()"
157
158// doc-key: MqMsgque,MqInit,sm_,func
159#define InitGetArg0_doc "MkBufferListC InitGetArg0()"
160#define InitResetArg0_doc "MkBufferListC InitResetArg0()"
161#define InitSetArg0_doc "InitSetArg0(?bfl:MkBufferListC...=None?)"
162
163// doc-key: MqMsgque,Setup,sm_,func
164#define Cleanup_doc "Cleanup()"
165#define Setup_doc "Setup()"
166
167// END-DOC - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
168
169#define Debug_doc "Debug(prefix:str, ?obj:object?"
170
171/*****************************************************************************/
172/* */
173/* Check */
174/* */
175/*****************************************************************************/
176
178
181 MK_CCP *retP
182) {
183 if ((*skipP) >= objc) {
184 WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
185 goto error;
186 }
187 PyObject *objV = OT_LNG_OBJV((*skipP)++);
188 if (PyObject_IsSubclass(objV,(OT_OBJ_T)&NS(MqContextCR)) == 1) {
189 Py_INCREF(objV);
190 *retP = (MK_CCP)objV;
191 } else if (PyObject_IsSubclass(objV,(OT_OBJ_T)&MK(MkObjectCR)) == 1) {
193 } else {
194 WrongTypeOfArgError(OT_LNG_NAME_FROM_CLASS(&NS(MqContextCR)), OT_OBJ_TYPE_STRING(objV));
195 }
196 return MK_OK;
197error:
198 return OT_ERROR_STACK;
199}
200
206
207// BEGIN-MqMsgque - created by 'py_MqC.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
208
212
213// doc-key: MqMsgque,MqMsgque-Enum,sco
214
216static OT_ProcRet NS(MqMsgque_IdentE_FromInt) (OtClass_ARGS) {
219 MK_I32 value = 0;
222 enum MqIdentE value_out;
224 OT_retObj_SET(OT_NEW_Mq_enum_OBJ(IdentE,value_out));
225 goto end;
226 error:
228 end:
230}
231
233static OT_ProcRet NS(MqMsgque_SlaveE_FromInt) (OtClass_ARGS) {
236 MK_I32 value = 0;
239 enum MqSlaveE value_out;
241 OT_retObj_SET(OT_NEW_Mq_enum_OBJ(SlaveE,value_out));
242 goto end;
243 error:
245 end:
247}
248
250static OT_ProcRet NS(MqMsgque_StartE_FromInt) (OtClass_ARGS) {
253 MK_I32 value = 0;
256 enum MqStartE value_out;
258 OT_retObj_SET(OT_NEW_Mq_enum_OBJ(StartE,value_out));
259 goto end;
260 error:
262 end:
264}
265
267static OT_ProcRet NS(MqMsgque_StatusIsEF_FromInt) (OtClass_ARGS) {
270 MK_I32 value = 0;
273 enum MqStatusIsEF value_out;
275 OT_retObj_SET(OT_NEW_Mq_enum_OBJ(StatusIsEF,value_out));
276 goto end;
277 error:
279 end:
281}
282
284static OT_ProcRet NS(MqMsgque_WaitOnEventE_FromInt) (OtClass_ARGS) {
287 MK_I32 value = 0;
290 enum MqWaitOnEventE value_out;
292 OT_retObj_SET(OT_NEW_Mq_enum_OBJ(WaitOnEventE,value_out));
293 goto end;
294 error:
296 end:
298}
299
300// doc-key: MqMsgque,MqMsgque-Enum,sm_
301
303static OT_ProcRet NS(MqMsgque_IdentE_ToInt) (OtClass_ARGS) {
306 enum MqIdentE value = 0;
310 goto end;
311 error:
313 end:
315}
316
318static OT_ProcRet NS(MqMsgque_IdentE_ToString) (OtClass_ARGS) {
321 enum MqIdentE value = 0;
325 goto end;
326 error:
328 end:
330}
331
333static OT_ProcRet NS(MqMsgque_SlaveE_ToInt) (OtClass_ARGS) {
336 enum MqSlaveE value = 0;
340 goto end;
341 error:
343 end:
345}
346
348static OT_ProcRet NS(MqMsgque_SlaveE_ToString) (OtClass_ARGS) {
351 enum MqSlaveE value = 0;
355 goto end;
356 error:
358 end:
360}
361
363static OT_ProcRet NS(MqMsgque_StartE_ToInt) (OtClass_ARGS) {
366 enum MqStartE value = 0;
370 goto end;
371 error:
373 end:
375}
376
378static OT_ProcRet NS(MqMsgque_StartE_ToString) (OtClass_ARGS) {
381 enum MqStartE value = 0;
385 goto end;
386 error:
388 end:
390}
391
393static OT_ProcRet NS(MqMsgque_StatusIsEF_ToInt) (OtClass_ARGS) {
396 enum MqStatusIsEF value = 0;
400 goto end;
401 error:
403 end:
405}
406
408static OT_ProcRet NS(MqMsgque_StatusIsEF_ToString) (OtClass_ARGS) {
411 enum MqStatusIsEF value = 0;
415 goto end;
416 error:
418 end:
420}
421
423static OT_ProcRet NS(MqMsgque_WaitOnEventE_ToInt) (OtClass_ARGS) {
426 enum MqWaitOnEventE value = 0;
430 goto end;
431 error:
433 end:
435}
436
438static OT_ProcRet NS(MqMsgque_WaitOnEventE_ToString) (OtClass_ARGS) {
441 enum MqWaitOnEventE value = 0;
445 goto end;
446 error:
448 end:
450}
451
453// MqMsgque_Enum_PY_API
454
458
459// doc-key: MqMsgque,MqMsgque-Help,sm_
460
462static OT_ProcRet NS(MqMsgque_Help) (OtClass_ARGS) {
465 MK_STRN tool = 0;
469 goto end;
470 error:
472 end:
474}
475
477static OT_ProcRet NS(MqMsgque_HelpMsgque) (OtClass_ARGS) {
482 goto end;
483 error:
485 end:
487}
488
490// MqMsgque_Help_PY_API
491
495
496// doc-key: MqMsgque,MqMsgque-Init,sm_
497
499static OT_ProcRet NS(MqMsgque_InitGetArg0) (OtClass_ARGS) {
504 goto end;
505 error:
507 end:
509}
510
512static OT_ProcRet NS(MqMsgque_InitResetArg0) (OtClass_ARGS) {
517 goto end;
518 error:
520 end:
522}
523
525static OT_ProcRet NS(MqMsgque_InitSetArg0) (OtClass_ARGS) {
531 MqInitSetArg0 (bfl);
533 goto end;
534 error:
536 end:
538}
539
541// MqMsgque_Init_PY_API
542
546
547// doc-key: MqMsgque,MqMsgque-Setup,sm_
548
550static OT_ProcRet NS(MqMsgque_Cleanup) (OtClass_ARGS) {
554 MqCleanupTmpl ();
556 goto end;
557 error:
559 end:
561}
562
564static OT_ProcRet NS(MqMsgque_Setup) (OtClass_ARGS) {
568 MqSetupTmpl ();
570 goto end;
571 error:
573 end:
575}
576
578// MqMsgque_Setup_PY_API
579
580// END-MqMsgque - created by 'py_MqC.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
581
582// vim: Marker(t)
588
589static PyMethodDef NS(sMqMsgqueMethods)[] = {
590
591 // BEGIN-CLASS - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
592
593 // doc-key: MqMsgque,EnumFunc,sco
594 { "IdentE_FromInt" , (PyCFunction) NS(MqMsgque_IdentE_FromInt) , METH_O , IdentE_FromInt_doc },
595 { "SlaveE_FromInt" , (PyCFunction) NS(MqMsgque_SlaveE_FromInt) , METH_O , SlaveE_FromInt_doc },
596 { "StartE_FromInt" , (PyCFunction) NS(MqMsgque_StartE_FromInt) , METH_O , StartE_FromInt_doc },
597 { "StatusIsEF_FromInt" , (PyCFunction) NS(MqMsgque_StatusIsEF_FromInt) , METH_O , StatusIsEF_FromInt_doc },
598 { "WaitOnEventE_FromInt" , (PyCFunction) NS(MqMsgque_WaitOnEventE_FromInt) , METH_O , WaitOnEventE_FromInt_doc },
599
600 // doc-key: MqMsgque,EnumFunc,sm_
601 { "IdentE_ToInt" , (PyCFunction) NS(MqMsgque_IdentE_ToInt) , METH_O , IdentE_ToInt_doc },
602 { "IdentE_ToString" , (PyCFunction) NS(MqMsgque_IdentE_ToString) , METH_O , IdentE_ToString_doc },
603 { "SlaveE_ToInt" , (PyCFunction) NS(MqMsgque_SlaveE_ToInt) , METH_O , SlaveE_ToInt_doc },
604 { "SlaveE_ToString" , (PyCFunction) NS(MqMsgque_SlaveE_ToString) , METH_O , SlaveE_ToString_doc },
605 { "StartE_ToInt" , (PyCFunction) NS(MqMsgque_StartE_ToInt) , METH_O , StartE_ToInt_doc },
606 { "StartE_ToString" , (PyCFunction) NS(MqMsgque_StartE_ToString) , METH_O , StartE_ToString_doc },
607 { "StatusIsEF_ToInt" , (PyCFunction) NS(MqMsgque_StatusIsEF_ToInt) , METH_O , StatusIsEF_ToInt_doc },
608 { "StatusIsEF_ToString" , (PyCFunction) NS(MqMsgque_StatusIsEF_ToString) , METH_O , StatusIsEF_ToString_doc },
609 { "WaitOnEventE_ToInt" , (PyCFunction) NS(MqMsgque_WaitOnEventE_ToInt) , METH_O , WaitOnEventE_ToInt_doc },
610 { "WaitOnEventE_ToString" , (PyCFunction) NS(MqMsgque_WaitOnEventE_ToString) , METH_O , WaitOnEventE_ToString_doc },
611
612 // doc-key: MqMsgque,MqHelp,sm_
613 { "Help" , (PyCFunction) NS(MqMsgque_Help) , METH_O , Help_doc },
614 { "HelpMsgque" , (PyCFunction) NS(MqMsgque_HelpMsgque) , METH_NOARGS , HelpMsgque_doc },
615
616 // doc-key: MqMsgque,MqInit,sm_
617 { "InitGetArg0" , (PyCFunction) NS(MqMsgque_InitGetArg0) , METH_NOARGS , InitGetArg0_doc },
618 { "InitResetArg0" , (PyCFunction) NS(MqMsgque_InitResetArg0) , METH_NOARGS , InitResetArg0_doc },
619 { "InitSetArg0" , (PyCFunction) NS(MqMsgque_InitSetArg0) , METH_VARARGS , InitSetArg0_doc },
620
621 // doc-key: MqMsgque,Setup,sm_
622 { "Cleanup" , (PyCFunction) NS(MqMsgque_Cleanup) , METH_NOARGS , Cleanup_doc },
623 { "Setup" , (PyCFunction) NS(MqMsgque_Setup) , METH_NOARGS , Setup_doc },
624
625 // END-CLASS - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
626
627 // BEGIN-OBJ - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
628
629 // → no data
630
631 // END-OBJ - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
632
633 {NULL, NULL, 0, NULL} /* Sentinel */
634};
635
637// MODULE
638
639static typeof(MqLal.MqSysServerThreadCB) save_MqSysServerThreadF = NULL;
640MK_UNUSED static int num = 0;
641
642MK_UNUSED static enum MkErrorE NS(PyServerThread) (
644 MQ_CTX const context,
645 struct MqSysServerThreadMainS * const argP,
646 MK_STRN name,
647 int thread_status,
648 struct MkIdS * idP
649) {
650 enum MkErrorE ret;
651 PyGILState_STATE gilstate;
652
653 gilstate = PyGILState_Ensure();
654 Py_BEGIN_ALLOW_THREADS
655
656//num++;
657//printV("START num<%d>, ts<%p>, gil<%o>",num,_save,gilstate);
658 ret = (*save_MqSysServerThreadF)(MK_RT_CALL context, argP, name, thread_status, idP);
659//printV("END num<%d>, ts<%p>, gil<%o>",num,_save,gilstate);
660
661 Py_END_ALLOW_THREADS
662 PyGILState_Release(gilstate);
663
664 return ret;
665}
666
667/*
668MK_UNUSED MK_NO_RETURN
669static void NS(PyExit) (
670 int isThread,
671 int num
672) {
673 if (isThread) {
674 pthread_exit(NULL);
675 //printTxt("skip: pthread_exit")
676 } else {
677 exit(num);
678 }
679}
680*/
681
682// ----------------------------------------------------------------------------------------------
683
684MkThreadLocal MqMsgqueThreadStateS MQ(MqMsgqueThreadState) = {0};
685
686typedef struct {
688} NS(sMqMsgqueStateS);
689
690MK_UNUSED static inline NS(sMqMsgqueStateS)*
691NS(sMqMsgqueGetState)(PyObject *module)
692{
693 void *state = PyModule_GetState(module);
694 assert(state != NULL);
695 return (NS(sMqMsgqueStateS)*)state;
696}
697
698#if 0
699#define myTrace2(col,str) mk_dbg_color_ln(col,"%s module<%p> refCnty<%zd>",str,module,Py_REFCNT(module));
700#define myTrace(str) myTrace2(MK_COLOR_ORANGE,str)
701#else
702#define myTrace2(col,str)
703#define myTrace(str)
704#endif
705
706MK_UNUSED static int
707NS(sMqMsgqueTraverse)(PyObject *module, visitproc visit, void *arg)
708{
709myTrace("TRAVERSE")
710
711 // BEGIN-EnumTraverse - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
712
713 Py_VISIT(MqIdentE_lngO);
714 Py_VISIT(MqSlaveE_lngO);
715 Py_VISIT(MqStartE_lngO);
716 Py_VISIT(MqStatusIsEF_lngO);
717 Py_VISIT(MqWaitOnEventE_lngO);
718
719 // END-EnumTraverse - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
720 // BEGIN-ClassTraverse - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
721
722 Py_VISIT(MqFactoryC_MK_NULL);
723 Py_VISIT(MqDumpC_MK_NULL);
724 Py_VISIT(MqContextC_MK_NULL);
725
726 // END-ClassTraverse - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
727
728 return 0;
729}
730
731MK_UNUSED static int
732NS(sMqMsgqueClear)(PyObject *module)
733{
734myTrace("CLEAR")
735
736 // BEGIN-EnumClear - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
737
738 Py_CLEAR(MqIdentE_lngO);
739 Py_CLEAR(MqSlaveE_lngO);
740 Py_CLEAR(MqStartE_lngO);
741 Py_CLEAR(MqStatusIsEF_lngO);
742 Py_CLEAR(MqWaitOnEventE_lngO);
743
744 // END-EnumClear - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
745 // BEGIN-ClassClear - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
746
747 Py_CLEAR(MqFactoryC_MK_NULL);
748 Py_CLEAR(MqDumpC_MK_NULL);
749 Py_CLEAR(MqContextC_MK_NULL);
750
751 // END-ClassClear - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
752
753 return 0;
754}
755
756static void
757NS(sMqMsgqueFree)(void *module)
758{
759myTrace("FREE")
760 NS(sMqMsgqueStateS) *state = NS(sMqMsgqueGetState)(module);
761 NS(sMqMsgqueClear)((PyObject *)module);
762 if (state && state->mkrt) {
763 state->mkrt->mkThreadData.ptr = NULL;
764 state->mkrt=NULL;
765 }
766}
767
768static int
769NS(sMqMsgqueExec)(PyObject *module)
770{
771myTrace2(MK_COLOR_BLUE,"START")
772//printV("#1 PyThreadState_Get<%p>", PyThreadState_Get())
773
774 MqSetup();
776
777 NS(sMqMsgqueStateS) *state = NS(sMqMsgqueGetState)(module);
778 state->mkrt = MK_RT_PTR;
779
780 PyObject *mainM = PyImport_AddModule("__main__");
781
782 PyObject *mkM;
783 LngErrorCheckN(mkM = PyImport_ImportModule("pymkkernel"));
784 OtErrorCheckLng(PyObject_SetAttrString(mainM,"pymkkernel",mkM));
785 Py_CLEAR(mkM);
786
787 // BEGIN-CLASS-DEF - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
788
789 OtErrorCheckLng( NS(pMqFactoryC_Init) (MK_RT_CALL module) ) ;
790 OtErrorCheckLng( NS(pMqDumpC_Init) (MK_RT_CALL module) ) ;
791 OtErrorCheckLng( NS(pMqContextC_Init) (MK_RT_CALL module) ) ;
792
793 // END-CLASS-DEF - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
794
795 // init ENUM
796 MK_STR enumCode =
797 "from enum import IntEnum, IntFlag\n"
798
799 // BEGIN-EnumCode - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
800
801 "class MqIdentE(IntEnum):\n"
802 " PREFIX = 0\n"
803 " FACTORY = 1\n"
804
805 "class MqSlaveE(IntEnum):\n"
806 " LOOPBACK = 0\n"
807 " FILTER = 1\n"
808 " MASTER = 1\n"
809 " OTHER = 1\n"
810 " USER = 10\n"
811 " MAX = 1024\n"
812
813 "class MqStartE(IntEnum):\n"
814 " DEFAULT = 0\n"
815 " FORK = 1\n"
816 " THREAD = 2\n"
817 " SPAWN = 3\n"
818
819 "class MqStatusIsEF(IntFlag):\n"
820 " INITIAL = 0\n"
821 " DUP = 1\n"
822 " THREAD = 2\n"
823 " FORK = 4\n"
824 " SPAWN = 8\n"
825
826 "class MqWaitOnEventE(IntEnum):\n"
827 " NO = 0\n"
828 " ONCE = 1\n"
829 " OWN = 2\n"
830 " FOREVER = 3\n"
831
832 // END-EnumCode - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
833 ;
834
835 PyObject *myD, *mainD, *tmpO;
836 mainD = PyModule_GetDict(mainM);
837 myD = PyModule_GetDict(module);
838 tmpO = PyRun_String(enumCode, Py_file_input, mainD, myD);
839 LngErrorCheckN(tmpO);
840 Py_CLEAR(tmpO);
841
842 // BEGIN-EnumSet - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
843
844 MqIdentE_lngO = (PyTypeObject*) Py_NewRef(PyDict_GetItemString(myD,"MqIdentE"));
845 MqSlaveE_lngO = (PyTypeObject*) Py_NewRef(PyDict_GetItemString(myD,"MqSlaveE"));
846 MqStartE_lngO = (PyTypeObject*) Py_NewRef(PyDict_GetItemString(myD,"MqStartE"));
847 MqStatusIsEF_lngO = (PyTypeObject*) Py_NewRef(PyDict_GetItemString(myD,"MqStatusIsEF"));
848 MqWaitOnEventE_lngO = (PyTypeObject*) Py_NewRef(PyDict_GetItemString(myD,"MqWaitOnEventE"));
849
850 // END-EnumSet - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
851
852 // every new thread source the script
853 // "from pymqmsgque import" is calling "PyInit_pymqmsgque"
854 // → check if we on "thread" : __name__=__main__
855
856 // only ONCE on INITIAL setup
857 if (strcmp(PyModule_GetName(mainM),"__main__") == 0) {
858
859 // set the thread startup
860 //save_MqSysServerThreadF = MqLal.SysServerThread;
861 //MqLal.SysServerThread = NS(PyServerThread);
862 //MkLal.SysExit = NS(PyExit);
863
864 // init libmqmsgque global data
865 if (MqInitGetArg0() == NULL && Py_GetProgramName() != NULL) {
866 char *py = Py_EncodeLocale(Py_GetProgramName(),NULL);
867
868 PyObject *sysO = PyImport_ImportModule("sys");
869 LngErrorCheckN(sysO);
870 PyObject *argvO = PyObject_GetAttrString(sysO, "argv");
871 LngErrorCheckN(argvO);
872 PyObject *itmO = PyList_GetItem(argvO, 0);
873 LngErrorCheckN(itmO);
874
875 MqInitSetArg0VA(py, PyUnicode_AsUTF8(itmO), NULL);
876
877 Py_CLEAR(argvO);
878 Py_CLEAR(sysO);
879 PyMem_Free(py);
880 }
881
882 // create the default-factory
883 OtErrorCheckLng (NS(pMqFactoryC_Setup) (MK_RT_CALL module));
884 }
885
886 //PyErr_SetString(PyExc_RuntimeError,"this is a test");
887
888//mk_dbg_color_ln(MK_COLOR_BLUE,"END module<%p>",module);
889 return 0;
890error:
891 return -1;
892}
893
894MK_UNUSED static PyModuleDef_Slot NS(sMqMsgqueDefSlots)[] = {
895 {Py_mod_exec, NS(sMqMsgqueExec)},
896 {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
897 {0, NULL}
898};
899
900static PyModuleDef NS(sMqMsgqueDef) = {
901 PyModuleDef_HEAD_INIT,
902 .m_name = "pymqmsgque",
903 .m_doc = "python language binding for 'theLink'",
904 .m_size = sizeof(NS(sMqMsgqueStateS)),
905 .m_methods = NS(sMqMsgqueMethods),
906 .m_slots = NS(sMqMsgqueDefSlots),
907 .m_traverse = NS(sMqMsgqueTraverse), // garbage collection
908 .m_clear = NS(sMqMsgqueClear),
909 .m_free = NS(sMqMsgqueFree),
910};
911
912// MARK_P
918
919PyMODINIT_FUNC
921{
922 // Multi-phase initialization
923 return PyModuleDef_Init(&NS(sMqMsgqueDef));
924}
925
926// vim: nowrap
#define LngErrorCheckN(PROC)
#define MK(n)
#define OT_SETUP_VARARGS(min, max, d)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OtErrorCheckLng(PROC)
#define OT_CHECK_NI4(val)
#define OT_retObj_SET_Error
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define OT_LNG_NAME_FROM_CLASS(cls)
PyTypeObject * OT_CLS_T
#define OT_Check_ARGS
#define OT_retObj_SET_BFL(nat)
#define OT_retObj_RETURN
PyObject * OT_OBJ_T
#define OT_retObj_SET_STR(nat)
#define OT_CHECK_OPTIONAL(val)
#define OT_LNG_OBJV(skip)
#define OT_retObj_SET(val)
#define OT_CHECK_NOARGS
#define MkErrorC_Check(mng, PROC)
#define OT_ProcRet
#define OtClass_ARGS
#define OT_CHECK_STRN(val)
#define MqCleanupTmpl()
#define StartE_ToString_doc
static MK_UNUSED int num
#define WaitOnEventE_ToInt_doc
static typeof(MqLal.MqSysServerThreadCB) save_MqSysServerThreadF
#define WaitOnEventE_ToString_doc
#define IdentE_ToInt_doc
#define IdentE_ToString_doc
#define InitGetArg0_doc
#define SlaveE_ToString_doc
#define StatusIsEF_FromInt_doc
#define StatusIsEF_ToString_doc
#define MqSetupTmpl()
#define StatusIsEF_ToInt_doc
#define HelpMsgque_doc
#define Help_doc
#define OT_SETUP_hdl_static
#define InitSetArg0_doc
#define myTrace2(col, str)
#define InitResetArg0_doc
#define StartE_ToInt_doc
#define Cleanup_doc
#define IdentE_FromInt_doc
PyMODINIT_FUNC LibMqMsgque(void)
#define SlaveE_ToInt_doc
#define myTrace(str)
#define SlaveE_FromInt_doc
#define Setup_doc
#define WaitOnEventE_FromInt_doc
#define StartE_FromInt_doc
tag: nhi1-release-250425
#define MqStatusIsEF_lngO
#define MqContextC_MK_NULL
#define MqWaitOnEventE_lngO
#define OT_NEW_Mq_enum_OBJ(typ, val)
#define MQ(n)
#define MqIdentE_lngO
#define NS(n)
#define MqStartE_lngO
#define MqDumpC_MK_NULL
#define MqSlaveE_lngO
#define MqFactoryC_MK_NULL
#define error
Definition high_lng.h:339
#define MkBufferListCreateTLS_T(name, num)
#define MK_ERROR_FORMAT
#define MK_UNUSED
MkErrorE
MK_OK
const MK_STRB * MK_STRN
MK_STRB * MK_STR
MK_PTRB * MK_CCP
signed int MK_I32
#define MkThreadLocal
#define MK_RT_PTR
#define MK_RT_CALL
#define MK_RT_ARGS
#define MkRtSetup_NULL
static MK_I32 MqStartE_ToInt(enum MqStartE value)
return the MqStartE as integer …
static MK_I32 MqIdentE_ToInt(enum MqIdentE value)
return the MqIdentE as integer …
MK_STRN MqWaitOnEventE_ToString(enum MqWaitOnEventE value)
return the MqWaitOnEventE as string …
static MK_I32 MqStatusIsEF_ToInt(enum MqStatusIsEF value)
return the MqStatusIsEF as integer …
enum MkErrorE MqStartE_FromInt(MK_I32 const value, enum MqStartE *value_out)
return the MqStartE from integer …
enum MkErrorE MqIdentE_FromInt(MK_I32 const value, enum MqIdentE *value_out)
return the MqIdentE from integer …
MqWaitOnEventE
wait for an event? …
MqSlaveE
predefined slave-id for well known slaves …
MK_STRN MqStatusIsEF_ToString(enum MqStatusIsEF value)
return the MqStatusIsEF as string …
enum MkErrorE MqSlaveE_FromInt(MK_I32 const value, enum MqSlaveE *value_out)
return the MqSlaveE from integer …
MqIdentE
identify the application using prefix (default) or factory …
MK_STRN MqSlaveE_ToString(enum MqSlaveE value)
return the MqSlaveE as string …
MqStartE
User preferences on HOWTO start a new entity.
MqStatusIsEF
Information about how the context was created.
MK_STRN MqIdentE_ToString(enum MqIdentE value)
return the MqIdentE as string …
MK_STRN MqStartE_ToString(enum MqStartE value)
return the MqStartE as string …
enum MkErrorE MqStatusIsEF_FromInt(MK_I32 const value, enum MqStatusIsEF *value_out)
return the MqStatusIsEF from integer …
static MK_I32 MqWaitOnEventE_ToInt(enum MqWaitOnEventE value)
return the MqWaitOnEventE as integer …
static MK_I32 MqSlaveE_ToInt(enum MqSlaveE value)
return the MqSlaveE as integer …
enum MkErrorE MqWaitOnEventE_FromInt(MK_I32 const value, enum MqWaitOnEventE *value_out)
return the MqWaitOnEventE from integer …
MK_STR MqHelp(MK_STRN tool)
write pymqmsgque specific user-help to stderr
MK_STR MqHelpMsgque(void)
return a page with the usage of all pymqmsgque specific options
MK_BFL MqInitGetArg0(void)
get the process startup-prefix argument
MK_BFL MqInitResetArg0(void)
Reset the process-startup-prefix argument to an empty list …
void MqInitSetArg0VA(MK_STRN arg0,...)
set the process startup-prefix to a args
void MqInitSetArg0(MK_BAC bfl)
set the process startup-prefix argument to bfl
void MqSetup(void)
setup pymqmsgque internal memory …
struct MqLalS MqLal
Language Abstraction Layer in duty.
#define OT_ERROR_STACK
#define WrongNumArgs(...)
#define OT_CHECK_ENUM(ename, val)
#define OT_CHECK_BAC(val)
#define WrongTypeOfArgError(exp, got)
tag: nhi1-release-250425
MQ_EXTERN enum MkErrorE MK_DECL MQ CheckConstructor(OT_Check_ARGS, MK_CBP *)
PUBLIC data structure for the pymqmsgque-specific-data
MqSysServerThreadF MqSysServerThreadCB
thread server create syscall with pymqmsgque error plugin
data used to initialize a new created thread …