{-# LANGUAGE RecordWildCards #-}

module Network.QUIC.Stream.Queue where

import Data.ByteString (ByteString)
import UnliftIO.STM

import Network.QUIC.Stream.Types

putRecvStreamQ :: Stream -> ByteString -> IO ()
putRecvStreamQ :: Stream -> ByteString -> IO ()
putRecvStreamQ Stream{StreamId
TVar TxFlow
IORef RxFlow
IORef (Skew RxStreamData)
IORef StreamState
MVar ()
Connection
RecvStreamQ
streamSyncFinTx :: Stream -> MVar ()
streamReass :: Stream -> IORef (Skew RxStreamData)
streamRecvQ :: Stream -> RecvStreamQ
streamStateRx :: Stream -> IORef StreamState
streamStateTx :: Stream -> IORef StreamState
streamFlowRx :: Stream -> IORef RxFlow
streamFlowTx :: Stream -> TVar TxFlow
streamConnection :: Stream -> Connection
streamId :: Stream -> StreamId
streamSyncFinTx :: MVar ()
streamReass :: IORef (Skew RxStreamData)
streamRecvQ :: RecvStreamQ
streamStateRx :: IORef StreamState
streamStateTx :: IORef StreamState
streamFlowRx :: IORef RxFlow
streamFlowTx :: TVar TxFlow
streamConnection :: Connection
streamId :: StreamId
..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a
atomically forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TQueue a -> a -> STM ()
writeTQueue (RecvStreamQ -> TQueue ByteString
recvStreamQ RecvStreamQ
streamRecvQ)

takeRecvStreamQ :: Stream -> IO ByteString
takeRecvStreamQ :: Stream -> IO ByteString
takeRecvStreamQ Stream{StreamId
TVar TxFlow
IORef RxFlow
IORef (Skew RxStreamData)
IORef StreamState
MVar ()
Connection
RecvStreamQ
streamSyncFinTx :: MVar ()
streamReass :: IORef (Skew RxStreamData)
streamRecvQ :: RecvStreamQ
streamStateRx :: IORef StreamState
streamStateTx :: IORef StreamState
streamFlowRx :: IORef RxFlow
streamFlowTx :: TVar TxFlow
streamConnection :: Connection
streamId :: StreamId
streamSyncFinTx :: Stream -> MVar ()
streamReass :: Stream -> IORef (Skew RxStreamData)
streamRecvQ :: Stream -> RecvStreamQ
streamStateRx :: Stream -> IORef StreamState
streamStateTx :: Stream -> IORef StreamState
streamFlowRx :: Stream -> IORef RxFlow
streamFlowTx :: Stream -> TVar TxFlow
streamConnection :: Stream -> Connection
streamId :: Stream -> StreamId
..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a
atomically forall a b. (a -> b) -> a -> b
$ forall a. TQueue a -> STM a
readTQueue forall a b. (a -> b) -> a -> b
$ RecvStreamQ -> TQueue ByteString
recvStreamQ RecvStreamQ
streamRecvQ

tryTakeRecvStreamQ :: Stream -> IO (Maybe ByteString)
tryTakeRecvStreamQ :: Stream -> IO (Maybe ByteString)
tryTakeRecvStreamQ Stream{StreamId
TVar TxFlow
IORef RxFlow
IORef (Skew RxStreamData)
IORef StreamState
MVar ()
Connection
RecvStreamQ
streamSyncFinTx :: MVar ()
streamReass :: IORef (Skew RxStreamData)
streamRecvQ :: RecvStreamQ
streamStateRx :: IORef StreamState
streamStateTx :: IORef StreamState
streamFlowRx :: IORef RxFlow
streamFlowTx :: TVar TxFlow
streamConnection :: Connection
streamId :: StreamId
streamSyncFinTx :: Stream -> MVar ()
streamReass :: Stream -> IORef (Skew RxStreamData)
streamRecvQ :: Stream -> RecvStreamQ
streamStateRx :: Stream -> IORef StreamState
streamStateTx :: Stream -> IORef StreamState
streamFlowRx :: Stream -> IORef RxFlow
streamFlowTx :: Stream -> TVar TxFlow
streamConnection :: Stream -> Connection
streamId :: Stream -> StreamId
..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a
atomically forall a b. (a -> b) -> a -> b
$ forall a. TQueue a -> STM (Maybe a)
tryReadTQueue forall a b. (a -> b) -> a -> b
$ RecvStreamQ -> TQueue ByteString
recvStreamQ RecvStreamQ
streamRecvQ