Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ereignisse in der Konsole (https://www.delphipraxis.net/111967-ereignisse-der-konsole.html)

Schwedenbitter 18. Dez 2009 15:40

Re: Ereignisse in der Konsole
 
Danke.
Zitat:

Zitat von Astat
Um zu verhindern, dass ein Fenster erzeugt wird, muss die Komponente auf Blockierend umgestellt werden.

Das sind keine guten Nachrichten. Damit läuft dann leider meine mittlerweile sehr komplexe Anwendung nicht mehr :wall: (Der Code oben war nur schnell zusammengebaut, um das Problem besser zu erläutern.)

Zitat:

Zitat von Astat
Das in Windows vorhandene Asynchrone Messaging mit "Fenstern" gibt es unter UNIX nicht.
Hier musst Du dir ein entsprechendes Messaging selber nachbauen (Event Signalling),
unter Verwendung der "berkeley socket" 1.1 API

Das hört sich sehr nach Arbeit an. Ich werde daher erst mal sehen, ob ich unter Linux eine Möglichkeit finde, einen X-Server nur für wine/meine Anwendung zu starten...

Trotzdem: Wo finde ich den/die "berkeley socket"s?

Gruß, Alex

Astat 18. Dez 2009 22:52

Re: Ereignisse in der Konsole
 
Hallo Schwedenbitter.

Zitat:

Zitat von Schwedenbitter
Trotzdem: Wo finde ich den/die "berkeley socket"

http://www.google.at/search?hl=de&so...erkeley+socket

lg. Astat

RedShakal 19. Dez 2009 18:31

Re: Ereignisse in der Konsole
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz