packages feed

Deadpan-DDP 0.8.0.0 → 0.9.0.0

raw patch · 8 files changed

+49/−50 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.EJson: decodeByteString :: ByteString -> Maybe EJsonValue
+ Data.EJson: decodeString :: String -> Maybe EJsonValue
+ Data.EJson: decodeText :: Text -> Maybe EJsonValue
+ Web.DDP.Deadpan.DSL: fetchMessagesThenExit :: DeadpanApp a -> DeadpanApp a
- Web.DDP.Deadpan.DSL: body :: Lens (LookupItem a_ajDk) (LookupItem a_ajEj) a_ajDk a_ajEj
+ Web.DDP.Deadpan.DSL: body :: Lens (LookupItem a_ajFx) (LookupItem a_ajGw) a_ajFx a_ajGw
- Web.DDP.Deadpan.DSL: callbackSet :: Lens (AppState cb_ajEA) (AppState cb_ajG2) (Lookup cb_ajEA) (Lookup cb_ajG2)
+ Web.DDP.Deadpan.DSL: callbackSet :: Lens (AppState cb_ajGN) (AppState cb_ajIf) (Lookup cb_ajGN) (Lookup cb_ajIf)
- Web.DDP.Deadpan.DSL: collections :: Lens' (AppState cb_ajEA) EJsonValue
+ Web.DDP.Deadpan.DSL: collections :: Lens' (AppState cb_ajGN) EJsonValue
- Web.DDP.Deadpan.DSL: connection :: Lens' (AppState cb_ajEA) Connection
+ Web.DDP.Deadpan.DSL: connection :: Lens' (AppState cb_ajGN) Connection
- Web.DDP.Deadpan.DSL: deadpanApp :: Iso (DeadpanApp a_ajGt) (DeadpanApp a_ajKX) (ReaderT (TVar (AppState Callback)) IO a_ajGt) (ReaderT (TVar (AppState Callback)) IO a_ajKX)
+ Web.DDP.Deadpan.DSL: deadpanApp :: Iso (DeadpanApp a_ajIG) (DeadpanApp a_ajNa) (ReaderT (TVar (AppState Callback)) IO a_ajIG) (ReaderT (TVar (AppState Callback)) IO a_ajNa)
- Web.DDP.Deadpan.DSL: fetchMessages :: DeadpanApp ()
+ Web.DDP.Deadpan.DSL: fetchMessages :: DeadpanApp ThreadId
- Web.DDP.Deadpan.DSL: ident :: Lens' (LookupItem a_ajDk) GUID
+ Web.DDP.Deadpan.DSL: ident :: Lens' (LookupItem a_ajFx) GUID

Files

