-------------------------------------------------------------------------------
-- |
-- Module     : Network/Mom/Patterns/Basic.hs
-- Copyright  : (c) Tobias Schoofs
-- License    : LGPL 
-- Stability  : experimental
-- Portability: non-portable
-- 
-- Basic communication patterns
-------------------------------------------------------------------------------
module Network.Mom.Patterns.Basic (

                -- * Basic communication patterns
                -- $basic

                -- * Client Server
                -- $cliser

                module Network.Mom.Patterns.Basic.Client,
                module Network.Mom.Patterns.Basic.Server,

                -- * Pub Sub
                -- $pubsub

                module Network.Mom.Patterns.Basic.Publisher,
                module Network.Mom.Patterns.Basic.Subscriber,

                -- * Pipeline
                -- $pipe
                module Network.Mom.Patterns.Basic.Pusher,
                module Network.Mom.Patterns.Basic.Puller)

where

  import           Network.Mom.Patterns.Basic.Client
  import           Network.Mom.Patterns.Basic.Server
  import           Network.Mom.Patterns.Basic.Publisher
  import           Network.Mom.Patterns.Basic.Subscriber
  import           Network.Mom.Patterns.Basic.Pusher
  import           Network.Mom.Patterns.Basic.Puller

  {- $basic
      The Basic module provides the basic communication patterns
      defined in the zeromq library.
      The Basic module is just a convenience reexport of 
      the single modules containing the patterns.
      The basic functionality is split into small modules,
      since usually one application module will only need
      one side of a communication pattern. For the case,
      an application needs several patterns at the same location,
      the basic module eases life providing a single import
      for all patterns.
  -}

  {- $cliser
     Clients request a service from a server.
     When a server receives a client request,
     it sends a response to this client.
     This implies that clients have to start the communication
     by sending a request.
     Usually, many clients connect to one server.
  -}

  {- $pubsub
     Publishers issue data under some topic,
     to which interested parties can subscribe.
     Subscribers do not need to request data explicitly,
     they receive the newest updates when available,
     once they have subscribed to the topic.
     Usually, many subscribers connect to one publisher.
  -}

  {- $pipe
     Pushers and pullers form a pipeline
     to send work packages downstream;
     pushers can only send data,
     which represent the work to be done,
     pullers can only receive data.
     Usually, the pusher binds the address,
     to which many pullers connect.
  -}