Seite 1 von 1

mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 01:41
von Schard
Moin zusammen,

das Projekt mcipc ist schon etwas älter und wir auch bereits von Dritten benutzt.
Es ist eine Client Bibliothek, welche mittels der Query und RCON Protolle mit Minecraft Servern kommunizieren kann.
Dies dient zum Abfragen von Serverinformationen (Query) sowie dem Ausführen von Kommandos auf dem Server (RCON).
Ich habe letztes Wochenende die Version 2.0 veröffentlicht, welche für alle offiziellen Minecraft Flavors entsprechende Clients mit den Methoden der passenden RCON Befehle zur Verfügung stellt.
Ebenfalls, habe ich den generischen RCON Client abgetrennt.
Wenn ihr selbst Minecraft Server hostet, und diese aus Python Programmen heraus steuern wollt, könnte mcipc für euch interessant sein.

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 10:26
von Sirius3
Ein Blick reicht um zu sehen, dass die Socketkommunikation fehlerhaft ist. Für ein Paket, das genau dafür da ist, ein schwerer Fehler. Man kann sich das Leben schwer machen oder einfach socket.makefile benutzen.

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 14:05
von Schard
Kannst du das bitte konkretisieren? Was genau ist fehlerhaft?

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 14:33
von kbr
Zumindest im Client ist mir aufgefallen, dass der Generator abbricht, wenn ein chunk kleiner als die buffer-size ist. recv kann aber auch weniger Bytes liefern, als die angegebene buffer-size, selbst dann, wenn noch mehr Daten vom Server folgen. Die buffer-size ist der Maximalwert und nicht garantiert.

makefile, wie von Sirius3 erwähnt, kann diese Schwierigkeit umgehen, dafür aber Probleme bereiten, wenn zusätzlich ein timeout verwendet wird.

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 15:02
von Schard
Das Problem ist, dass das Query Protokoll keinerlei Informationen beim Abfragen liefert, wie lang die Serverantwort ist.
Wenn ich einfach ein makefile verwende und damit vom Socket lese, hängt sich die Methode dort auf, da auf mehr Daten gewartet wird, welche nicht kommen.
Wenn ihr eine Möglichkeit seht, die Methode wissen zu lassen, dass die Übertragung vom Server abgeschlossen ist, lasst es mich bitte wissen.
Natürlich will ich meinen Code wenn immer möglich verbessern.

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 15:27
von kbr
Das spezielle Protokoll kenne ich nicht, wenn aber keine Längeninformation mitgeliefert wird, sollte stattdessen eine Terminierungssequenz definiert sein. So lässt sich feststellen, ob der Empfang vollständig war (oder "übervollständig", falls der Server pushed). Bei textbasierten Protokollen ist das oft der Newline-Character.

Re: mcipc - Ein Minecraft Server RPC und Query Client

Verfasst: Freitag 25. Dezember 2020, 17:52
von Schard
Ich habe es jetzt mal refactored und Abbruchbedingungen für die einzelnen Responses hinzugefügt.
Das war relativ tricky, aber läuft nach ersten Tests stabil.