module JSDOM.Custom.RTCPeerConnection ( module GeneratedExport , createOffer , createAnswer ) where import Data.Maybe (fromJust) import Control.Concurrent.MVar (takeMVar, putMVar, newEmptyMVar) import Control.Monad.IO.Class (MonadIO(..)) import JSDOM.Types (RTCIceCandidate(..), withCallback, Callback(..), RTCSessionDescription(..), DOMError(..), Dictionary(..), RTCPeerConnection(..), MonadDOM, RTCSessionDescriptionCallback(..), RTCPeerConnectionErrorCallback(..), RTCStatsCallback(..), VoidCallback(..), RTCOfferOptions, RTCAnswerOptions) import JSDOM.Custom.DOMError (throwDOMErrorException) --import JSDOM.Generated.RTCSessionDescriptionCallback -- (newRTCSessionDescriptionCallback) --import JSDOM.Generated.RTCPeerConnectionErrorCallback -- (newRTCPeerConnectionErrorCallback) --import JSDOM.Generated.VoidCallback -- (newVoidCallback) --import JSDOM.Generated.RTCStatsCallback -- (newRTCStatsCallback) import JSDOM.Generated.RTCSessionDescription (newRTCSessionDescription) import qualified JSDOM.Generated.RTCPeerConnection as Generated (createAnswer, createOffer) import JSDOM.Generated.RTCPeerConnection as GeneratedExport hiding (createAnswer, createOffer) ---- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#createOffer Mozilla webkitRTCPeerConnection.createOffer documentation> --createOffer' :: MonadDOM m => RTCPeerConnection -> Maybe Dictionary -> m (Either DOMError RTCSessionDescription) --createOffer' self offerOptions = do -- result <- liftIO newEmptyMVar -- withCallback (newRTCSessionDescriptionCallback (liftIO . putMVar result . Right . fromJust)) $ \success -> -- withCallback (newRTCPeerConnectionErrorCallback (liftIO . putMVar result . Left . fromJust)) $ \error -> do -- Generated.createOffer self (Just success) (Just error) offerOptions -- liftIO $ takeMVar result createOffer :: MonadDOM m => RTCPeerConnection -> Maybe RTCOfferOptions -> m RTCSessionDescription createOffer self offerOptions = Generated.createOffer self offerOptions >>= newRTCSessionDescription ---- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#createAnswer Mozilla webkitRTCPeerConnection.createAnswer documentation> --createAnswer' :: MonadDOM m => RTCPeerConnection -> Maybe Dictionary -> m (Either DOMError RTCSessionDescription) --createAnswer' self answerOptions = do -- result <- liftIO newEmptyMVar -- withCallback (newRTCSessionDescriptionCallback (liftIO . putMVar result . Right . fromJust)) $ \success -> -- withCallback (newRTCPeerConnectionErrorCallback (liftIO . putMVar result . Left . fromJust)) $ \error -> do -- Generated.createAnswer self (Just success) (Just error) answerOptions -- liftIO $ takeMVar result createAnswer :: MonadDOM m => RTCPeerConnection -> Maybe RTCAnswerOptions -> m RTCSessionDescription createAnswer self answerOptions = Generated.createAnswer self answerOptions >>= newRTCSessionDescription ---- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#setLocalDescription Mozilla webkitRTCPeerConnection.setLocalDescription documentation> --setLocalDescription' :: MonadDOM m => RTCPeerConnection -> RTCSessionDescription -> m (Maybe DOMError) --setLocalDescription' self description = do -- result <- liftIO newEmptyMVar -- withCallback (newVoidCallback (liftIO $ putMVar result Nothing)) $ \success -> -- withCallback (newRTCPeerConnectionErrorCallback (liftIO . putMVar result)) $ \error -> do -- Generated.setLocalDescription self (Just description) (Just success) (Just error) -- liftIO $ takeMVar result -- --setLocalDescription :: MonadDOM m => RTCPeerConnection -> RTCSessionDescription -> m () --setLocalDescription self description = setLocalDescription' self description >>= maybe (return ()) throwDOMErrorException -- ---- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#setRemoteDescription Mozilla webkitRTCPeerConnection.setRemoteDescription documentation> --setRemoteDescription' :: MonadDOM m => RTCPeerConnection -> RTCSessionDescription -> m (Maybe DOMError) --setRemoteDescription' self description = do -- result <- liftIO newEmptyMVar -- withCallback (newVoidCallback (liftIO $ putMVar result Nothing)) $ \success -> -- withCallback (newRTCPeerConnectionErrorCallback (liftIO . putMVar result)) $ \error -> do -- Generated.setRemoteDescription self (Just description) (Just success) (Just error) -- liftIO $ takeMVar result -- --setRemoteDescription :: MonadDOM m => RTCPeerConnection -> RTCSessionDescription -> m () --setRemoteDescription self description = setRemoteDescription' self description >>= maybe (return ()) throwDOMErrorException -- ---- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#addIceCandidate Mozilla webkitRTCPeerConnection.addIceCandidate documentation> --addIceCandidate' :: MonadDOM m => RTCPeerConnection -> RTCIceCandidate -> m (Maybe DOMError) --addIceCandidate' self candidate = do -- result <- liftIO newEmptyMVar -- withCallback (newVoidCallback (liftIO $ putMVar result Nothing)) $ \success -> -- withCallback (newRTCPeerConnectionErrorCallback (liftIO . putMVar result)) $ \error -> do -- Generated.addIceCandidate self (Just candidate) (Just success) (Just error) -- liftIO $ takeMVar result -- --addIceCandidate :: MonadDOM m => RTCPeerConnection -> RTCIceCandidate -> m () --addIceCandidate self candidate = addIceCandidate' self candidate >>= maybe (return ()) throwDOMErrorException --