11#define META_FILE_NAME "MqMsgque_atl.c"
16#define OtClass_ARGS OBJCMD_ARGS
18#define OT_SETUP_hdl_static \
21 MK_UNUSED OT_MQ_RT_T amqrt = clientData; \
22 MK_UNUSED OT_MK_RT_T amkrt = amqrt->amkrt; \
23 MK_UNUSED MK_RT mkrt = amqrt->mkrt; \
24 MK_UNUSED MK_ERR hdl = &MkERROR;
31#include "mk_check_atl.h"
34#define MqCleanupTmpl()
36#define META_CONTEXT_S hdl
139 struct Tcl_Obj *
const * objv
154#define IdentE_FromInt_doc "MqIdentE [MqMsgque::IdentE_FromInt value:int32]"
155#define SlaveE_FromInt_doc "MqSlaveE [MqMsgque::SlaveE_FromInt value:int32]"
156#define StartE_FromInt_doc "MqStartE [MqMsgque::StartE_FromInt value:int32]"
157#define StatusIsEF_FromInt_doc "MqStatusIsEF [MqMsgque::StatusIsEF_FromInt value:int32]"
158#define WaitOnEventE_FromInt_doc "MqWaitOnEventE [MqMsgque::WaitOnEventE_FromInt value:int32]"
161#define IdentE_ToInt_doc "int32 [MqMsgque::IdentE_ToInt value:MqIdentE]"
162#define IdentE_ToString_doc "string [MqMsgque::IdentE_ToString value:MqIdentE]"
163#define SlaveE_ToInt_doc "int32 [MqMsgque::SlaveE_ToInt value:MqSlaveE]"
164#define SlaveE_ToString_doc "string [MqMsgque::SlaveE_ToString value:MqSlaveE]"
165#define StartE_ToInt_doc "int32 [MqMsgque::StartE_ToInt value:MqStartE]"
166#define StartE_ToString_doc "string [MqMsgque::StartE_ToString value:MqStartE]"
167#define StatusIsEF_ToInt_doc "int32 [MqMsgque::StatusIsEF_ToInt value:MqStatusIsEF]"
168#define StatusIsEF_ToString_doc "string [MqMsgque::StatusIsEF_ToString value:MqStatusIsEF]"
169#define WaitOnEventE_ToInt_doc "int32 [MqMsgque::WaitOnEventE_ToInt value:MqWaitOnEventE]"
170#define WaitOnEventE_ToString_doc "string [MqMsgque::WaitOnEventE_ToString value:MqWaitOnEventE]"
173#define Help_doc "string [MqMsgque::Help tool:string]"
174#define HelpMsgque_doc "string [MqMsgque::HelpMsgque]"
177#define InitGetArg0_doc "MkBufferListC [MqMsgque::InitGetArg0]"
178#define InitResetArg0_doc "MkBufferListC [MqMsgque::InitResetArg0]"
179#define InitSetArg0_doc "MqMsgque::InitSetArg0 ?bfl:MkBufferListC...=NULL?"
182#define Main_doc "MqMsgque::Main code:..."
185#define Cleanup_doc "MqMsgque::Cleanup"
186#define Setup_doc "MqMsgque::Setup"
397 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
398 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
399 *ret = keys[index].
val;
427 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
428 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
429 *ret = keys[index].
val;
451 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
452 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
453 *ret = keys[index].
val;
506 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
507 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
508 *ret = keys[index].
val;
527 if ((*skipP) >= objc) {
533 if (MoxClsIsN(classO)) {
560 if (Tcl_GetVar2Ex(interp,
"MQ_STARTUP_IS_THREAD",NULL,TCL_GLOBAL_ONLY) == NULL) {
562 int ret = Tcl_EvalObjEx (interp, objv[__skip], TCL_EVAL_GLOBAL);
965 {
"::MqMsgque::IdentE_FromInt" ,
NS(MqMsgque_IdentE_FromInt) },
966 {
"::MqMsgque::SlaveE_FromInt" ,
NS(MqMsgque_SlaveE_FromInt) },
967 {
"::MqMsgque::StartE_FromInt" ,
NS(MqMsgque_StartE_FromInt) },
968 {
"::MqMsgque::StatusIsEF_FromInt" ,
NS(MqMsgque_StatusIsEF_FromInt) },
969 {
"::MqMsgque::WaitOnEventE_FromInt" ,
NS(MqMsgque_WaitOnEventE_FromInt) },
972 {
"::MqMsgque::IdentE_ToInt" ,
NS(MqMsgque_IdentE_ToInt) },
973 {
"::MqMsgque::IdentE_ToString" ,
NS(MqMsgque_IdentE_ToString) },
974 {
"::MqMsgque::SlaveE_ToInt" ,
NS(MqMsgque_SlaveE_ToInt) },
975 {
"::MqMsgque::SlaveE_ToString" ,
NS(MqMsgque_SlaveE_ToString) },
976 {
"::MqMsgque::StartE_ToInt" ,
NS(MqMsgque_StartE_ToInt) },
977 {
"::MqMsgque::StartE_ToString" ,
NS(MqMsgque_StartE_ToString) },
978 {
"::MqMsgque::StatusIsEF_ToInt" ,
NS(MqMsgque_StatusIsEF_ToInt) },
979 {
"::MqMsgque::StatusIsEF_ToString" ,
NS(MqMsgque_StatusIsEF_ToString) },
980 {
"::MqMsgque::WaitOnEventE_ToInt" ,
NS(MqMsgque_WaitOnEventE_ToInt) },
981 {
"::MqMsgque::WaitOnEventE_ToString" ,
NS(MqMsgque_WaitOnEventE_ToString) },
984 {
"::MqMsgque::Help" ,
NS(MqMsgque_Help) },
985 {
"::MqMsgque::HelpMsgque" ,
NS(MqMsgque_HelpMsgque) },
988 {
"::MqMsgque::InitGetArg0" ,
NS(MqMsgque_InitGetArg0) },
989 {
"::MqMsgque::InitResetArg0" ,
NS(MqMsgque_InitResetArg0) },
990 {
"::MqMsgque::InitSetArg0" ,
NS(MqMsgque_InitSetArg0) },
993 {
"::MqMsgque::Main" ,
NS(MqMsgque_Main) },
996 {
"::MqMsgque::Cleanup" ,
NS(MqMsgque_Cleanup) },
997 {
"::MqMsgque::Setup" ,
NS(MqMsgque_Setup) },
1017static Tcl_ThreadCreateType
1018NS(ThreadMain) ( ClientData clientData ) {
1020 TCL_THREAD_CREATE_RETURN;
1034 if (idP->ioIsPipe) {
1035 check_LNG( Tcl_CreateThread(&
id,
NS(ThreadMain), argP, TCL_THREAD_STACK_DEFAULT,TCL_THREAD_JOINABLE)) {
1036 return MkErrorSetV_2M(ctx,
"[ThreadError] start pipe thread '%s' failed", name);
1041 idP->setByExtern =
true;
1044 check_LNG( Tcl_CreateThread(&
id,
NS(ThreadMain), argP, TCL_THREAD_STACK_DEFAULT,0)) {
1045 return MkErrorSetV_2M(ctx,
"[ThreadError] start server thread '%s' failed", name);
1055void NS(MqMsgque_ns_delete)(ClientData clientData)
1058 assert(amqrt != NULL);
1061#ifdef OT_DEBUG_NAMESPACE_DELETE
1069 ns = Tcl_FindNamespace(interp,
"::MqDumpC",NULL,TCL_GLOBAL_ONLY);
1070 if (ns) Tcl_DeleteNamespace(ns);
1071 ns = Tcl_FindNamespace(interp,
"::MqContextC",NULL,TCL_GLOBAL_ONLY);
1072 if (ns) Tcl_DeleteNamespace(ns);
1073 ns = Tcl_FindNamespace(interp,
"::MqFactoryC",NULL,TCL_GLOBAL_ONLY);
1074 if (ns) Tcl_DeleteNamespace(ns);
1078 #define AtlRtFree(tok) if (amqrt->tok) { Tcl_DecrRefCount(amqrt->tok); amqrt->tok = NULL; }
1079 #define regTclObj2(t,v) AtlRtFree(t)
1080 #define regTclObj(t) AtlRtFree(t)
1081 #define regTclCmd(t) AtlRtFree(t)
1116 if (Tcl_InitStubs (interp,
"8.5", 0) == NULL) {
1128 check_LNG (Tcl_PkgProvide (interp,
"atlmqmsgque", META_VERSION))
return TCL_ERROR;
1131 if (Tcl_GetVar(interp,
"::tcl::newPkgs", TCL_GLOBAL_ONLY) != NULL)
return TCL_OK;
1135 MK_STRN ver = Tcl_PkgRequireEx(interp,
"atlmkkernel", META_VERSION, 1, (ClientData*) &amkrt);
1140 amqrt->
amkrt = amkrt;
1142 Tcl_SetErrorCode(interp,
"ATLMQ",
"INIT",
"SIGNATURE",
"INVALID", NULL);
1143 Tcl_SetResult(interp,
"error: ATLMQ setup failed with INVALID signature", TCL_STATIC);
1149 Tcl_SetErrorCode(interp,
"ATLMQ",
"INIT",
"INTERPRETER",
"INVALID", NULL);
1150 Tcl_SetResult(interp,
"error: ATLMQ setup failed with INVALID interpreter", TCL_STATIC);
1156 Tcl_SetErrorCode(interp,
"ATLMQ",
"INIT",
"MK_RT",
"INVALID", NULL);
1157 Tcl_SetResult(interp,
"error: ATLMQ setup failed with INVALID MkRuntimeS", TCL_STATIC);
1163 Tcl_SetErrorCode(interp,
"ATLMQ",
"INIT",
"MQ_RT",
"INVALID", NULL);
1164 Tcl_SetResult(interp,
"error: ATLMQ setup failed with INVALID MqRuntimeS", TCL_STATIC);
1171 #define regTclObj2(t,v) if (amqrt->t) OT_REF_DECR(amqrt->t)
1172 #define regTclObj(t) regTclObj2(t,#t)
1173 #define regTclCmd(t) regTclObj2(t,#t)
1180 #define regTclObj2(t,v) amqrt->t = amqrt->t ? amqrt->t : ({ OT_OBJ_T val=STR2VAL(v); OT_REF_INCR(val); val;})
1181 #define regTclObj(t) regTclObj2(t,#t)
1182 #define regTclCmd(t) regTclObj2(t,#t)
1189 OT_NS_T ns = Tcl_FindNamespace(interp,
"::MqMsgque",NULL,TCL_GLOBAL_ONLY);
1191 ns = Tcl_CreateNamespace(interp,
"::MqMsgque",amqrt,
NS(MqMsgque_ns_delete));
1192 if (ns == NULL)
return TCL_ERROR;
1196 check_LNG(
MK(FillNamespace) (interp,
MQ(sOtClassDef),amqrt))
return TCL_ERROR;
1212 Tcl_Obj *MQ_STARTUP_IS_THREAD = Tcl_GetVar2Ex(interp,
"MQ_STARTUP_IS_THREAD",NULL,TCL_GLOBAL_ONLY);
1215 if (MQ_STARTUP_IS_THREAD == NULL) {
1218 if (
MqInitGetArg0() == NULL && Tcl_GetNameOfExecutable() != NULL) {
1219 Tcl_Eval(interp,
"dict get [info frame 1] file");
1220 MqInitSetArg0VA(Tcl_GetNameOfExecutable(), Tcl_GetStringResult(interp), NULL);
1234 OT_NS_T ns = Tcl_FindNamespace(interp,
"::MqMsgque",NULL,TCL_GLOBAL_ONLY);
1235 if (ns) Tcl_DeleteNamespace(ns);
#define OT_SETUP_VARARGS(min, max, d)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_DEBUG_NAMESPACE_DELETE(...)
#define OT_CHECK_NI4(val)
#define OT_retObj_SET_Error
#define ot_enum_append(_o, _s)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define OT_LNG_OBJV(__skip)
#define WNA(min, max, txt)
#define OT_retObj_SET_BFL(nat)
#define OT_CHECK_ENUM(ename, val)
#define OT_retObj_SET_STR(nat)
#define OT_CHECK_OPTIONAL(val)
#define OT_retObj_SET(val)
#define OT_REF_INCR(_obj)
#define MkErrorC_Check(mng, PROC)
#define OT_CHECK_STRN(val)
int(* LookupObjSF)(Tcl_Interp *interp, int objc, struct Tcl_Obj *const *objv)
#define StartE_ToString_doc
#define WaitOnEventE_ToInt_doc
#define WaitOnEventE_ToString_doc
__thread OT_MQ_RT_S amqrtR
#define IdentE_ToString_doc
#define SlaveE_ToString_doc
#define StatusIsEF_FromInt_doc
#define StatusIsEF_ToString_doc
OT_ATL_EXTERN int Atlmqmsgque_Unload(OT_ENV_T interp, int flags)
#define StatusIsEF_ToInt_doc
#define OT_SETUP_hdl_static
#define InitResetArg0_doc
#define IdentE_FromInt_doc
#define SlaveE_FromInt_doc
#define WaitOnEventE_FromInt_doc
#define StartE_FromInt_doc
#define OT_NEW_Mq_enum_OBJ(typ, val)
initialize the atlmqmsgque package
#define MkBufferListCreateTLS_T(name, num)
#define MkErrorStack_1M_Check(m)
#define MkErrorStack_0E()
#define MkErrorSetV_2M(err, printfmt,...)
#define mk_bit_compare(t, f)
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 …
MqFactoryE
the factory is called to create an object for ...
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 MqIoComE_ToString(enum MqIoComE value)
return the MqIoComE as string …
MK_STRN MqFactoryE_ToString(enum MqFactoryE value)
return the MqFactoryE as string …
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 …
MqHandShakeE
the hand-shake of a service-call …
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 …
MqIoComE
what kind of socket interface to use? …
static MK_I32 MqWaitOnEventE_ToInt(enum MqWaitOnEventE value)
return the MqWaitOnEventE as integer …
MqTransTypeE
the type of the transaction …
static MK_I32 MqSlaveE_ToInt(enum MqSlaveE value)
return the MqSlaveE as integer …
MK_STRN MqHandShakeE_ToString(enum MqHandShakeE value)
return the MqHandShakeE as string …
enum MkErrorE MqWaitOnEventE_FromInt(MK_I32 const value, enum MqWaitOnEventE *value_out)
return the MqWaitOnEventE from integer …
MK_STRN MqTransTypeE_ToString(enum MqTransTypeE value)
return the MqTransTypeE as string …
@ 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
@ MQ_WAIT_ONCE
Wait maximum timeout seconds for one new event, doesn't matter which context the event belongs to or ...
@ MQ_WAIT_OWN
Wait maximum timeout seconds for one new event that belongs to the current context or raise an timeou...
@ MQ_WAIT_NO
Check for one event but do not wait …
@ MQ_WAIT_FOREVER
Wait maximum timeout seconds for an event or raise an timeout-error …
@ MQ_SLAVE_OTHER
internal: on the master-ctx get the slave-ctx and on the slave-ctx get the master-ctx
@ MQ_SLAVE_FILTER
internal: the filter-slave-id, (on a master get the filter-slave)
@ MQ_SLAVE_USER
internal: start of user-defined-slave-id
@ MQ_SLAVE_MASTER
internal: the master-slave-id, (on a slave get the master)
@ MQ_SLAVE_LOOPBACK
internal: the loopback-slave-id, (call my own services)
@ MQ_SLAVE_MAX
internal: the maximum slave-id …
@ MQ_IDENT_FACTORY
value from MqFactoryS::originalIdent
@ MQ_IDENT_PREFIX
value from MqConfigS::dispPrefix
@ MQ_START_SPAWN
create entity as spawn process
@ MQ_START_DEFAULT
use application-context default entity creation
@ MQ_START_THREAD
create entity as thread
@ MQ_START_FORK
create entity as fork
@ MQ_STATUS_IS_FORK
context is created as a fork
@ MQ_STATUS_IS_DUP
context is created as a duplicate of an other context
@ MQ_STATUS_IS_THREAD
context is created as a thread
@ MQ_STATUS_IS_INITIAL
context is the first context
@ MQ_STATUS_IS_SPAWN
context is created as a spawn
@ MQ_HANDSHAKE_OK
direction: server -> client
@ MQ_HANDSHAKE_START
direction: client -> server
@ MQ_HANDSHAKE_ERROR
direction: server -> client
@ MQ_IO_UDS
using a uds socket
@ MQ_IO_LOOP
using pipe socket as stdin and stdout
@ MQ_IO_PIPE
using a pipe socket (most internal usage)
@ MQ_IO_INIT
using stdin and stdout
@ MQ_IO_TCP
using a tcp socket
@ MQ_TRANS_TYPE_WAIT
'W' = MqSendEND_AND_WAIT
@ MQ_TRANS_TYPE_SUB
'S' = MqSendEND_AND_SUB
@ MQ_TRANS_TYPE_CB
'C' = MqSendEND_AND_CALLBACK
@ MQ_TRANS_TYPE_NO
'N' = MqSendEND
@ MQ_TRANS_TYPE_TRANS
'T' = MqSendEND_AND_TRANSACTION
MK_STR MqHelp(MK_STRN tool)
write atlmqmsgque specific user-help to stderr
MK_STR MqHelpMsgque(void)
return a page with the usage of all atlmqmsgque 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 MqCleanup(void)
cleanup atlmqmsgque internal memory …
void MqSetup(void)
setup atlmqmsgque internal memory …
void MqSysServerThreadMain(struct MqSysServerThreadMainS *data)
initialize a new thread …
struct MqLalS MqLal
Language Abstraction Layer in duty.
#define WrongNumArgs(...)
#define OT_CHECK_BAC(val)
#define WrongTypeOfArgError(exp, got)
MQ_EXTERN enum MkErrorE MK_DECL MQ CheckConstructor(OT_Check_ARGS, MK_CBP *)
PUBLIC data structure for the atlmqmsgque-specific-data
MqSysServerThreadF MqSysServerThreadCB
thread server create syscall with atlmqmsgque error plugin
data used to initialize a new created thread …
OT_OBJ_T AtlMqDumpC_MK_NULL
OT_OBJ_T AtlMqFactoryC_MK_NULL
OT_OBJ_T AtlMqContextC_MK_NULL