|
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 |