module Socketio where
import Fudget
import FudgetIO
import FRequest
import Srequest
import NullF
import Sockets
import Utils(loop)
import DialogueIO hiding (IOError)
transmitterF' :: Socket -> F [Char] ()
transmitterF' Socket
s =
forall {t}. (t -> t) -> t
loop forall a b. (a -> b) -> a -> b
$ \F [Char] ()
l -> forall {a} {ho}. Cont (F a ho) a
getF forall a b. (a -> b) -> a -> b
$ \[Char]
str ->
if forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
str
then forall {f :: * -> * -> *} {ho} {hi}.
FudgetIO f =>
ho -> f hi ho -> f hi ho
putHigh () forall {hi} {ho}. F hi ho
nullF
else forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
SocketRequest -> f hi ho -> f hi ho
sIOsucc (Socket -> [Char] -> SocketRequest
WriteSocket Socket
s [Char]
str) F [Char] ()
l
receiverF' :: Socket -> F hi [Char]
receiverF' Socket
s =
forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
[Descriptor] -> f hi ho -> f hi ho
select [Socket -> Descriptor
SocketDe Socket
s] forall a b. (a -> b) -> a -> b
$
forall {t}. (t -> t) -> t
loop forall a b. (a -> b) -> a -> b
$ \F hi [Char]
l ->
forall {a} {b}. Cont (F a b) (KEvent a)
getMessageFu forall a b. (a -> b) -> a -> b
$ \KEvent hi
e ->
case KEvent hi
e of
Low (DResp (AsyncInput (Descriptor
_, SocketRead [Char]
str))) ->
if forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
str
then forall {hi}. F hi [Char]
closeDown
else forall {ho} {hi}. ho -> F hi ho -> F hi ho
putF [Char]
str F hi [Char]
l
High hi
_ -> forall {hi}. F hi [Char]
closeDown
where
closeDown :: F hi [Char]
closeDown =
forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
[Descriptor] -> f hi ho -> f hi ho
select [] forall a b. (a -> b) -> a -> b
$
forall {f :: * -> * -> *} {ho} {hi}.
FudgetIO f =>
ho -> f hi ho -> f hi ho
putHigh [Char]
"" forall a b. (a -> b) -> a -> b
$
forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
SocketRequest -> f hi ho -> f hi ho
sIOsucc (Socket -> SocketRequest
CloseSocket Socket
s) forall a b. (a -> b) -> a -> b
$
forall {hi} {ho}. F hi ho
nullF