# HG changeset patch
# User unc0rr
# Date 1360527555 -14400
# Node ID c5605c6f5bb3df5e6598c64c9d832fab240fc61f
# Parent  a06b1598c3a27c86868683c0a4989f6071064476
Hack checker to run engine with record file received (uses hardcoded paths)

diff -r a06b1598c3a2 -r c5605c6f5bb3 gameServer/OfficialServer/checker.hs
--- a/gameServer/OfficialServer/checker.hs	Mon Feb 11 00:14:05 2013 +0400
+++ b/gameServer/OfficialServer/checker.hs	Mon Feb 11 00:19:15 2013 +0400
@@ -15,6 +15,10 @@
 import Network.Socket hiding (recv)
 import Network.Socket.ByteString
 import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString as BW
+import qualified Codec.Binary.Base64 as Base64
+import System.Process
+import Data.Maybe
 #if !defined(mingw32_HOST_OS)
 import System.Posix
 #endif
@@ -24,6 +28,22 @@
 
 protocolNumber = "43"
 
+checkReplay :: [B.ByteString] -> IO ()
+checkReplay msgs = do
+    tempDir <- getTemporaryDirectory
+    (fileName, h) <- openBinaryTempFile tempDir "checker-demo"
+    B.hPut h . BW.pack . concat . map (fromJust . Base64.decode . B.unpack) $ msgs
+    hFlush h
+    hClose h
+
+    (_, _, Just hErr, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.18/bin/hwengine"
+                ["/usr/home/unC0Rr/.hedgewars"
+                , "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.18/share/hedgewars/Data"
+                , fileName])
+            {std_err = CreatePipe}
+    hSetBuffering hErr LineBuffering
+
+
 takePacks :: State B.ByteString [[B.ByteString]]
 takePacks = do
     modify (until (not . B.isPrefixOf pDelim) (B.drop 2))
@@ -76,6 +96,7 @@
         answer ["CHECKER", protocolNumber, l, p]
         answer ["READY"]
     onPacket ["PING"] = answer ["PONG"]
+    onPacket ("REPLAY":msgs) = checkReplay msgs
     onPacket ("BYE" : xs) = error $ show xs
     onPacket _ = return ()