summaryrefslogtreecommitdiff
path: root/Presence
diff options
context:
space:
mode:
Diffstat (limited to 'Presence')
-rw-r--r--Presence/ServerC.hs25
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 #-}
5module ServerC 5module 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
63doServer (HCons family port) g = runServer port (runConn g) 63doServer (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
102packets :: MonadIO m => Handle -> Producer m S.ByteString 102packets :: MonadIO m => Handle -> Source m S.ByteString
103packets h = do 103packets 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
111outgoing :: MonadIO m => Handle -> Consumer S.ByteString m () 111outgoing :: MonadIO m => Handle -> Sink S.ByteString m ()
112outgoing h = do 112outgoing 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
119runConn :: 121runConn ::
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 ()
127runConn g st (sock,_) = do 130runConn g st (sock,_) = do
128 h <- socketToHandle sock ReadWriteMode 131 h <- socketToHandle sock ReadWriteMode
129 hSetBuffering h NoBuffering 132 hSetBuffering h NoBuffering