13#define META_FILE_NAME "MqFactoryC_atl.c"
17#define OT_CLASS amqrt->AtlMqFactoryC
18#define OT_NULL amqrt->AtlMqFactoryC_MK_NULL
19#define OT_CLASS_NAME "MqFactoryC"
21#define SELF2HDL(O) MqFct(VAL2MNG(O))
49#define OT_SETUP_hdl SetupHdlFromMetaData_2(MQ_FCT)
50#define OT_SETUP_hdl__null_allow SetupHdlFromMetaData__null_allow_2(MQ_FCT)
51#define OT_SETUP_hdl_destr SetupHdlFromMetaData__null_allow_2(MQ_FCT)
52#define OT_SETUP_hdl_constr SetupHdlConstr(MqFactoryC)
53#define OT_SETUP_hdl_static_constr OT_SETUP_hdl_static
54#define OT_SETUP_hdl_static SetupHdlStatic(MqFactoryC)
56#define OT_retObj_CONSTR(x) OT_retObj_SET(AtomInit(OT_SELF,MqFactoryC_X2obj(x),amqrt))
61 if (MqFactoryCTT == NULL) MqFactoryCTT = MqFactorySTT; \
64 if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
67 MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
68 MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
69 MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
72 OT_CLASS = AltClassDef(MqFactoryCTT,&amqrt->AtlMqFactoryC_NS); \
73 if (OT_CLASS == NULL) goto error; \
74 OT_REF_INCR(OT_CLASS); \
77 check_LNG(AtlUnknownSetup (NS(sOtClassDef),amqrt)) goto error; \
80 check_LNG(AtlUnknownSetup (NS(sInstanceDef),amqrt)) goto error; \
83 RL_init(2, recompile, RL_T(0,RecompileN)); RL_O(1,OT_CLASS) ; \
84 int retI = RL_EvalEx(0); \
85 if (retI != TCL_OK) return retI; \
88 OT_NULL = AtomCreateNULL(OT_CLASS, "::MqFactoryC::MK_NULL", (MK_PTR)amqrt); \
89 if (OT_NULL == NULL) goto error; \
94#define META_CONTEXT_S mqctx
104static char msg[] =
"ERROR: a 'MqFactoryC' command was called OUTSIDE" \
105" of the 'atlmqmsgque::Main'-proc.\n" \
107"Description: a 'atlmqmsgque SERVER' listen on a port and start for every incoming connetion\n" \
108"a sub-server. If a thread sub-server was choosen... with the '--thread' commandline-option...\n" \
109"a new thread is created. To setup a new thread the INITIAL tcl-file is RE-READ again and\n" \
110"PROCS and VARIABLES are initialized. The NEW thread has it's own 'Main'-proc and so... the\n" \
111"original 'Main'-proc is skipped. If a 'factory' command is used OUTSIDE of the 'Main'-proc...\n" \
112"the initial 'Factory' will be created TWICE. The creation of multiple 'Factory' objects...\n" \
113"with the SAME name... is an ERROR."; \
115#undef OT_SETUP_hdl_constr
116#define OT_SETUP_hdl_constr \
117 if (NS(inMain) == false) { \
118 Tcl_SetResult(interp,msg,TCL_STATIC); \
121 SetupHdlConstr(MqFactoryC)
123#undef OT_SETUP_hdl_static_constr
124#define OT_SETUP_hdl_static_constr \
125 if (NS(inMain) == false) { \
126 Tcl_SetResult(interp,msg,TCL_STATIC); \
129 SetupHdlStatic(MqFactoryC)
136 if (interp == NULL || Tcl_InterpDeleted(interp))
return;
154#define Add_doc "MqFactoryC [MqFactoryC::Add constructor:class ?ident:string=\"MK_NULL\"?]"
155#define CTOR_doc "MqFactoryC [MqFactoryC::CTOR constructor:class ?ident:string=\"MK_NULL\"?]"
158#define Get_doc "MqFactoryC [MqFactoryC::Get ?ident:string=\"\"?]"
159#define GetCalled_doc "MqFactoryC [MqFactoryC::GetCalled ?ident:string=\"\"?]"
160#define GetCalledL_doc "MqFactoryC [MqFactoryC::GetCalledL largs:MkBufferListC]"
161#define GetNull_doc "MqFactoryC [MqFactoryC::GetNull]"
162#define HandleResolve_doc "MqFactoryC [MqFactoryC::HandleResolve netHdl:MK_HDL]"
163#define Instances_doc "MqFactoryC [MqFactoryC::Instances]"
166#define DefaultIdent_doc "string [MqFactoryC::DefaultIdent]"
167#define InitialIdent_doc "string [MqFactoryC::InitialIdent]"
168#define LogAll_doc "MqFactoryC::LogAll ?callfunc:string=\"MK_NULL\"?"
171#define Dup2_doc "MqFactoryC [MqFactoryC::Dup2 $fct ident:string] (const)"
174#define Default_doc "MqFactoryC [MqFactoryC::Default $fct]"
175#define Initial_doc "MqFactoryC [MqFactoryC::Initial $fct]"
176#define Next_doc "MqFactoryC [MqFactoryC::Next $fct]"
177#define Prev_doc "MqFactoryC [MqFactoryC::Prev $fct]"
180#define New_doc "MqContextC [MqFactoryC::New $fct]"
183#define GetOriginalIdent_doc "string [MqFactoryC::GetOriginalIdent $fct] (const)"
198#ifdef CALLGRIND_DEBUG
199# include "valgrind/callgrind.h"
222#ifdef CALLGRIND_DEBUG
223printTxt(
"start CALLGRIND_ZERO_STATS")
227 interp = Tcl_CreateInterp();
230 return MkErrorSetV_1E (
"[ThreadCreateError] Tcl_Init : %s", Tcl_GetStringResult(interp));
233 Tcl_SetVar (interp,
"MQ_STARTUP_IS_THREAD",
"yes", TCL_GLOBAL_ONLY);
236 return MkErrorSetV_1E (
"[ThreadCreateError] Tcl_EvalFile : %s", Tcl_GetStringResult(interp));
240 return MkErrorSetV_1E (
"[ThreadCreateError] AtlInfoScript : %s", Tcl_GetStringResult(interp));
242#ifdef CALLGRIND_DEBUG
243CALLGRIND_DUMP_STATS_AT(
"tcl_thread_startup");
244printTxt(
"end CALLGRIND_ZERO_STATS")
247 if (interp == NULL) interp = amqrt->
interp;
248 MOX_RT_T moxrt = amkrt->
moxrt;
253 Tcl_ResetResult(interp);
257 clsTO = MoxMy__CLASS__N(tmplO);
277 OT_NS_T clsNs = Tcl_FindNamespace(interp,
VAL2STR(clsTO),NULL,TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG);
278 if (clsNs == NULL)
goto error;
280 if (clsO == NULL)
goto error;
295 lobjv[lobjc++] = tmplO;
299 check_LNG(MoxCreate3N(clsO, NULL, NULL, lobjc, lobjv)) {
303 retO = Tcl_GetObjResult(interp);
334 mqctx->setup.Event.fCall = NULL;
676 if (retVal == NULL) {
700 MQ_FCT retVal =
MqFactoryAdd (NULL,
NS(sFactoryCTor), constructor,
NS(sFactoryDataFree),
NS(sFactoryDataCopy), NULL, NULL, NULL, NULL, ident);
701 if (retVal == NULL) {
723 MQ_FCT retVal =
MqFactoryAdd (NULL,
NS(sFactoryCTor), constructor,
NS(sFactoryDataFree),
NS(sFactoryDataCopy), NULL, NULL, NULL, NULL, ident);
724 if (retVal == NULL) {
748 {
"::MqFactoryC::Add" ,
NS(MqFactoryC_Add) },
751 {
"::MqFactoryC::Get" ,
NS(MqFactoryC_Get) },
752 {
"::MqFactoryC::GetCalled" ,
NS(MqFactoryC_GetCalled) },
753 {
"::MqFactoryC::GetCalledL" ,
NS(MqFactoryC_GetCalledL) },
754 {
"::MqFactoryC::GetNull" ,
NS(MqFactoryC_GetNull) },
755 {
"::MqFactoryC::HandleResolve" ,
NS(MqFactoryC_HandleResolve) },
756 {
"::MqFactoryC::Instances" ,
NS(MqFactoryC_Instances) },
759 {
"::MqFactoryC::DefaultIdent" ,
NS(MqFactoryC_DefaultIdent) },
760 {
"::MqFactoryC::InitialIdent" ,
NS(MqFactoryC_InitialIdent) },
761 {
"::MqFactoryC::LogAll" ,
NS(MqFactoryC_LogAll) },
773 {
"::MqFactoryC::MqFactoryC" ,
NS(MqFactoryC_CTOR) },
776 {
"::MqFactoryC::Dup2" ,
NS(MqFactoryC_Dup2) },
779 {
"::MqFactoryC::Default" ,
NS(MqFactoryC_Default) },
780 {
"::MqFactoryC::Initial" ,
NS(MqFactoryC_Initial) },
781 {
"::MqFactoryC::Next" ,
NS(MqFactoryC_Next) },
782 {
"::MqFactoryC::Prev" ,
NS(MqFactoryC_Prev) },
785 {
"::MqFactoryC::New" ,
NS(MqFactoryC_New) },
788 {
"::MqFactoryC::GetOriginalIdent" ,
NS(MqFactoryC_GetOriginalIdent) },
809 NS(sFactoryCTor), NULL, NULL, NULL, NULL, NULL, NULL, NULL,
"atlmqmsgque"
815 Tcl_SetResult(interp,
"MqFactoryS exception",TCL_STATIC);
__thread OT_MK_RT_S amkrtR
#define OT_SETUP_VARARGS(min, max, d)
#define OT_CHECK_NIH(val)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_ERROR_LNG_RETURN
#define OT_retObj_SET_Error
#define OT_ERROR_CONSTRUCTOR(class)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
static void Ot_DecrRefCount(OT_OBJ_T tclO)
#define OT_SETUP_CONSTRUCTOR_ARGS(...)
#define OT_ERROR_LNG_2_META(m)
#define OT_retObj_SET_STR(nat)
#define OT_CHECK_OPTIONAL(val)
#define OT_GET_CONSTR_NAME(ctor)
#define OT_REF_DECR_AND_NULL(_obj)
#define OT_REF_DECR(_obj)
#define OT_REF_INCR(_obj)
#define MkErrorC_Check(mng, PROC)
#define AtlGetClassFrmNsPtr(nsP, flg)
#define OT_CHECK_STRN(val)
__thread OT_MQ_RT_S amqrtR
#define OT_retObj_SET_CTX(nat)
#define OT_retObj_SET_FCT(nat)
#define OT_CONSTRUCTOR_POST(x)
#define OT_SETUP_hdl_static_constr
#define GetOriginalIdent_doc
#define HandleResolve_doc
#define OT_SETUP_hdl_static
#define OT_SETUP_hdl_constr
#define OT_retObj_CONSTR(x)
#define MkBufferListCreateTLS_T(name, num)
#define MkErrorStack_0E()
#define MkErrorSetC_1E(message)
#define MkErrorSetV_1E(printfmt,...)
static bool MkSysStringIsNULL(MK_STRN str)
static MQ_CTX MqCtx(MK_MNG mng)
cast a unknown-object into an MqContextS pointer or NULL if not possible
#define MQ_CALLBACK_FACTORY_CTOR_ARGS
the MqFactoryCTorF arguments with default names
#define MqFactoryInstances()
static MQ_FCT MqFactoryPrev(MQ_FCT const fct)
get previous instance from linked-list of MqFactoryS type
#define MqFactoryHandleResolve(...)
static MQ_FCT MqFactoryGetNull(void)
Null-Slot - return a MqFactoryC typed NULL instance …
static MQ_FCT MqFactoryNext(MQ_FCT const fct)
get next instance from linked-list of MqFactoryS type
#define MqFactoryGetCalledL(...)
#define MqFactoryGet(...)
MK_STRN MqFactoryGetOriginalIdent(MQ_FCTN const fct)
helper function to return MqFactoryS::originalIdent
#define MqFactoryGetCalled(...)
#define MqFactoryLogAll(...)
#define MqFactoryInitial(...)
#define MqFactoryDefaultIdent()
#define MqFactoryNew(...)
#define MqFactoryInitialIdent()
#define MqFactoryDefault(...)
#define MqFactoryDup2(...)
#define MqFactoryAdd(...)
@ MQ_FACTORY_NEW_FILTER
create object as a filter
@ MQ_FACTORY_NEW_FORK
create object as a fork process
@ MQ_FACTORY_NEW_THREAD
create object as a thread
@ MQ_FACTORY_NEW_INIT
initial object, nothing else is known
@ MQ_FACTORY_NEW_SLAVE
create object as a slave of an other object
@ MQ_FACTORY_NEW_CHILD
create object as a child of an other object
MK_BFL MqInitGetArg0(void)
get the process startup-prefix argument
#define OT_CHECK_BFLN(val, nullB)
#define OT_CHECK_CONSTRUCTOR(val)
PUBLIC data structure for the atlmqmsgque-specific-data
data used to define a factory