unit f_Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
IdTCPServer, ComCtrls;
type
TfrmMainServer =
class(TForm)
gb_Einstellungen: TGroupBox;
ed_Port: TEdit;
TcpServer: TIdTCPServer;
IdAntiFreeze1: TIdAntiFreeze;
Label1: TLabel;
cmd_StartServer: TButton;
cmd_EndServer: TButton;
Label2: TLabel;
lab_SvrStatus: TLabel;
gb_Threads: TGroupBox;
ScrollBox1: TScrollBox;
gb_Test: TGroupBox;
pBar: TProgressBar;
Label3: TLabel;
lab_FileSize: TLabel;
Label5: TLabel;
lab_ReceivedBytes: TLabel;
procedure cmd_StartServerClick(Sender: TObject);
procedure cmd_EndServerClick(Sender: TObject);
procedure TcpServerExecute(AThread: TIdPeerThread);
procedure FormShow(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
frmMainServer: TfrmMainServer;
implementation
uses FileReceiver;
{$R *.DFM}
procedure TfrmMainServer.cmd_StartServerClick(Sender: TObject);
begin
// erstmal eventuelle bestehende Verbindungen trennen
TcpServer.Active := false;
// Bindings leeren
TcpServer.Bindings.Clear;
// Port zuweisen, wenn kein gültiger Wert eingetragen ist 9876 als Standard verwenden
TcpServer.DefaultPort := StrToIntDef(ed_Port.Text,9876);
try
TcpServer.Active := true;
except
raise;
end;
// Ist der Server erfolgreich gestartet worden ?
if TcpServer.Active
then begin
// jetzt die Anzeige-Elemente dem Status anpassen
cmd_EndServer.Enabled := true;
cmd_StartServer.Enabled := false;
lab_SvrStatus.Font.Color := clGreen;
lab_SvrStatus.Caption := '
Gestartet';
end;
end;
procedure TfrmMainServer.cmd_EndServerClick(Sender: TObject);
begin
// Server anhalten/deaktivieren
try
TcpServer.Active := false;
except
raise;
end;
// Ist der Server erfolgreich beendet worden
if not TcpServer.Active
then begin
// jetzt die Anzeige-Elemente dem Status anpassen
cmd_EndServer.Enabled := false;
cmd_StartServer.Enabled := true;
lab_SvrStatus.Font.Color := clRed;
lab_SvrStatus.Caption := '
Deaktiviert';
end;
end;
procedure TfrmMainServer.TcpServerExecute(AThread: TIdPeerThread);
Var sClientMsg :
String;
FileReceiver : TFileReceiver;
begin
try
// Clientnachricht lesen
sClientMsg := AThread.Connection.ReadLn(#$A,5500);
FileReceiver := TFileReceiver.Create(AThread,sClientMsg);
try
// gültige Nachricht vom Client ?
if FileReceiver.ServerMsgOK
then begin
// Datei jetzt empfangen
if FileReceiver.Start
then
// Bestätigung zum Clientschreiben
AThread.Connection.WriteLn('
FILEOK')
else
// Error-Nachricht schreiben
AThread.Connection.WriteLn('
FILEERROR');
end;
finally
FileReceiver.free;
end;
except
AThread.Connection.Disconnect;
end;
end;
procedure TfrmMainServer.FormShow(Sender: TObject);
begin
// test-groupbox löschen
gb_Test.free;
end;
end.