Also mein Quellcode sieht aktuell so aus:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, windows, IdTCPServer, IdContext, IdBaseComponent, IdComponent, ComCtrls;
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;
LI :TListItem;
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[3] <> Version then
begin
Socket.WriteLn('version');
end
else
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;
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(10);
end.
Ich hab ihn jetzt mal versucht über ein Linux VMWare mit FPC zu compilen aber irgentwie bin ich anscheiennd zu doof dazu. Wenn ich mit wine emulieren will dann sagt er irgentwas von X-Servern und Grafiktreibern.
An der Stelle wo jetzt if (StrArr[1] = 'test') and (StrArr[2] = '123') then steht versuche ich noch herauszufinden wie ich eine
SQL Datenbank benutzen kann was sich leider als weit schwieriger erweißt als erwartet.