%include "network.h" %lib "network.o" f_netTest = mkForeign (FFun "netTest" (Cons FStr (Cons FInt Nil)) FInt); [%nocg] f_clientSocket = mkForeign (FFun "net_UDP_clientSocket" (Cons FStr (Cons FInt Nil)) FPtr); [%eval] f_serverSocket = mkForeign (FFun "net_UDP_serverSocket" (Cons FInt Nil) FPtr); [%eval] f_send = mkForeign (FFun "net_sendUDP" (Cons FPtr (Cons FStr (Cons FInt (Cons FStr Nil)))) FInt); [%eval] f_recv = mkForeign (FFun "net_recvUDP" (Cons FPtr Nil) FPtr); [%eval] f_recvBuf = mkForeign (FFun "get_recvBuf" (Cons FPtr Nil) FStr); [%eval] f_recvServer = mkForeign (FFun "get_recvServer" (Cons FPtr Nil) FStr); [%eval] f_recvPort = mkForeign (FFun "get_recvPort" (Cons FPtr Nil) FInt); [%eval] f_nullPtr = mkForeign (FFun "nullPtr" (Cons FPtr Nil) FInt); [%eval] nullPtr : Ptr -> (IO Bool); nullPtr ptr = do { p <- f_nullPtr ptr; return (if_then_else (p==1) True False); }; data Socket = mkCon Ptr; data Recv = mkRecv String String Int | noRecv; clientSocket : String -> Int -> (IO Socket); clientSocket server port = do { sock <- f_clientSocket server port; return (mkCon sock); }; serverSocket : Int -> (IO Socket); serverSocket port = do { sock <- f_serverSocket port; return (mkCon sock); }; sendTo : Socket -> String -> Int -> String -> (IO ()); sendTo (mkCon c) server port dat = do { v <- f_send c server port dat; return II; }; doMkRecv : Bool -> Ptr -> (IO Recv); doMkRecv True _ = return noRecv; doMkRecv False rcv = do { buf <- f_recvBuf rcv; server <- f_recvServer rcv; port <- f_recvPort rcv; -- putStrLn ("Port from connection is " ++ (__toString port)); return (mkRecv buf server port); }; recvFrom : Socket -> (IO Recv); recvFrom (mkCon c) = do { rcv <- f_recv c; nul <- nullPtr rcv; doMkRecv nul rcv; }; recvOK : Recv -> Bool; recvOK (mkRecv _ _ _) = True; recvOK noRecv = False; recvStr : Recv -> String; recvStr (mkRecv buf server port) = buf; recvServer : Recv -> String; recvServer (mkRecv buf server port) = server; recvPort : Recv -> Int; recvPort (mkRecv buf server port) = port;