AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ereignisse in der Konsole

Offene Frage von "Tumm"
Ein Thema von Tumm · begonnen am 12. Apr 2008 · letzter Beitrag vom 19. Dez 2009
Antwort Antwort
Seite 2 von 2     12
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Ereignisse in der Konsole

  Alt 18. Dez 2009, 15:40
Danke.
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 (Der Code oben war nur schnell zusammengebaut, um das Problem besser zu erläutern.)

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
Alex Winzer
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#12

Re: Ereignisse in der Konsole

  Alt 18. Dez 2009, 22:52
Hallo Schwedenbitter.

Zitat von Schwedenbitter:
Trotzdem: Wo finde ich den/die "berkeley socket"
http://www.google.at/search?hl=de&so...erkeley+socket

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#13

Re: Ereignisse in der Konsole

  Alt 19. Dez 2009, 18:31
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] = 'loginthen
           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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz