metro-socket-0.1.0.0: src/Metro/TP/Socket.hs
{-# LANGUAGE TypeFamilies #-}
module Metro.TP.Socket
( Socket
, socket
, mapTCPSocket
, mapUDPSocket
) where
import Data.List (isPrefixOf)
import Metro.Class (Transport (..))
import Metro.TP.TCPSocket
import Metro.TP.UDPSocket
data Socket = TCP TCPSocket
| UDP UDPSocket
instance Transport Socket where
data TransportConfig Socket =
TCPTC (TransportConfig TCPSocket)
| UDPTC (TransportConfig UDPSocket)
newTransport (TCPTC c) = TCP <$> newTransport c
newTransport (UDPTC c) = UDP <$> newTransport c
recvData (TCP tp) = recvData tp
recvData (UDP tp) = recvData tp
sendData (TCP tp) = sendData tp
sendData (UDP tp) = sendData tp
closeTransport (TCP tp) = closeTransport tp
closeTransport (UDP tp) = closeTransport tp
socket :: String -> TransportConfig Socket
socket hostPort =
if "udp" `isPrefixOf` hostPort then UDPTC $ udpSocket hostPort
else TCPTC $ tcpSocket hostPort
mapTCPSocket :: TransportConfig TCPSocket -> TransportConfig Socket
mapTCPSocket = TCPTC
mapUDPSocket :: TransportConfig UDPSocket -> TransportConfig Socket
mapUDPSocket = UDPTC