gameServer/stresstest.hs
changeset 1804 4e78ad846fb6
child 1815 3d62cf9c350e
equal deleted inserted replaced
1803:95efe37482e3 1804:4e78ad846fb6
       
     1 {-# LANGUAGE CPP #-}
       
     2 
       
     3 module Main where
       
     4 
       
     5 import IO
       
     6 import System.IO
       
     7 import Control.Concurrent
       
     8 import Network
       
     9 import Control.Exception
       
    10 import Control.Monad
       
    11 import System.Random
       
    12 
       
    13 #if !defined(mingw32_HOST_OS)
       
    14 import System.Posix
       
    15 #endif
       
    16 
       
    17 session1 nick room = ["NICK", nick, "", "PROTO", "24", "", "CHAT_STRING", "lobby 1", "", "CREATE", room, "", "CHAT_STRING", "room 1", "", "QUIT", "bye-bye", ""]
       
    18 session2 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "PART", "", "CHAT_STRING", "lobby after part", "", "QUIT", "bye-bye", ""]
       
    19 session3 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "QUIT", "bye-bye", ""]
       
    20 
       
    21 emulateSession sock s = do
       
    22 	mapM_ (\x -> hPutStrLn sock x >> hFlush sock >> randomRIO (50000::Int, 90000) >>= threadDelay) s
       
    23 	hFlush sock
       
    24 	threadDelay 225000
       
    25 
       
    26 testing = Control.Exception.handle (\e -> putStrLn $ show e) $ do
       
    27 	putStrLn "Start"
       
    28 	sock <- connectTo "127.0.0.1" (PortNumber 46631)
       
    29 
       
    30 	num1 <- randomRIO (70000::Int, 70100)
       
    31 	num2 <- randomRIO (0::Int, 2)
       
    32 	num3 <- randomRIO (0::Int, 5)
       
    33 	let nick1 = show $ num1
       
    34 	let room1 = show $ num2
       
    35 	case num2 of 
       
    36 		0 -> emulateSession sock $ session1 nick1 room1
       
    37 		1 -> emulateSession sock $ session2 nick1 room1
       
    38 		2 -> emulateSession sock $ session3 nick1 room1
       
    39 	hClose sock
       
    40 	putStrLn "Finish"
       
    41 
       
    42 forks = forever $ do
       
    43 	delay <- randomRIO (10000::Int, 19000)
       
    44 	threadDelay delay
       
    45 	forkIO testing
       
    46 
       
    47 main = withSocketsDo $ do
       
    48 #if !defined(mingw32_HOST_OS)
       
    49 	installHandler sigPIPE Ignore Nothing;
       
    50 #endif
       
    51 	forks