{-# LANGUAGE RecordWildCards #-} module Network.QUIC.Stream.Queue where import Control.Concurrent.STM import Data.ByteString (ByteString) import Network.QUIC.Stream.Types putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ Stream{StreamId MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState Connection RecvStreamQ streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () 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 ..} = STM () -> IO () forall a. STM a -> IO a atomically (STM () -> IO ()) -> (ByteString -> STM ()) -> ByteString -> IO () forall b c a. (b -> c) -> (a -> b) -> a -> c . TQueue ByteString -> ByteString -> STM () forall a. TQueue a -> a -> STM () writeTQueue (RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ) takeRecvStreamQ :: Stream -> IO ByteString takeRecvStreamQ :: Stream -> IO ByteString takeRecvStreamQ Stream{StreamId MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState 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 streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () ..} = STM ByteString -> IO ByteString forall a. STM a -> IO a atomically (STM ByteString -> IO ByteString) -> STM ByteString -> IO ByteString forall a b. (a -> b) -> a -> b $ TQueue ByteString -> STM ByteString forall a. TQueue a -> STM a readTQueue (TQueue ByteString -> STM ByteString) -> TQueue ByteString -> STM ByteString 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 MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState 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 streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () ..} = STM (Maybe ByteString) -> IO (Maybe ByteString) forall a. STM a -> IO a atomically (STM (Maybe ByteString) -> IO (Maybe ByteString)) -> STM (Maybe ByteString) -> IO (Maybe ByteString) forall a b. (a -> b) -> a -> b $ TQueue ByteString -> STM (Maybe ByteString) forall a. TQueue a -> STM (Maybe a) tryReadTQueue (TQueue ByteString -> STM (Maybe ByteString)) -> TQueue ByteString -> STM (Maybe ByteString) forall a b. (a -> b) -> a -> b $ RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