gameServer/stresstest.hs
changeset 1804 4e78ad846fb6
child 1815 3d62cf9c350e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gameServer/stresstest.hs	Wed Feb 18 15:04:40 2009 +0000
@@ -0,0 +1,51 @@
+{-# LANGUAGE CPP #-}
+
+module Main where
+
+import IO
+import System.IO
+import Control.Concurrent
+import Network
+import Control.Exception
+import Control.Monad
+import System.Random
+
+#if !defined(mingw32_HOST_OS)
+import System.Posix
+#endif
+
+session1 nick room = ["NICK", nick, "", "PROTO", "24", "", "CHAT_STRING", "lobby 1", "", "CREATE", room, "", "CHAT_STRING", "room 1", "", "QUIT", "bye-bye", ""]
+session2 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "PART", "", "CHAT_STRING", "lobby after part", "", "QUIT", "bye-bye", ""]
+session3 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "QUIT", "bye-bye", ""]
+
+emulateSession sock s = do
+	mapM_ (\x -> hPutStrLn sock x >> hFlush sock >> randomRIO (50000::Int, 90000) >>= threadDelay) s
+	hFlush sock
+	threadDelay 225000
+
+testing = Control.Exception.handle (\e -> putStrLn $ show e) $ do
+	putStrLn "Start"
+	sock <- connectTo "127.0.0.1" (PortNumber 46631)
+
+	num1 <- randomRIO (70000::Int, 70100)
+	num2 <- randomRIO (0::Int, 2)
+	num3 <- randomRIO (0::Int, 5)
+	let nick1 = show $ num1
+	let room1 = show $ num2
+	case num2 of 
+		0 -> emulateSession sock $ session1 nick1 room1
+		1 -> emulateSession sock $ session2 nick1 room1
+		2 -> emulateSession sock $ session3 nick1 room1
+	hClose sock
+	putStrLn "Finish"
+
+forks = forever $ do
+	delay <- randomRIO (10000::Int, 19000)
+	threadDelay delay
+	forkIO testing
+
+main = withSocketsDo $ do
+#if !defined(mingw32_HOST_OS)
+	installHandler sigPIPE Ignore Nothing;
+#endif
+	forks