home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994…tember: Reference Library / Dev.CD Sep 94.toast / Periodicals / develop / develop Issue 11 / develop 11 code / The NetWork Project / Examples (Sources) / NetSim / task.slave.impl.p < prev    next >
Encoding:
Text File  |  1992-07-15  |  2.4 KB  |  96 lines  |  [TEXT/MPS ]

  1. {---------------------------------------------------------------}
  2. {    SlaveTaskHandler    }
  3. { © 1991 G. Sawitzki, Heidelberg}
  4. type
  5.     tSlaveTaskHandler=object(tTaskHandler)
  6.         ResultHandler:tReplyResultHandler;
  7.         procedure tSlaveTaskHandler.init;override;    
  8.  
  9.  
  10.     function tSlaveTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;    
  11.     procedure tSlaveTaskHandler.MsgEvaluation(var msg:MsgPtr);override;
  12.     end;
  13.  
  14.  
  15. procedure tSlaveTaskHandler.init;override;    
  16. const
  17.     cPrivilegedInterval=60;    {ticks before feeling free for a new partner}
  18. begin
  19.     inherited init;
  20.  
  21.     PrivilegedInterval    :=cPrivilegedInterval;
  22.  
  23.     restart;
  24. end;
  25.  
  26. function tSlaveTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;    
  27. var anyErr:OsErr;l1,l2:longint;
  28. begin
  29.     MsgUsable:=false;
  30.     with tMsgHeaderPtr(msg^.msgPrioPtr)^ do begin
  31.         if version<>cMyMsgHeaderVersion then begin
  32.             if not master then gAppDone:=true; {should deregister}
  33.         end else {we only accept the current version}
  34.         case action of
  35.             aNoop:;
  36.             aExample: begin
  37. l1:=longint(cDefaultDistribution);{ work around bug in mpw pascal 3.2bX}
  38. l2:=longint(cDefaultDisplay);
  39.                 if (DistributionToken=l1) &
  40.                 (DisplayToken=l2) then begin
  41.                     with msg^ do 
  42.                     if MsgCoreSize=0 then MsgUsable:=true else 
  43.                     begin
  44.                         MsgCorePtr:=NewPtr(MsgCoreSize);
  45.                         MsgUsable:=MsgCorePtr<>nil;
  46.                     end;
  47.                     anyErr:=FlushMsg(cMsgNAttention);
  48.                 end ;
  49.             end;
  50.             aDone: gAppDone:=true;
  51.             aSetConfig:begin 
  52.                 with msg^ do 
  53.                 if MsgCoreSize=0 then MsgUsable:=true else 
  54.                 begin
  55.                     MsgCorePtr:=NewPtr(MsgCoreSize);
  56.                     MsgUsable:=MsgCorePtr<>nil;
  57.                 end;
  58.             end;
  59.             otherwise
  60.         end;
  61.     end;{with}
  62. end;
  63.  
  64. procedure tSlaveTaskHandler.MsgEvaluation(var msg:MsgPtr);
  65. var h:handle;
  66.     safeport:grafptr;
  67.     tempstr:str255;
  68.     l:longint;s:str255;
  69.     myHeader:tMsgHeader;
  70.     replysize:longint;
  71.     anyErr:OsErr;
  72.     tempPtr:tMsgHeaderPtr;
  73. begin
  74.     myHeader:=tMsgHeaderPtr((msg^.MsgPrioPtr))^; {get a local copy of header info}
  75.  
  76.     if myHeader.action=aSetConfig then 
  77.     begin 
  78.         ProgramBreak('config change;g');
  79.         theConfiguration:=tConfigurationPtr(msg^.MsgCorePtr)^;
  80.  
  81.  
  82.     end else
  83.     with msg^ do begin
  84.         anyErr:=FlushMsg(cMsgNAttention);
  85.         if spare then sysbeep(1);
  86.         {generate as pict}
  87.         h:=DoTaskCore(myHeader);
  88.         if h<>nil then begin
  89.             tempPtr:=tMsgHeaderPtr(msg^.MsgPrioPtr);
  90.             tempPtr^:=myHeader;{ still to check}
  91.             anyErr:=ResultHandler.Doreply(msg,h);
  92.         end;
  93.         DoTaskUpdate(h,myHeader,true);{warning:reuse of myheader. transmit may still be pending}
  94.     end;
  95. end;
  96.