www.pudn.com > pino3srv-src.zip > abstuser.pas


unit abstuser; 
 
interface 
 
uses Classes, WinSock; 
 
type TUser = class(TThread) 
      private 
       { Private-Deklarationen } 
       Data:string; 
      protected 
       procedure Execute; override; 
       procedure IncommingData(st:string); virtual; abstract; 
      public 
       IP:TInAddr; 
       Socket:TSocket; 
       procedure Close; 
       procedure Send(st:string); 
       constructor Create; 
     end; 
 
implementation 
 
{ Wichtig: Methoden und Eigenschaften eines Objekts in der VCL 
           können nur in einem Methodenaufruf mit SYNCHRONIZE 
           genutzt werden, z.B. 
 
      Synchronize(UpdateCaption); 
 
  und UpdateCaption könnte sein, 
 
    procedure TUser.UpdateCaption; 
    begin 
      Form1.Caption := 'Updated in einem Thread'; 
    end; } 
 
{ TUser } 
 
uses Windows,misc; 
 
constructor TUser.Create; 
  begin 
    inherited Create(true); 
    Data:=''; 
    FreeOnTerminate:=true; 
  end; 
 
procedure TUser.Close; 
  begin 
    Terminate; 
    CloseSock(Socket); 
  end; 
 
procedure TUser.Execute; 
var st:string;res,i:Integer; 
  begin 
    { Plazieren Sie den Thread code hier } 
    repeat 
      SetLength(st,1000); 
      res:=recv(Socket,st[1],1000,0); 
 
      if res>0 then 
        begin 
          SetLength(st,res); 
          Data:=Data+st; 
 
          res:=Pos(#31,Data); 
          while res>0 do 
            begin 
              st:=Copy(Data,1,res-1); 
              Delete(Data,1,res); 
              EnterCriticalSection(synchronizer); 
              IncommingData(st); 
              LeaveCriticalSection(synchronizer); 
              res:=Pos(#31,Data); 
            end; 
        end else Close; 
    until Terminated; 
  end; 
 
procedure TUser.Send(st:string); 
  begin 
    st:=st+#31; 
    WinSock.send(Socket,st[1],Length(st),0); 
  end; 
 
end.