97 #include "DitsInteraction.h"
163 virtual void Disconnected(
DcppTask *) = 0;
171 DisconHandler *disconnectHandler;
174 struct TaskListElem {
179 static TaskListElem *ObjectList;
182 static bool disconnectEnabled;
185 TaskListElem *MyListElem;
191 void EnableDisconnect(StatusType *status);
196 static DitsDisConnectRoutineType origDisconnect;
197 static DVOIDP origDisconnectData;
205 enum StateEnum { INITIAL, SELFINIT, PATHWAIT1, LOADING,
206 PATHWAIT2, ACTIVE, DIED, NOTIFY } state;
220 char taskname[DITS_C_NAMELEN];
226 char process[DITS_C_NAMELEN];
237 void constructorHelper();
241 const char *StateString(StateEnum state)
const;
243 void LogStartMsg(
const char *name, DitsMsgType type,
244 const SdsId & arg,
bool forgotten, StatusType *status)
const;
245 static void LogArgument(
void *client_data,
const char *line,
246 StatusType * status);
249 StatusType *
const status);
252 StatusType *
const status);
255 StatusType *
const status);
259 StatusType *
const status);
262 StatusType *
const status);
265 StatusType *
const status);
268 StatusType *
const status);
271 StatusType *
const status);
272 void HandleBulkTrans(
274 StatusType *
const status);
277 StatusType *
const status);
280 const char *
const name,
281 const DitsMsgType Type,
290 DitsTransIdType *
const transid,
291 StatusType *
const status);
294 const char *
const name,
295 const DitsMsgType Type,
299 const int NotifyBytes,
308 DitsTransIdType *
const transid,
309 StatusType *
const status);
312 const char *
const name,
313 const DitsMsgType Type,
322 DitsTransIdType *
const transid,
323 StatusType *
const status);
357 const char *
const location = 0,
358 const char *
const file = 0);
420 void Report(StatusType *status)
const;
440 if (state == SELFINIT)
441 return DitsGetTaskName();
453 const char *
Location()
const {
return (tasklocation); };
476 virtual void SetName(
const char *
const TaskName) {
482 for (i = 0; (TaskName[i] != 0 && TaskName[i] !=
'@') ; ++i)
488 if (i >=
sizeof(taskname)-1)
490 taskname[
sizeof(taskname)-1] = 0;
493 taskname[i] = TaskName[i];
499 if (TaskName[i] ==
'@')
506 for (j = 0; TaskName[i] != 0 ; ++i, ++j)
508 if (j >=
sizeof(tasklocation)-1)
510 tasklocation[
sizeof(tasklocation)-1] = 0;
513 tasklocation[j] = TaskName[i];
529 strncpy(tasklocation,Location,
sizeof(tasklocation));
530 tasklocation[
sizeof(tasklocation)-1] = 0;
536 virtual void SetFile(
const char *
const File) {
537 strncpy(taskfile,File,
sizeof(taskfile));
538 taskfile[
sizeof(taskfile)-1] = 0;
548 this->buffers = Buffers;
556 pathflags |= DITS_M_FLOW_CONTROL;
568 if ((ProcessName) && (strlen(ProcessName) > 0))
570 strncpy(process,ProcessName,
sizeof(process)) ;
571 process[
sizeof(process)-1] = 0;
572 loadflags |= DITS_M_PROC_NAME;
575 loadflags &= ~DITS_M_PROC_NAME;
589 loadflags |= DITS_M_SET_BYTES;
591 loadflags &= ~DITS_M_SET_BYTES;
606 bool const Append=
false)
610 int len =
sizeof(argument) - strlen(argument) - 1;
611 strncat(argument,
" ",len);
613 strncat(argument,LoadArg,len);
616 strncpy(argument,LoadArg,
sizeof(argument)) ;
618 argument[
sizeof(argument)-1] = 0;
633 const bool Absolute =
false) {
637 loadflags &= ~DITS_M_REL_PRIO;
638 loadflags |= DITS_M_ABS_PRIO;
640 else if (Priority == 0)
642 loadflags &= ~(DITS_M_REL_PRIO|DITS_M_ABS_PRIO);
646 loadflags &= ~DITS_M_ABS_PRIO;
647 loadflags |= DITS_M_REL_PRIO;
678 loadflags |= DITS_M_NAMES;
680 loadflags &= ~DITS_M_NAMES;
696 loadflags |= DITS_M_SYMBOL;
698 loadflags &= ~DITS_M_SYMBOL;
716 virtual void SetProg(
const bool Flag =
true) {
718 loadflags |= DITS_M_PROG;
720 loadflags &= ~DITS_M_PROG;
729 virtual void LogLoad(
const bool Flag =
true) {
748 return ((state == ACTIVE)||(state == SELFINIT));
755 return (state == DIED);
762 return ((state == INITIAL)||(state == DIED));
772 return ((state == PATHWAIT1) ||
773 (state == PATHWAIT2) ||
774 (state == LOADING) ||
811 StatusType *
const status,
829 virtual void GetPathImmed(StatusType *
const status);
848 if ((state != INITIAL)&&(state != SELFINIT)&&
849 ( path != 0 )&&(path != DitsGetSelfPath()))
850 DitsLosePath(path,status);
861 virtual void Delete(
int force, StatusType * status) {
865 DitsDeleteTask((
char *)TaskName(), force, &known, status);
940 StatusType *
const status,
941 const SdsId & arg=SdsNull,
948 DitsTransIdType *
const transid=0) {
949 return(Send(name,DITS_MSG_OBEY,0,arg,SuccessHandler,
950 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
951 ClientData,transid,status));
1029 StatusType *
const status,
1037 SdsId *
const tidArg) {
1038 DitsTransIdType tid = 0;
1040 name,DITS_MSG_OBEY,0,arg,
1042 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
1043 ClientData,&tid,status);
1125 StatusType *
const status,
1133 const SdsId *
const tidArg) {
1134 DitsTransIdType tid = 0;
1136 name,DITS_MSG_OBEY,0,arg,
1138 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
1139 ClientData,&tid,status);
1201 StatusType *
const status,
1202 const SdsId & arg=SdsNull,
1208 return(Send(name,DITS_MSG_KICK,0,arg,SuccessHandler,
1209 ErrorHandler,0,ErsHandler,MsgHandler,
1210 ClientData,0,status));
1298 const int NotifyBytes,
1299 StatusType *
const status,
1308 DitsTransIdType *
const transid=0) {
1309 return(Send(name,DITS_MSG_OBEY,0,
1310 SharedMem,sds,NotifyBytes,
1311 SuccessHandler, ErrorHandler,TriggerHandler,
1312 ErsHandler,MsgHandler,
1313 BulkTransHandler, BulkDoneHandler,
1314 ClientData,transid,status));
1405 const int NotifyBytes,
1406 StatusType *
const status,
1415 SdsId *
const tidArg) {
1417 DitsTransIdType tid = 0;
1419 name,DITS_MSG_OBEY,0,
1420 SharedMem,sds,NotifyBytes,
1421 SuccessHandler, ErrorHandler,TriggerHandler,
1422 ErsHandler,MsgHandler,
1423 BulkTransHandler, BulkDoneHandler,
1424 ClientData,&tid,status);
1519 const int NotifyBytes,
1520 StatusType *
const status,
1529 const SdsId *
const tidArg) {
1531 DitsTransIdType tid = 0;
1533 name,DITS_MSG_OBEY,0,
1534 SharedMem,sds,NotifyBytes,
1535 SuccessHandler, ErrorHandler,TriggerHandler,
1536 ErsHandler,MsgHandler,
1537 BulkTransHandler, BulkDoneHandler,
1538 ClientData,&tid,status);
1619 const int NotifyBytes,
1620 StatusType *
const status,
1628 return(Send(name,DITS_MSG_KICK,0,
1629 SharedMem,sds,NotifyBytes,
1630 SuccessHandler, ErrorHandler,0,
1631 ErsHandler,MsgHandler,
1632 BulkTransHandler, BulkDoneHandler,
1633 ClientData,0,status));
1686 StatusType *
const status,
1691 return(Send(name,DITS_MSG_GETPARAM,0,SdsNull,SuccessHandler,
1692 ErrorHandler,0,ErsHandler,0,
1693 ClientData,0,status));
1741 StatusType * status, ...);
1798 StatusType * status, ...);
1849 StatusType *
const status,
1850 const SdsId & arg = SdsNull,
1855 return(Send(name,DITS_MSG_SETPARAM,0,arg,SuccessHandler,
1856 ErrorHandler,0,ErsHandler,0,
1857 ClientData,0,status));
1914 StatusType *
const status,
1915 const SdsId & arg=SdsNull,
1921 return(Send(name,DITS_MSG_CONTROL,0,arg,SuccessHandler,
1922 ErrorHandler,TriggerHandler,ErsHandler,0,
1923 ClientData,0,status));
1988 StatusType *
const status,
1989 const SdsId & arg=SdsNull,
1994 const bool SendCurrent=
false,
1996 int flags = SendCurrent ? DITS_M_SENDCUR : 0;
1997 return(Send(name,DITS_MSG_MONITOR,flags,arg,SuccessHandler,
1998 ErrorHandler,TriggerHandler,ErsHandler,0,
1999 ClientData,0,status));
2071 StatusType *
const status,
2072 const SdsId & arg=SdsNull,
2079 DitsTransIdType *
const transid=0) {
2080 SendForget(name,DITS_MSG_OBEY,0,arg,SuccessHandler,
2081 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
2082 ClientData,transid,status);
2154 StatusType *
const status,
2162 SdsId *
const tidArg) {
2163 DitsTransIdType tid = 0;
2164 SendForget(name,DITS_MSG_OBEY,0,arg,SuccessHandler,
2165 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
2166 ClientData,&tid,status);
2240 StatusType *
const status,
2248 const SdsId *
const tidArg) {
2249 DitsTransIdType tid = 0;
2250 SendForget(name,DITS_MSG_OBEY,0,arg,SuccessHandler,
2251 ErrorHandler,TriggerHandler,ErsHandler,MsgHandler,
2252 ClientData,&tid,status);
2312 StatusType *
const status,
2313 const SdsId & arg=SdsNull,
2319 SendForget(name,DITS_MSG_KICK,0,arg,SuccessHandler,
2320 ErrorHandler,0,ErsHandler,MsgHandler,
2321 ClientData,0,status);
2382 StatusType *
const status,
2383 const SdsId & arg=SdsNull,
2388 const bool SendCurrent=
false,
2390 int flags = SendCurrent ? DITS_M_SENDCUR : 0;
2391 SendForget(name,DITS_MSG_MONITOR,flags,arg,SuccessHandler,
2392 ErrorHandler,TriggerHandler,ErsHandler,0,
2393 ClientData,0,status);
2409 disconnectHandler = p;
2420 StatusType * status);
2434 StatusType * status) ;
2445 virtual void GetDitsPath(DitsPathType *path, StatusType *status);
2451 static DVOID HandleDisconnected(
const char *task,
2453 StatusType *status);
virtual bool Active() const
Indicate if a task is active.
Definition: dcpptask.h:747
void TaskLoggingOn()
Turn logging on for this object.
Definition: dcpptask.h:407
virtual void SetFlowControl()
Set the FLOW control flag.
Definition: dcpptask.h:555
const unsigned DcppArgumentLen
Maximum Node name length.
Definition: dcpp.h:58
void DcppSpawnKickArgUpdate(DitsTransIdType transid, const SdsId *id, StatusType *status)
Update an argument structure used when kick actions which spawn.
virtual bool Initial() const
Return true if a GetPath operation is required.
Definition: dcpptask.h:761
virtual void SetPriority(const int Priority, const bool Absolute=false)
Set the load time priority for a task when loaded.
Definition: dcpptask.h:632
virtual void SetBuffers(const DcppBuffers &Buffers)
Set the DRAMA path buffers.
Definition: dcpptask.h:547
virtual void ObeyForget(const char *const name, StatusType *const status, const SdsId &arg, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, const SdsId *const tidArg)
Send a DRAMA Obey message to the task, forgetting the transaction.
Definition: dcpptask.h:2239
DisconHandler()
Constructor.
Definition: dcpptask.h:148
virtual void SetLocation(const char *const Location)
Set the task location.
Definition: dcpptask.h:528
A Class which provides access to DRAMA's message sending facilities.
Definition: dcpptask.h:132
virtual void Delete(int force, StatusType *status)
Delete the task.
Definition: dcpptask.h:861
virtual void SetProg(const bool Flag=true)
Interpert file name as a program name.
Definition: dcpptask.h:716
virtual void ObeyForget(const char *const name, StatusType *const status, const SdsId &arg, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, SdsId *const tidArg)
Send a DRAMA Obey message to the task, forgetting the transaction.
Definition: dcpptask.h:2153
virtual void KickForget(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0)
Send a DRAMA OKick message to the task, forgetting the transaction.
Definition: dcpptask.h:2311
virtual bool Busy() const
Returns true if we can't send a message because path is busy.
Definition: dcpptask.h:771
static void LoggingOn()
Enable logging for all DcppTask objects.
Definition: dcpptask.h:396
virtual DcppHandlerRet Obey(const char *const name, StatusType *const status, const SdsId &arg, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, SdsId *const tidArg)
Send a DRAMA Obey message to the task.
Definition: dcpptask.h:1028
virtual bool IsDead() const
Return true if a previously active task has disconnected.
Definition: dcpptask.h:754
virtual DcppHandlerRet Obey(const char *const name, const DcppShared &SharedMem, const bool sds, const int NotifyBytes, StatusType *const status, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppBulkTransRoutine BulkTransHandler, const DcppHandlerRoutine BulkDoneHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, const SdsId *const tidArg)
Send a DRAMA Obey bulk data message to the task.
Definition: dcpptask.h:1516
A type used to connect DcppHandler and DcppTask.
Definition: dcpp.h:346
void TaskLoggingOff()
Turn logging off for this object.
Definition: dcpptask.h:414
A C++ Interface to the handling SDS structures.
Definition: sds.h:709
A structure representing message buffer sizes.
Definition: dcpp.h:281
virtual DcppHandlerRet Obey(const char *const name, StatusType *const status, const SdsId &arg, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, const SdsId *const tidArg)
Send a DRAMA Obey message to the task.
Definition: dcpptask.h:1124
Disconnect handler abstract type.
Definition: dcpptask.h:144
virtual void SetSymbols(const bool Flag=true)
Interpert file name as a symbol (VMS Target only)
Definition: dcpptask.h:694
virtual void MonitorForget(const char *name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const bool SendCurrent=false, const DcppHandlerRoutine ErsHandler=0)
Send a DRAMA Monitor message to the task, forgetting the transaction.
Definition: dcpptask.h:2381
virtual DcppHandlerRet Get(const char *const name, StatusType *const status, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0)
Send a DRAMA message to the task to get the value of a parameter.
Definition: dcpptask.h:1685
virtual DcppHandlerRet Obey(const char *const name, const DcppShared &SharedMem, const bool sds, const int NotifyBytes, StatusType *const status, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppBulkTransRoutine BulkTransHandler=0, const DcppHandlerRoutine BulkDoneHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0, DitsTransIdType *const transid=0)
Send a DRAMA Obey bulk data message to the task.
Definition: dcpptask.h:1295
virtual DcppHandlerRet Obey(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0, DitsTransIdType *const transid=0)
Send a DRAMA Obey message to the task.
Definition: dcpptask.h:939
void DcppSpawnKickArg(DitsTransIdType transid, SdsId *id, StatusType *status)
Create an argument structure used when kick actions which spawn.
bool GetPathLoaded() const
Indicate if a the task was loaded.
Definition: dcpptask.h:428
virtual ~DisconHandler()
Destructor.
Definition: dcpptask.h:166
virtual void LosePath(StatusType *const status)
Lose the path and then set as if the task has died.
Definition: dcpptask.h:847
virtual DisconHandler * PutDisconnectHandler(DisconHandler *p)
Add a new disconnect handler for this task.
Definition: dcpptask.h:2407
const char * TaskName() const
Fetch the task name.
Definition: dcpptask.h:437
virtual DcppHandlerRet Control(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0)
Send a DRAMA Control message to the task.
Definition: dcpptask.h:1913
virtual DcppHandlerRet Obey(const char *const name, const DcppShared &SharedMem, const bool sds, const int NotifyBytes, StatusType *const status, const DcppHandlerRoutine SuccessHandler, const DcppHandlerRoutine ErrorHandler, const DcppBulkTransRoutine BulkTransHandler, const DcppHandlerRoutine BulkDoneHandler, const DcppHandlerRoutine TriggerHandler, const DcppVoidPnt ClientData, const DcppHandlerRoutine ErsHandler, const DcppHandlerRoutine MsgHandler, SdsId *const tidArg)
Send a DRAMA Obey bulk data message to the task.
Definition: dcpptask.h:1402
void * DcppVoidPnt
A pointer to void.
Definition: dcpp.h:59
virtual void SetProcess(const char *const ProcessName)
Set the process names.
Definition: dcpptask.h:567
virtual DcppHandlerRet Monitor(const char *name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const bool SendCurrent=false, const DcppHandlerRoutine ErsHandler=0)
Send a DRAMA Monitor message to the task.
Definition: dcpptask.h:1987
virtual void SetArgument(const char *const LoadArg, bool const Append=false)
Set the load time argument string.
Definition: dcpptask.h:605
virtual void ClearState()
Clear the task state.
Definition: dcpptask.h:738
virtual void SetFile(const char *const File)
Set the executable file name.
Definition: dcpptask.h:536
virtual DcppHandlerRet Set(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0)
Send a DRAMA set message to the task.
Definition: dcpptask.h:1848
virtual void LogLoad(const bool Flag=true)
Load use
MsgOut() a lines indicating the load operations...
Definition: dcpptask.h:729
This is used to create and represent a shared memory segment.
Definition: dcpp.h:493
DcppHandlerRet
Type returns by various routines to indicate what is to happen next.
Definition: dcpp.h:75
virtual void ObeyForget(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppHandlerRoutine TriggerHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0, DitsTransIdType *const transid=0)
Send a DRAMA Obey message to the task, forgetting the transaction.
Definition: dcpptask.h:2070
const char * GetArgument() const
Fetch the load argument.
Definition: dcpptask.h:458
virtual void SetNames(const bool Flag=true)
Insist that symbols known to IMP_Master be known to the task.
Definition: dcpptask.h:676
void(* DcppBulkTransRoutine)(unsigned long Transferred, unsigned long Total, DcppVoidPnt ClientData, StatusType *status)
Type for call backs for DITS_REA_TRANSFERRED messages.
Definition: dcpp.h:106
const unsigned DcppNodeNameLen
Maximum Node name length.
Definition: dcpp.h:57
virtual DcppHandlerRet Kick(const char *const name, const DcppShared &SharedMem, const bool sds, const int NotifyBytes, StatusType *const status, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppBulkTransRoutine BulkTransHandler=0, const DcppHandlerRoutine BulkDoneHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0)
Send a DRAMA bulk data Kick message to the task.
Definition: dcpptask.h:1616
const char * Location() const
Fetch the task location.
Definition: dcpptask.h:453
virtual void SetName(const char *const TaskName)
Set the task name.
Definition: dcpptask.h:476
static void LoggingOff()
Disable logging for all tasks.
Definition: dcpptask.h:402
virtual DcppHandlerRet Kick(const char *const name, StatusType *const status, const SdsId &arg=SdsNull, const DcppHandlerRoutine SuccessHandler=0, const DcppHandlerRoutine ErrorHandler=0, const DcppVoidPnt ClientData=0, const DcppHandlerRoutine ErsHandler=0, const DcppHandlerRoutine MsgHandler=0)
Send a DRAMA Kick message to the task.
Definition: dcpptask.h:1200
virtual void Died()
Note that a task has died.
Definition: dcpptask.h:835
DcppHandlerRet(* DcppHandlerRoutine)(DcppVoidPnt ClientData, StatusType *status)
Type for call backs when messages arrive.
Definition: dcpp.h:92
virtual void SetStackSize(unsigned bytes)
Set the stack size for the load.
Definition: dcpptask.h:586