ThKattanek / emu64

C64 Emulator
https://www.thorsten-kattanek.de/index.php/projekte/emu64
GNU General Public License v2.0
38 stars 6 forks source link

Move SingleApplication from sharedmemory to socket #193

Closed Zirias closed 4 years ago

Zirias commented 4 years ago

Wie angekündigt hier mein Vorschlag für single application. Der Change ist relativ invasiv, muss also gut getestet werden. Ich habe bisher nur einen kleinen Test auf FreeBSD vorgenommen, prinzipiell funktioniert es -- nach Start der ersten Instanz:

$ sockstat -l | grep emu64
felix    emu64      7574  12 stream /tmp/B2GkYu79NvJ8_VXrMafXxj5OYEik8MSGsqpOzgMg32I=

Danach klappt z.B. ein src/emu64 --poke64 53280 0 :)

Wenn es auf FreeBSD korrekt funktioniert ist es fast sicher, dass das auch auf Linux der Fall ist. Wichtig wäre ein Test auf Windows -- der Code ist größtenteils aus einem eigenen Projekt portiert, und funktioniert dort auch absolut problemlos auf Windows, allerdings bin ich mir nicht ganz sicher, wie ich emu64 mit meinem MXE bauen kann, daher habe ich es hier noch nicht getestet.

Zur genauen Funktionsweise sind ein paar Kommentare drin, ich hoffe die sind so "ausreichend" :)

Grüße Felix

Zirias commented 4 years ago

Gerade noch getestet: das eigentliche Ziel des Change wäre erreicht, wenn ich jetzt emu64 hart abwürge (killall -9 emu64) kommt es danach trotzdem sauber wieder hoch ohne manuellen Eingriff :)

Ich würde noch empfehlen für die usability das neue Signal SingleApplication::remoteActivated() zu nutzen, um die Fenster in den Vordergrund zu bringen.

ThKattanek commented 4 years ago

Hallo Felix, leider ist es heute schon zu spät für mich. Werde mir das morgen nach der Arbeit ganz in ruhe anschaue. Aber erstmal vielen dank dafür.

ThKattanek commented 4 years ago

Ich habe erstmal unter Linux compiliert und getestet, läuft hier bei mir ohne Probleme. Emu64 wird nur einmal gestartet und die Kommandos werden durchgereicht ! Super. Das kompilieren unter MXE funktioniert auch ohne Problem und Anpassungen meinerseits. Ich habe dafür schon seit einiger Zeit ein Skript mit dazu gepackt (crossbuild-win-releases.sh). Kannst du ja mal rein schauen hab dafür auch ein kleines Wiki angelegt: hier -> Ich teste jetzt mal unter nativ Windows 10 64bit die beiden mit MXE erstellten Versionen :)

ThKattanek commented 4 years ago

Unter Windows läuft das ganze auch, habe nichts negatives bemerkt. Ich habe auch emu64 mit --multiple-instance gestartet, funktioniert wie gewohnt. Startet man mehrere Emu64 so werden die Kommandos (ohne --miltiple-instance) an die zuerst geöffnete Instanz gesendet.

ThKattanek commented 4 years ago

Fällt dir noch was ein was ich testen soll, ansonsten würde ich den pull request so annehmen. :)

Zirias commented 4 years ago

Ne, das klingt so weit alles gut :) mit "multi-instance" ist wahrscheinlich nur das log ein Problem, wer es so startet ist dann selbst schuld ... und ja, nur die erste Instanz horcht tatsächlich auf dem Socket, das ist das einzig sinnvolle denke ich. Auf POSIX-Systeme geht es gar nicht anders, auf Windows hätte man die Wahl, dass man bei einer zufälligen Instanz rauskommt, was ja auch Käse ist...

Würde halt empfehlen, noch ein Feature einzubauen, das Fenster in den Vordergrund bringt wenn emu64 nochmal gestartet wird -- das sollte mit dem neuen signal gut gehen, aber ich hab's noch nicht ausprobiert :)

ThKattanek commented 4 years ago

Ja so wie es jetzt ist finde ich es auch ok. --multi-instance wird auch eher weniger genutzt. Aber wer mag kann halt mehrere C64 Demos gleichzeitig schauen :D Nehme das jetzt an und mit dem Fenster in den Vordergrund zu bringen, schaue ich dann mal.