diff options
Diffstat (limited to 'Presence')
-rw-r--r-- | Presence/ServerC.hs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/Presence/ServerC.hs b/Presence/ServerC.hs index 2e22825d..881ce5d2 100644 --- a/Presence/ServerC.hs +++ b/Presence/ServerC.hs | |||
@@ -2,7 +2,7 @@ | |||
2 | {-# LANGUAGE TypeOperators #-} | 2 | {-# LANGUAGE TypeOperators #-} |
3 | {-# LANGUAGE OverloadedStrings #-} | 3 | {-# LANGUAGE OverloadedStrings #-} |
4 | {-# LANGUAGE RankNTypes #-} | 4 | {-# LANGUAGE RankNTypes #-} |
5 | module ServerC | 5 | module ServerC |
6 | ( doServer | 6 | ( doServer |
7 | , ConnId(..) | 7 | , ConnId(..) |
8 | ) where | 8 | ) where |
@@ -56,8 +56,8 @@ doServer :: | |||
56 | MonadIO m => | 56 | MonadIO m => |
57 | HCons Socket.Family (HCons PortNumber l) | 57 | HCons Socket.Family (HCons PortNumber l) |
58 | -> (HCons RestrictedSocket (HCons ConnId l) | 58 | -> (HCons RestrictedSocket (HCons ConnId l) |
59 | -> Producer m S.ByteString | 59 | -> Source m S.ByteString |
60 | -> Consumer S.ByteString m () | 60 | -> Sink S.ByteString m () |
61 | -> IO ()) | 61 | -> IO ()) |
62 | -> IO Socket | 62 | -> IO Socket |
63 | doServer (HCons family port) g = runServer port (runConn g) | 63 | doServer (HCons family port) g = runServer port (runConn g) |
@@ -99,7 +99,7 @@ doServer (HCons family port) g = runServer port (runConn g) | |||
99 | Retry -> threadDelay 500000 >> mainLoop sock idnum go | 99 | Retry -> threadDelay 500000 >> mainLoop sock idnum go |
100 | QuitOnException -> return () | 100 | QuitOnException -> return () |
101 | 101 | ||
102 | packets :: MonadIO m => Handle -> Producer m S.ByteString | 102 | packets :: MonadIO m => Handle -> Source m S.ByteString |
103 | packets h = do | 103 | packets h = do |
104 | packet <- lift $ liftIO $ getPacket h | 104 | packet <- lift $ liftIO $ getPacket h |
105 | yield packet | 105 | yield packet |
@@ -108,7 +108,7 @@ packets h = do | |||
108 | where | 108 | where |
109 | getPacket h = do { hWaitForInput h (-1) ; hGetNonBlocking h 1024 } | 109 | getPacket h = do { hWaitForInput h (-1) ; hGetNonBlocking h 1024 } |
110 | 110 | ||
111 | outgoing :: MonadIO m => Handle -> Consumer S.ByteString m () | 111 | outgoing :: MonadIO m => Handle -> Sink S.ByteString m () |
112 | outgoing h = do | 112 | outgoing h = do |
113 | mpacket <- await | 113 | mpacket <- await |
114 | maybe (return ()) | 114 | maybe (return ()) |
@@ -116,14 +116,17 @@ outgoing h = do | |||
116 | mpacket | 116 | mpacket |
117 | 117 | ||
118 | 118 | ||
119 | |||
120 | |||
119 | runConn :: | 121 | runConn :: |
120 | MonadIO m => | 122 | MonadIO m => |
121 | ( HCons RestrictedSocket st | 123 | (HCons RestrictedSocket st |
122 | -> Producer m S.ByteString | 124 | -> Source m S.ByteString |
123 | -> Consumer S.ByteString m () | 125 | -> Sink S.ByteString m () |
124 | -> IO () ) | 126 | -> IO ()) |
125 | -> st -> (Socket, t) -> IO () | 127 | -> st |
126 | 128 | -> (Socket, t) | |
129 | -> IO () | ||
127 | runConn g st (sock,_) = do | 130 | runConn g st (sock,_) = do |
128 | h <- socketToHandle sock ReadWriteMode | 131 | h <- socketToHandle sock ReadWriteMode |
129 | hSetBuffering h NoBuffering | 132 | hSetBuffering h NoBuffering |