packages feed

continuum-0.1.0.0: src/Continuum/Client/Base.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}

module Continuum.Client.Base
       (module Continuum.Client.Base
        , module Continuum.Common.Types
        )
       where

import qualified Nanomsg as N
import           Data.Serialize (encode, decode)
import qualified Continuum.Common.Serialization as S
import           Continuum.Common.Types

data ContinuumClient = ContinuumClient { clientSocket :: N.Socket N.Bus }

connect :: String
           -> String
           -> IO ContinuumClient
connect host port = do
  socket <- N.socket N.Bus
  _      <- N.connect socket ("tcp://" ++ host ++ ":" ++ port)
  return ContinuumClient { clientSocket = socket }


executeQuery :: ContinuumClient
             -> Query
             -> IO (DbErrorMonad DbResult)
executeQuery client query = do
  let sock = (clientSocket client)
  _      <-  N.send sock (encode query)
  bs     <-  N.recv sock
  return $ (S.decodeDbResult bs)