packages feed

second-transfer-0.10.0.1: hs-src/SecondTransfer/Http2/TransferTypes.hs

{-# LANGUAGE ExistentialQuantification, TemplateHaskell, DeriveDataTypeable, Rank2Types, OverloadedStrings #-}
module SecondTransfer.Http2.TransferTypes (
       SessionOutputPacket
     , SessionOutputCommand                             (..)
     , GlobalStreamId
     , SessionToFramerBlock                             (..)
     , OutputFrame
     , OutputDataFeed
     ) where

--import Control.Lens

--import qualified Network.HPACK                          as HP
import qualified Data.ByteString                        as B
import qualified Network.HTTP2                          as NH2
import           Control.Concurrent                     (MVar)

import SecondTransfer.MainLoop.CoherentWorker           (
                                                        Effect(..)
                                                        )



type OutputFrame = (NH2.EncodeInfo, NH2.FramePayload, Effect)

type GlobalStreamId = Int

-- | Commands that the sessions sends to the framer which concern the whole
--   session
data  SessionOutputCommand =
    -- Command sent to the framer to close the session as harshly as possible. The framer
    -- will pick its own last valid stream.
    CancelSession_SOC !NH2.ErrorCodeId
    -- Command sent to the framer to close the session specifying a specific last-stream.
    | SpecificTerminate_SOC !GlobalStreamId !NH2.ErrorCodeId
  deriving Show


type OutputDataFeed = B.ByteString


-- | Signals that the Session sends to the Framer concerning normal operation, including
--   high-priority data to send (in priority trains, already formatted), and a command to
--   start the output machinery for a new stream
data SessionToFramerBlock =
    Command_StFB         !SessionOutputCommand
  | PriorityTrain_StFB   [OutputFrame]
  | HeadersTrain_StFB (GlobalStreamId, [OutputFrame], Effect, MVar OutputDataFeed)
                      -- stream id, the headers of the response,
                       -- the effect provided by the worker, the mvar where data is put.
--  | StartDataOutput_StFB (GlobalStreamId, MVar DataAndEffect )  -- ^ An empty string shall signal end of data


type SessionOutputPacket = SessionToFramerBlock