Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / Schachprogrammierung / Engine - GUI Kommunikation
- - By Frank Sanders Date 2022-01-11 14:38 Upvotes 1
Gibt es Artikel darüber wie ein GUI mit der Engine kommuniziert. Ich meine hier nicht das Protokoll (z.B. UCI) sondern die Verbindung selbst. Geht das über DDE oder COM, Winsock,...
Ich nehme an, das GUI startet die Engine z.B. über einen Shell Befehl, bekommt dann ein Handle, aber wie geht es weiter?
Danke, falls jemand mehr weiß.
Parent - - By Lars Nowak Date 2022-01-16 16:50 Upvotes 1
Hallo,

die Kommunikation erfolgt ganz einfach über die Standardein- bzw. -ausgabe. Also eigentlich über die Konsole.
Das kannst du leicht selber ausprobieren (unter Windows): Öffne ein Kommandofenster und gehe in ein Verzeichnis, in der die
Engine ist. Dann einfach das Engineprogramm starten. Wahrscheinelich erscheinen dann noch ein paar Informationen.
Anschließend gibst du den Befehl "uci" ein und erhälst die Antwort von der Engine.
So tauschen auch die GUIs sich mit der Engine aus, nur dass du dabei kein Fenster siehst.

Gruß
  Lars
Parent - - By Frank Sanders Date 2022-01-17 11:07 Upvotes 1
Danke für die Info. Das Prinzip verstehe ich jetzt. Kann die Standardein- und -ausgabe so umgeleitet werden, dass sie nicht in die Kommandozeile, sondern gleich in das Programm schreibt?
Parent - By Lars Nowak Date 2022-01-17 16:51 Upvotes 1
Hallo,

ja, das machen ja die GUIs,  die Ein-/Ausgabe wird entsprechend umgeleitet.
Du kannst dir das so vorstellen, als wäre die Kommandozeile die GUI.

Lars
Parent - - By Lars Nowak Date 2022-01-17 17:17 Upvotes 1
Hallo,
hier ein kleines Beispiel (in C#), wie ich es z.B. im Prinzip in meinem BearChess mache:

Code:
_engineProcess = new Process
            {
                StartInfo =
                {
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardInput = true,
                    FileName = fileName, // Name der Engine-Datei
                    CreateNoWindow = true,
                    WorkingDirectory = Path.GetDirectoryName(fileName),
                    Arguments = parameters
                }

            };
            _engineProcess.Start();


Anschließend kannst über die beiden Befehle mit der Engine kommunizieren:

Schickt den Befehl "uci" zur Engine
Code:
_engineProcess.StandardInput.WriteLine("uci");


Wartet auf Antwort
Code:
_engineProcess.StandardOutput.ReadLine();


Nicht verwirren lassen, dass man über "StandardInput" schreibt und über "StandardOutput" liest. Das liegt an der Umleitung der Ein/-Ausgabe.
Lars
Parent - By Peter Martan Date 2022-01-17 19:46 Upvotes 1
Danke für die Infos, dein Programm hatte ich hier schon Kurt empfohlen.

https://forum.computerschach.de/cgi-bin/mwf/topic_show.pl?pid=151080#pid151080
Parent - By Frank Sanders Date 2022-01-17 20:17 Upvotes 1
Danke für die ausführlichen Informationen.
Up Topic Hauptforen / Schachprogrammierung / Engine - GUI Kommunikation

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill