In Prozess STDIN schreiben via WebService

  • VB.NET

    In Prozess STDIN schreiben via WebService

    Hallo zusammen,

    ich habe hier ein kleines Problem, bei dem ich hoffe ,dass Ihr mir helfen könnt.

    Ich baue mir grade einen WebService zusammen, um meinen Minecraft Server zu steuern. Prinzipiell auch kein Problem, das starten der Java.exe mit den Parametern funktioniert einwandfrei.
    Wie evtl. aus anderen Posts bekannt, lässt sich der Minecraft Server per Standard-Input steuern, um eben die Welt zu sichern oder auch um ihn zu beenden.
    Und genau da liegt mein Problem: mit einem WebService scheint es nicht so einfach zu sein auf den laufenden Prozess zu zugreifen und etwas in den STDIN zu schreiben.
    Ich habe bereits einige Eintraege hier im Forum dazu gelesen, diese steuern den Prozess aber immer über ein Programm bzw. einen Windows Dienst an.
    Ich denke mal dass das in der Funktionsweise eines WebServices nicht so einfach moeglich ist, da dieser ja nur den Request entgegen nimmt, verarbeitet und dann einen Response raus wirft, somit dann als beendet gilt.

    Hier mal der Code meiner Server.asmx Datei:

    <<<
    Gibt es hier nen Trick um die Formatierung sauber zu haben?
    Das sieht bei mir immer Grütze aus...
    >>>
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Web.ServicesImports System.Web.Services.ProtocolsImports System.ComponentModel
    2. ' Um das Aufrufen dieses Webdiensts aus einem Skript mit ASP.NET AJAX zuzulassen, heben Sie die Auskommentierung der folgenden Zeile auf.<System.Web.Script.Services.ScriptService()> <System.Web.Services.WebService(Namespace:="http://hpserv/mcms")> _<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _<ToolboxItem(False)> _Public Class Server Inherits System.Web.Services.WebService
    3. Public chat As System.IO.StreamWriter Public log As System.IO.StreamReader Public WithEvents proc As New Process
    4. <WebMethod()> _ Public Function GetStatus() As String Dim Server_PID = System.Configuration.ConfigurationManager.AppSettings.Get("Server_PID") If Server_PID <> 0 Or Nothing Then Return Server_PID.ToString Else Return "offline" End If End Function
    5. <WebMethod()> _ Public Function StartServer() As String
    6. With proc.StartInfo .FileName = "D:\Minecraft\Java64\bin\java.exe" .Arguments = "-Xmx1024M -Xms1024M -jar D:\Minecraft\minecraft_server_1.5.1.jar nogui" .WorkingDirectory = "D:\Minecraft" .WindowStyle = ProcessWindowStyle.Hidden .UseShellExecute = False .RedirectStandardOutput = True .RedirectStandardError = True .UseShellExecute = False .CreateNoWindow = True .RedirectStandardInput = True End With
    7. proc.Start() System.Configuration.ConfigurationManager.AppSettings.Set("Server_PID", proc.Id)
    8. Return proc.Id.ToString End Function
    9. <WebMethod()> _ Public Function StopServer() As String Dim Server_PID = System.Configuration.ConfigurationManager.AppSettings.Get("Server_PID")
    10. If Server_PID <> 0 Or Nothing Then proc = Process.GetProcessById(Server_PID) Try
    11. Dim chat As System.IO.StreamWriter = proc.StandardInput proc.StartInfo.RedirectStandardInput = True chat.WriteLine("stop") proc.Kill() Catch ex As Exception Return ex.Message.ToString End Try Return "Server is stopping." End If Return "Not running" End Function
    12. End Class



    Habt Ihr dazu evtl. eine Idee oder einen kleinen Hinweis, ob und wie ich das sinnvoll umsetzten kann?
    Das ganze soll auch nur für den Standard Minecraft Server laufen, Bukkit oder der gleichen ist nicht geplant.

    Danke schonmal im Vorraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Churanos“ ()