home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-15 | 3.2 KB | 118 lines | [TEXT/MPS ] |
- {---------------------------------------------------------------}
- { MasterTaskHandler }
-
- {••• still to do ••• idea:
-
- We receive of small, fixed header size, and some data. We will use
- the data by a handle. }
- { © 1991 G. Sawitzki, Heidelberg}
-
- type
- tMasterTaskHandler=object(tTaskHandler)
- StdHandle:Handle;
- function tMasterTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;
- procedure tMasterTaskHandler.MsgEvaluation(var msg:MsgPtr);override;
- function tMasterTaskHandler.NewPrioPtr(var PrioSize:longint):ptr;override;
- function tMasterTaskHandler.NewCorePtr(var CoreSize:longint):ptr;override;
- procedure tMasterTaskHandler.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
- procedure tMasterTaskHandler.DisposCorePtr(var CorePtr:UNIV Ptr);override;
- end;
-
- function tMasterTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;
- begin
- MsgUsable:=false;
- with tMsgHeaderPtr(msg^.msgPrioPtr)^ do begin
- if version<>cMyMsgHeaderVersion then
- ProgramBreak('inconsistent header version. should not happen')
- else {we only accept the current version}
- case action of
- aNoop:;
- aExample:
- begin
- if (DistributionToken=longint(cDefaultDistribution)) &
- (DisplayToken=longint(cDefaultDisplay)) then begin
- with msg^ do begin
- MsgCorePtr:=NewCorePtr(MsgCoreSize); {allocates a handle}
- Stamp(msg);
- if MsgCorePtr<>nil then
- MsgUsable:=true;
- end;
- end;
- end;
- aDone: ProgramBreak('aDone should not happen');
- aSetConfig: ProgramBreak('aSetConfig should not happen');
- otherwise
- end;
- end;{with}
- end;
-
-
- procedure tMasterTaskHandler.MsgEvaluation(var msg:MsgPtr);
- var h:handle;
- l:longint;s:str255;
- begin
- with msg^ do begin
- {$IFC false}
- logString('immediate new task'); {temporary - while testing the schduler}
- NetWorkScheduler.DoNewTask(MsgSource,MsgTrpPtr);} {keep sender busy -- quick reply}
- {$ENDC}
- h:=RecoverHandle(msg^.MsgCorePtr);
- if h<>nil then begin
- hunlock(h);
- msg^.MsgCorePtr:=nil;{recipient has to clear it}
- tMsgHeaderPtr(msg^.MsgPrioPtr)^.action:=aShow;
- if ProcessMsg(tMsgHeaderPtr(msg^.MsgPrioPtr)^,h,false)<>noerr then;
- end
- else ProgramBreak('could not do recover handle');
- end;{with}
-
- end;
-
-
- function tMasterTaskHandler.NewPrioPtr(var PrioSize:longint):ptr;override;
- var mysize:longint;
- begin
- if PrioSize>sizeOf(tMsgHeader) then begin
- PrioSize:=0;NewPrioPtr:=nil
- end else begin
- mysize:=sizeof(tMsgHeader); {reserve some fixed additional space for handle}
- NewPrioPtr:=inherited NewPrioPtr(mysize);
- end;
- end;
-
- function tMasterTaskHandler.NewCorePtr(var CoreSize:longint):ptr;override;
- var h:handle;
- begin
- if CoreSize=0 then NewCorePtr:=nil
- else begin
- h:=NewHandle(CoreSize);
- if h<>nil then begin
- Hlock(h);
- NewCorePtr:=h^;
- end else begin
- NewCorePtr:=nil;
- CoreSize:=0;
- end;
- end;
- end;
-
-
- procedure tMasterTaskHandler.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
- begin
- {To do: handle based implementation}
- inherited DisposPrioPtr(PrioPtr);
- end;
-
- procedure tMasterTaskHandler.DisposCorePtr(var CorePtr:UNIV Ptr);override;
- var h:handle;
- begin
- if CorePtr<>nil then begin
- h:=RecoverHandle(CorePtr);
- if h=nil then debugstr('could not recover handle')
- else begin HUnlock(h);DisposHandle(h);end;
- CorePtr:=nil;
- end;
- end;
-
-
-