pusher-http-haskell 2.0.0.3 → 2.1.0.0
raw patch · 4 files changed
+54/−2 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.Pusher: Event :: Text -> Text -> Text -> Maybe Text -> Event
+ Network.Pusher: [eventChannel] :: Event -> Text
+ Network.Pusher: [eventData] :: Event -> Text
+ Network.Pusher: [eventName] :: Event -> Text
+ Network.Pusher: [eventSocketId] :: Event -> Maybe Text
+ Network.Pusher: data Event
+ Network.Pusher: triggerBatch :: MonadIO m => Pusher -> [Event] -> m (Either PusherError ())
+ Network.Pusher.Internal: mkTriggerBatchRequest :: Pusher -> [Event] -> Word64 -> (RequestParams, Value)
Files
- pusher-http-haskell.cabal +1/−1
- src/Network/Pusher.hs +17/−0
- src/Network/Pusher/Data.hs +24/−0
- src/Network/Pusher/Internal.hs +12/−1
pusher-http-haskell.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: pusher-http-haskell-version: 2.0.0.3+version: 2.1.0.0 license: MIT license-file: LICENSE copyright: (c) Will Sewell, 2016
src/Network/Pusher.hs view
@@ -64,7 +64,11 @@ -- ** Trigger events trigger,+ triggerBatch, + -- *** Event type for 'triggerBatch'+ Event (..),+ -- ** Channel queries channels, channel,@@ -99,6 +103,7 @@ import qualified Data.Text as T import Network.Pusher.Data ( Address (..),+ Event (..), Pusher (..), Settings (..), Token (..),@@ -146,6 +151,18 @@ (requestParams, requestBody) <- Pusher.mkTriggerRequest pusher chans event dat socketId <$> getSystemTimeSeconds+ liftIO $ HTTP.post (pConnectionManager pusher) requestParams requestBody++-- | Trigger multiple events.+triggerBatch ::+ MonadIO m =>+ Pusher ->+ -- | The list of events to trigger.+ [Event] ->+ m (Either PusherError ())+triggerBatch pusher events = do+ (requestParams, requestBody) <-+ Pusher.mkTriggerBatchRequest pusher events <$> getSystemTimeSeconds liftIO $ HTTP.post (pConnectionManager pusher) requestParams requestBody -- | Query a list of channels for information.
src/Network/Pusher/Data.hs view
@@ -13,6 +13,7 @@ Pusher (..), newPusher, newPusherWithConnManager,+ Event (..), ) where @@ -20,6 +21,8 @@ import Data.Aeson ((.:), (.:?)) import qualified Data.Aeson as A import qualified Data.ByteString as B+import Data.Maybe (maybeToList)+import qualified Data.Text as T import Data.Text.Encoding (encodeUtf8) import Data.Word (Word16, Word32) import Network.HTTP.Client (Manager)@@ -142,3 +145,24 @@ pToken = pusherToken settings, pConnectionManager = connectionManager }++data Event+ = Event+ { -- | Channel to trigger on.+ eventChannel :: T.Text,+ -- | Event name.+ eventName :: T.Text,+ -- | Event data. Often encoded JSON.+ eventData :: T.Text,+ -- | An optional socket ID of a connection you wish to exclude.+ eventSocketId :: Maybe T.Text+ }++instance A.ToJSON Event where+ toJSON (Event channel name dat socketId) =+ A.object $+ [ ("name", A.String name),+ ("channel", A.String channel),+ ("data", A.String dat)+ ]+ ++ maybeToList (fmap (\sID -> ("socket_id", A.String sID)) socketId)
src/Network/Pusher/Internal.hs view
@@ -7,6 +7,7 @@ -- Stability : stable module Network.Pusher.Internal ( mkTriggerRequest,+ mkTriggerBatchRequest, mkChannelsRequest, mkChannelRequest, mkUsersRequest,@@ -21,7 +22,7 @@ import Data.Text.Encoding (encodeUtf8) import Data.Word (Word64) import Network.HTTP.Types (Query)-import Network.Pusher.Data (Pusher (..))+import Network.Pusher.Data (Event, Pusher (..)) import Network.Pusher.Internal.Auth (makeQS) import Network.Pusher.Internal.HTTP ( RequestParams (RequestParams),@@ -50,6 +51,16 @@ ++ maybeToList (fmap (\sID -> ("socket_id", A.String sID)) socketId) bodyBS = BL.toStrict $ A.encode body in (mkPostRequest pusher "events" [] bodyBS timestamp, body)++mkTriggerBatchRequest ::+ Pusher ->+ [Event] ->+ Word64 ->+ (RequestParams, A.Value)+mkTriggerBatchRequest pusher events timestamp =+ let body = A.object [("batch", A.toJSON events)]+ bodyBS = BL.toStrict $ A.encode body+ in (mkPostRequest pusher "batch_events" [] bodyBS timestamp, body) mkChannelsRequest :: Pusher ->