module Socketio where
import Fudget
import FudgetIO
import FRequest
import Srequest
--import Message(Message(..))
import NullF
import Sockets
import Utils(loop)
--import Xtypes
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