Deadpan-DDP.cabal view
@@ -1,5 +1,5 @@ name:                Deadpan-DDP-version:             0.8.0.0+version:             0.9.0.0 synopsis:            Write clients for Meteor's DDP Protocol description:         The Deadpan-DDP project includes a debugging-tool, as well as a general purpose library.                      .
changelog.md view
@@ -1,5 +1,9 @@ # Deadpan-DDP Change Log +## 0.9.0.0++* Fixed the exit error+ ## 0.8.0.0  * Made GUID newtype abstract to prevent abuse
src/Data/EJson.hs view
@@ -36,6 +36,10 @@      module Exports, +    decodeText,+    decodeString,+    decodeByteString,+     matches,      getInPath,@@ -66,9 +70,22 @@ import Data.Monoid            as Exports import Control.Lens           as Exports import Control.Monad.State (execState)-import Data.Text (Text())+import Data.Text           (Text())+import Data.Aeson          (decode)+import Data.EJson.Aeson()  import qualified Data.HashMap.Strict as HM+import qualified Data.ByteString.Lazy.Char8 as C8+import qualified Data.Text as T++decodeText :: Text -> Maybe EJsonValue+decodeText = decodeString . T.unpack++decodeString :: String -> Maybe EJsonValue+decodeString = decode . C8.pack++decodeByteString :: C8.ByteString -> Maybe EJsonValue+decodeByteString = decode  -- $setup -- >>> :set -XOverloadedStrings
src/Data/EJson/Aeson.hs view
@@ -30,4 +30,4 @@ --   take advantage of the Aeson functionality. -- -- This is not used internally.-instance ToJSON   EJsonValue where toJSON    = ejson2value+instance ToJSON EJsonValue where toJSON = ejson2value
src/Main.hs view
@@ -8,11 +8,8 @@ import System.Exit import Web.DDP.Deadpan import System.Environment-import Data.Aeson import Data.Maybe import Control.Concurrent.Chan-import Data.EJson.Aeson()-import qualified Data.ByteString.Lazy.Char8 as C8 import qualified System.Console.Haskeline   as R  main :: IO ()@@ -53,7 +50,7 @@  sendPossibleMessage :: String -> DeadpanApp () sendPossibleMessage msgStr = do-  let decoded = decode $ C8.pack msgStr+  let decoded = decodeString msgStr   case decoded of Just m  -> sendData m                   Nothing -> liftIO $ putStrLn "Invalid Message" 
src/Web/DDP/Deadpan.hs view
@@ -53,12 +53,12 @@ --   Does not respond to ping! -- runConnectClient :: Params -> DeadpanApp a -> IO a-runConnectClient params app = runBareClient params (fetchMessages >> connect >> app)+runConnectClient params app = runBareClient params (fetchMessagesThenExit $ connect >> app)  -- Same as runConnectClient above but allows specifying version -- runConnectClientVersion :: Params -> Version -> DeadpanApp a -> IO a-runConnectClientVersion params v app = runBareClient params (fetchMessages >> connectVersion v >> app)+runConnectClientVersion params v app = runBareClient params (fetchMessagesThenExit $ connectVersion v >> app)  -- | Run a DeadpanApp after registering a ping handler, then establishing a server conncetion. --
src/Web/DDP/Deadpan/Callbacks.hs view
@@ -137,41 +137,6 @@  -- Server -->> Client --- Server Data Subscriptions---- TODO--- serverDataNosub :: Callback--- serverDataNosub = undefined--- TODO--- serverDataAdded :: Callback--- serverDataAdded = undefined--- TODO--- serverDataChanged :: Callback--- serverDataChanged = undefined--- TODO--- serverDataRemoved :: Callback--- serverDataRemoved = undefined--- TODO--- serverDataReady :: Callback--- serverDataReady = undefined--- TODO--- serverDataAddedBefore :: Callback--- serverDataAddedBefore = undefined--- TODO--- serverDataMovedBefore :: Callback--- serverDataMovedBefore = undefined----- Server RPC---- TODO--- serverRPCResult :: Callback--- serverRPCResult  = undefined--- TODO--- serverRPCUpdated :: Callback--- serverRPCUpdated = undefined-- -- Server Errors  -- TODO
src/Web/DDP/Deadpan/DSL.hs view
@@ -222,17 +222,33 @@                                            , ("support", ejarray reverseVersions) ]  -- | Provides a way to fork a background thread running the app provided+-- fork :: DeadpanApp a -> DeadpanApp ThreadId fork app = do   st <- DeadpanApp ask   liftIO $ forkIO $ void $ runDeadpan app st -fetchMessages :: DeadpanApp ()-fetchMessages = void      $-                 fork     $-                  forever $ do message <- getServerMessage-                               as      <- getAppState-                               respondToMessage (_callbackSet as) message+-- | Runs fetchMessages and kills the thread when the supplied app finishes.+--+--   Note: Any DeadpanApp calls made after this one will not be able to+--   interact with server-sent messages.+--+fetchMessagesThenExit :: DeadpanApp a -> DeadpanApp a+fetchMessagesThenExit app = do tid    <- fetchMessages+                               result <- app+                               liftIO $ killThread tid+                               return result++-- | Continuously pull down messages from the server in a background thread and+--   respond to each message with the callback set.+--   Returns a ThreadId so that this can be killed explicitly before the program+--   exits in order to avoid the "recv: invalid argument (Bad file descriptor)"+--   error.+--+fetchMessages :: DeadpanApp ThreadId+fetchMessages = fork $ forever $ do message <- getServerMessage+                                    as      <- getAppState+                                    respondToMessage (_callbackSet as) message  getServerMessage :: DeadpanApp (Maybe EJsonValue) getServerMessage = getAppState >>= liftIO . getEJ . _connection