2016-04-16 7 views
1

私は、ミニクラフトサーバーとのやりとりを処理するHaskellスクリプトを書いてみたいです。Minecraftサーバーマネージャー

サーバーにコマンドを送信するには、server.cmdというファイルがあります。最初の1行目のコマンドをサーバーで実行する必要があります(例:stop)。

だから、ここに私のコードは次のとおりです。

-- servermanager.hs 

{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-} 

module ServerManager where 

import System.Process 
import System.Exit 
import GHC.IO.Handle 
import Control.Monad 
import System.Posix.Unistd 

managerfile :: FilePath 
managerfile = "manager.cmd" 

serverfile :: FilePath 
serverfile = "server.cmd" 

main :: IO() 
main = do 
    (Just hin, _, _, _) <- createProcess (proc "java" ["-jar", "minecraft_server.1.8.9.jar", "nogui"]) {cwd = Just "/home/tekkkz/Downloads", std_in = CreatePipe, std_out = CreatePipe} 
    sleep 20 
    servercmd <- readFile serverfile 
    case servercmd of 
    "stop" -> do 
     putStrLn ">> [S] Stop" 
     hPutStr hin "stop" 
    _ -> return() 

それは、文字列をのをプリントアウトしますが、サーバーを停止していない、私のserver.cmdをファイルに「停止」がある場合...なぜ?

答えて

3

パイプをフラッシュしませんでした。IOアクションの遅延のために、プログラムはサイレントに終了してから、hPutStrは仕事をする機会があります。

hPutStr hin "stop"後にこの行を追加してみてください。

hFlush hin 
関連する問題