none
Wie lese ich den Output einer UCI-Schachengine in C# aus

    Frage

  • Hallo zusammen, ich brauche Hilfe bei einem Problem in C#.
    Ich versuche, einen externen Prozess, genauer gesagt eine UCI-Schach-Engine über eine C# Windowsanwendung zu steuern. Prinzipiell funktioniert das auch, allerdings habe ich Probleme mit dem Output-Stream. Bei verschiedenen Kommandos, die ich an die Engine sende, liefert diese Text zurück, z.B. ich eine Schachstellung berechnen lasse. Allerdings gibt es auch Kommandos, die keine Rückgabe liefern, sondern nach der Ausführung auf weitere Kommandos warten. Das wäre auch noch nicht schlimm, aber leider gibt es Kommandos, die mal so und mal so reagieren.
    Z.B. der Befehl position. Diesem gibt man eine Reihe von Schachzügen als String mit. Wenn diese korrekt sind, nimmt er den Befehl einfach hin und wartet auf weitere Befehle. Wenn allerdings falsche Züge eingegeben werden, dann liefert er eine Textausgabe mit Fehlermeldungen zurück.
    Mein Problem ist jetzt, dass ich nicht prüfen kann, ob die Züge korrekt sind oder nicht. Denn wenn ich bei einer korrekten Zugliste in dem Output-Stream eine der Read-Methoden aufrufe, legt sich meine Anwendung schlafen, da sie scheinbar versucht, eine Ausgabe von der Engine zulesen. Diese allerdings liefert nichts zurück sondern wartet auf den nächsten Befehl.
    Hat jemand eine Idee, wie man dieses Problem lösen kann? Ich verwende Process.StandardOutput. Dieser Stream hat verschiedene Read-Methode. Von dort erhalte ich aber nur dann ein Feedback, wenn der Prozess, also die Engine auch etwas "spricht" (eigentlich logisch). Was kann ich aber tun, um zunächst zu prüfen, ob die Engine ein Output liefert?
    Donnerstag, 27. Juni 2013 20:16

Antworten

Alle Antworten