Welcher Error Code beim "SendConsoleCommand"?

  • Moijn allerseits!


    In einem Agenten sende ich via se.SendConsoleCommand(srv, command) ein Kommando an andere Server. Der Agent-Owner hat nicht auf allen Servern das Recht dazu, Kommandos zu senden und das lässt sich auch -vorerst- nicht kurzfristig beheben.


    Als Fehlercode bekomme ich 4000 zurück und das kann so ziemlich alles mögliche bedeuten, sodass ich ungern mit On Error 4000 ... arbeiten würde. Ist bspw. ein Server down, würde mir SendConsoleCommand ebenfalls einen 4000 zurück geben und diese beiden Fälle würde ich gern unterscheiden.


    Gibt es einen Fehlercode, der explizit das nicht vorhandene Recht zum Senden von Konsolenkommandos ausgibt, oder anders herum: wie kann ich den Agenten so bauen, dass zwischen "Du darfst nix senden" nicht und "Irgendwas anderes ist grad passiert" unterschieden werden und ich die Fehler entsprechend behandeln kann?


    THX in advance!
    RW

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    Koennte man beim Fehler 4000 nicht versuchen auszuwerten was SendConsoleCommand als Rueckgabewert
    liefert?


    Anders wuerde mir nur noch einfallen, dass bevor das Command gesendet werden solle, geprueft wird,
    ob der "Benutzer" auch das Recht dazu hat. (Auswerten des Server-Dokumentes)



    Andreas

  • Ich bekomme nicht raus, ob nicht auch was anderes als 4000 geworfen wird. Ein rausprinten von "Err", bzw. "Error$" gibt mir nur 4000, bzw "User-defined error" zurück. Laut Debugger liefert an der Stelle SendConsoleCommand gar nichts zurück, sondern springt bei der Zeile sofort in die Error Handler Routine, consoleReturn$ kann ich so nicht abfragen.


    Die Auswertung der Serverdokumente gestaltet sich als nicht ganz trivial: jede Tochter auf der Welt macht das anders. Mal sind Namen drin, mal Gruppen, mal Gruppen in Gruppen (in Gruppen, ...).

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

    • Offizieller Beitrag

    kannst du nicht im Errorhandling die Zeilennummer auswerten? - OK solltest dann nicht mehr viel am Code ändern.


    Oder im Errorhandling prüfst Du ob der Server verfügbar ist usw. und wirfst dann einen entsprechende Fehlermeldung.


    oder vor der Zeile die Die Fehlerbehandlung auf Resume Next setzen, danach err auswerten und die Fehlerbehandlung wieder einschalten.


    Sind nur Ansätze für die Umgehung - sauberer wäre eine eigener Fehlercode gewesen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • 1) Das mit dem "Erl" klingt nachm Plan. Nicht unbedingt schön und die reine Lehre, aber auf jeden Fall besser als nichts.
    2) Auf Verfügbarkeit eines Servers prüfe ich schon vorher im Agenten. Ist ein Server nicht verfügbar, sende ich kein Konsolenkommando.
    3) Ja, auch eine Möglichkeit, aber -nichts für ungut!- finde ich weniger schön, als die erste Idee. Das ist mir ein wenig zu viel des Guten (oder der schlechten Bastelei) ... ich denke, davon nehme ich lieber Abstand.


    Dank dir auf jeden Fall für deine Anregungen!


    Grüße
    RW

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Also ich mache es in so einem Fall (um nicht von der Erl abhängig zu sein):
    On Error goto SpecialErrorHandler
    se.SendConsoleCommand(srv, command)
    On Error goto NormalErrorHandler


    und dann einfach einen speziellen Error- Handler implementieren...


    Oder aber man lagert das ganze komplett in eine eigene Sub aus, die dann natürlich auch einen eigenen ErrorHandler haben kann (und wo man viel mehr prüfen kann ohne den eigentlichen Code aufzublähen)

  • Eine eigene Sub hab ich der Konsolenkommando-Geschichte spendiert. Das Problem ist nur:
    Bevor ich das Kommando sende, prüfe ich auf Verfügbarkeit des Servers indem ich die names.nsf versuche zu öffnen. Gestern ist es dann passiert, dass in den wenigen Millisekunden zwischen Verfügbarkeitsprüfung und Senden des Konsolenkommandos, der Server abgeraucht ist. Darf ich keine Kommandos senden, gibt es eine 4000. Kann ich keine Kommandos senden, weil der Server down ist, gibt es auch eine 4000 ... das macht es nicht einfacher.


    Ich glaube, ich belasse es jetzt einfach dabei und werfe eine einigermaßen generische Meldung an den User zurück. Schmeckt mir überhaupt nicht, aber ich kann mich nicht ewig dran festbeißen.


    Ich danke euch für eure Anregungen!


    Grüße
    RW

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl