45 return $ fromJust l : lst |
45 return $ fromJust l : lst |
46 |
46 |
47 |
47 |
48 engineListener :: Chan Message -> Handle -> String -> IO () |
48 engineListener :: Chan Message -> Handle -> String -> IO () |
49 engineListener coreChan h fileName = do |
49 engineListener coreChan h fileName = do |
50 stats <- liftM (L.dropWhile start) $ getLines h |
50 stats <- liftM (L.takeWhile (not . B.null) . L.dropWhile (not . start)) $ getLines h |
51 debugM "Engine" $ show stats |
51 debugM "Engine" $ show stats |
52 if null stats then |
52 if null stats then |
53 writeChan coreChan $ CheckFailed "No stats msg" |
53 writeChan coreChan $ CheckFailed "No stats msg" |
54 else |
54 else |
55 writeChan coreChan $ CheckSuccess stats |
55 writeChan coreChan $ CheckSuccess stats |
61 |
61 |
62 checkReplay :: Chan Message -> [B.ByteString] -> IO () |
62 checkReplay :: Chan Message -> [B.ByteString] -> IO () |
63 checkReplay coreChan msgs = do |
63 checkReplay coreChan msgs = do |
64 tempDir <- getTemporaryDirectory |
64 tempDir <- getTemporaryDirectory |
65 (fileName, h) <- openBinaryTempFile tempDir "checker-demo" |
65 (fileName, h) <- openBinaryTempFile tempDir "checker-demo" |
66 B.hPut h . BW.pack . concat . map (fromJust . Base64.decode . B.unpack) $ msgs |
66 B.hPut h . BW.pack . concat . map (fromMaybe [] . Base64.decode . B.unpack) $ msgs |
67 hFlush h |
67 hFlush h |
68 hClose h |
68 hClose h |
69 |
69 |
70 (_, Just hOut, _, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/bin/hwengine" |
70 (_, _, Just hOut, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/bin/hwengine" |
71 [fileName |
71 [fileName |
72 , "--user-prefix", "/usr/home/unC0Rr/.hedgewars" |
72 , "--user-prefix", "/usr/home/unC0Rr/.hedgewars" |
73 , "--prefix", "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/share/hedgewars/Data" |
73 , "--prefix", "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/share/hedgewars/Data" |
74 , "--nomusic" |
74 , "--nomusic" |
75 , "--nosound" |
75 , "--nosound" |
76 ]) |
76 ]) |
77 {std_out = CreatePipe} |
77 {std_err = CreatePipe} |
78 hSetBuffering hOut LineBuffering |
78 hSetBuffering hOut LineBuffering |
79 void $ forkIO $ engineListener coreChan hOut fileName |
79 void $ forkIO $ engineListener coreChan hOut fileName |
80 |
80 |
81 |
81 |
82 takePacks :: State B.ByteString [[B.ByteString]] |
82 takePacks :: State B.ByteString [[B.ByteString]] |