Also ich hab das ganze jetzt so gelöst und es läuft prima unter Wine. Die ereignisse werden ausgeführt ich bekomme keine Fehlermeldungen läuft stabil alles bestens.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, IdTCPServer, IdContext, IdBaseComponent, IdComponent;
type
TServer = class(TObject)
IdTCPServer1: TIdTCPServer;
procedure IdTCPServer1Execute(AThread: TIdContext);
procedure IdTCPServer1Connect(AThread: TIdContext);
private
{ Private declarations }
constructor Create;
public
{ Public declarations }
end;
Const
Version = '0.02';
type
TDynStringArray = Array of string;
function Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray;
var
SepLen: Integer;
F, P: PChar;
begin
SetLength(Result, 0);
if (S = '') or (Limit < 0) then
Exit;
if Separator = '' then
begin
SetLength(Result, 1);
Result[0] := S;
Exit;
end;
SepLen := Length(Separator);
P := PChar(S);
while P^ <> #0 do
begin
F := P;
P := AnsiStrPos(P, PChar(Separator));
if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
P := StrEnd(F);
SetLength(Result, Length(Result) + 1);
SetString(Result[High(Result)], F, P - F);
F := P;
if P = Separator then
SetLength(Result, Length(Result) + 1);
while (P^ <> #0) and (P - F < SepLen) do
Inc(P);
end;
end;
procedure TServer.IdTCPServer1Execute(AThread: TIdContext);
var
Data : String;
StrArr : TDynStringArray;
begin
with AThread.Connection do
begin
Data := String(Socket.ReadLn);
Data := Trim(Data);
WriteLn(Data);
if Length(Data) > 0 then
begin
StrArr := Explode('|', Data);
if StrArr[0] = 'login' then
begin
if (StrArr[1] = 'test') and (StrArr[2] = '123') then
begin
Socket.WriteLn('login');
end
else
begin
Socket.WriteLn('invalid');
end;
end;
end;
end;
end;
procedure TServer.IdTCPServer1Connect(AThread: TIdContext);
begin
WriteLn('Client verbunden.');
end;
constructor TServer.Create;
begin
inherited Create;
WriteLn('#######################');
WriteLn('## ##');
WriteLn('## Masterserver '+version+' ##');
WriteLn('## ##');
WriteLn('#######################');
WriteLn('');
IdTCPServer1 := TIdTCPServer.Create(nil);
WriteLn('Server wurde initialisiert.');
IdTCPServer1.DefaultPort := 5000;
WriteLn('Server lauscht auf Port: '+InttoStr(IdTCPServer1.DefaultPort));
IdTCPServer1.TerminateWaitTime := 5000;
IdTCPServer1.OnConnect := IdTCPServer1Connect;
IdTCPServer1.OnExecute := IdTCPServer1Execute;
end;
var
Server : TServer;
begin
Server := TServer.Create;
Server.IdTCPServer1.Active := True;
While True do sleep(60);
end.
http://img683.imageshack.us/img683/8181/beweis.jpg
Was mich jetzt noch interessieren würde währe wie ich einen TimeStamp in die ereignisse einbringen kann.