Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
ВнизКак защитить переменные в потоке? Найти похожие ветки
← →
Aleksandr (2002-03-21 16:46) [13]Заранее извиняюся за спам...
unit Webthreads;
interface
type
TWebDataProcessor=class (TThread)
private
FSleepInterval : word;
FDir : string;
FClient : TIdTCPClient;
FBadDir : string;
FLogFile : TFileStream;
FLogFileName : string;
public
constructor Create(ASuspensed : boolean; ASleepInterval : longint;ADir : string; AHost : string; APort : word);
procedure Execute; override;
destructor Destroy; override;
function SendFile(AFileName : string) : boolean;
procedure AddLog(Msg : string);
published
property BadDir : string read FBadDir write FBadDir;
end;
TRsWebServer=class (TIdTCPServer)
private
FBadDir : string;
FLogFile : TFileStream;
FLogFileName : string;
procedure FOnExecute(AThread: TIdPeerThread);
public
constructor CreateOnPort(APort : word);
destructor Destroy; override;
procedure AddLog(Msg : string);
published
property BadDir : string read FBadDir write FBadDir;
end;
const
RSFileName="$FileNameOK";
RSFileSize="$FileSizeOK";
RSFileData="$FileDataOK";
RSUpdError="$UpdatError";
WebSrvLogFileName = "websrv.log";
WebStmLogFileName = "webstrm.log";
var
WebSection1 : TRTLCriticalSection;
FileSection1 : TRTLCriticalSection;
FileSection2 : TRTLCriticalSection;
implementation
constructor TRsWebServer.CreateOnPort(APort: word);
begin
Inherited Create(nil);
DefaultPort:=APort;
FLogFileName:=CorrectPath(LogFilesDir)+WebSrvLogFileName;
if FileExists(FLogFileName) then begin
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone);
if FLogFile.Size>30000 then begin
FLogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
end;
FLogFile.Free
end
else begin
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
FLogFile.Free
end;
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone);
FLogFile.Seek(0,soFromEnd);
InitializeCriticalSection(FileSection2);
OnExecute:=FOnExecute
end;
procedure TRsWebServer.AddLog(Msg: string);
var
s : string;
P : Pointer;
begin
if NOT Assigned(FLogFile) then
Exit;
try
EnterCriticalSection(FileSection2);
if FLogFile.Size>30000 then begin
FlogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
FLogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone)
end;
S:=DateTimeToStr(Now)+": "+Msg+#13#10;
P:=Pointer(s);
FLogFile.WriteBuffer(P^,length(S))
finally
LeaveCriticalSection(FileSection2)
end
end;
procedure TRsWebServer.FOnExecute(AThread: TIdPeerThread);
var
aFileName : string;
AuID : integer;
aFileSize : integer;
M : TDosMemoryStream;
s : string;
UType : TUpdateType;
begin
try
try
M:=TDosMemoryStream.Create;
AFileName:=AThread.Connection.Readln;
AThread.Connection.Writeln(rsFileName);
aFileSize:=StrToIntDef(AThread.Connection.ReadLn,-1);
AThread.Connection.Writeln(rsFileSize);
AThread.Connection.ReadStream(M,AFileSize);
AThread.Connection.Writeln(RSFileData);
M.Seek(0,soFromBeginning);
if M.Size>0 then begin
s:=ExtractFileName(AFileName);
s:=System.Copy(S,1,Pos(".",S)-1);
aUID:=StrToInt("$"+S);
AddLog("
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c