stomp-queue 0.2.0 → 0.2.1
raw patch · 6 files changed
+377/−350 lines, 6 files
Files
- Network/Mom/Stompl/Client/Queue.hs +17/−11
- Network/Mom/Stompl/Client/State.hs +79/−30
- changelog.md +93/−0
- license/lgpl-3.0.txt +0/−165
- license/lgpl-3.0ex.txt +185/−0
- stomp-queue.cabal +3/−144
Network/Mom/Stompl/Client/Queue.hs view
@@ -27,6 +27,7 @@ Factory.Con, F.Heart, Copt(..),+ EHandler, -- * Queues -- $stomp_queues Reader, Writer, @@ -399,10 +400,10 @@ me <- myThreadId -- connection owner now <- getCurrentTime -- heartbeat ch <- newChan -- sender- bracket (do addCon $ mkConnection cid host port - mx u p ci - vers beat ch - me now os+ bracket (do addCon $ (mkConnection cid host port + mx u p ci + vers beat ch + me now os) getCon cid) (\_ -> rmCon cid) $ \c -> withSender c ad ch $ do@@ -484,12 +485,15 @@ updCon cid c {conBrk = True} finally (act cid) (do c' <- getCon cid- -- wait for receipt on disconnect ----- unless (conWait c' <= 0) $ do+ unless (conWait c' <= 0) $ do -- wait for receipt rc <- mkUniqueRecc disconnect c' (show rc) addRec cid rc- waitCon cid rc (conWait c') `onException` rmRec cid rc)+ waitCon cid rc (conWait c') `onException` rmRec cid rc+ -- if we not have waited for a receipt,+ -- wait now for error handling to terminate+ when (conWait c' <= 0 && conWaitE c' > 0) $+ threadDelay $ ms (conWaitE c')) period = snd . conBeat ---------------------------------------------------------------------@@ -1478,10 +1482,12 @@ handleError :: Con -> F.Frame -> IO () handleError cid f = do c <- getCon cid- let r = if null (F.getReceipt f) then ""- else " (" ++ F.getReceipt f ++ ")" - let e = F.getMsg f ++ r ++ ": " ++ U.toString (F.getBody f)- throwToOwner c (BrokerException e) + case getEH c of + Just eh -> eh cid f+ Nothing -> let r | null (F.getReceipt f) = ""+ | otherwise = " (" ++ F.getReceipt f ++ ")"+ e = F.getMsg f ++ r ++ ": " ++ U.toString (F.getBody f)+ in throwToOwner c (BrokerException e) ----------------------------------------------------------------------- -- Handle Receipt Frame
Network/Mom/Stompl/Client/State.hs view
@@ -3,9 +3,11 @@ msgContent, numeric, ms, Connection(..), mkConnection, connected, getVersion, + EHandler,+ getEH, Copt(..), oHeartBeat, oMaxRecv,- oAuth, oCliId, oStomp, oTmo, oTLS,+ oAuth, oCliId, oStomp, oTmo, oTLS,oEH, Transaction(..), Topt(..), hasTopt, tmo, TxState(..),@@ -89,38 +91,48 @@ type Receipt = Fac.Rec ------------------------------------------------------------------------+ -- | Action executed when an Error Frame is received;+ -- the typical use case is logging the text of the Error Frame.+ ------------------------------------------------------------------------+ type EHandler = Fac.Con -> F.Frame -> IO ()++ ------------------------------------------------------------------------ -- Connection ------------------------------------------------------------------------ data Connection = Connection {- conId :: Fac.Con,- conAddr :: String, -- the broker's IP address- conPort :: Int, -- the broker's port- conMax :: Int, -- max receive- conUsr :: String, -- user- conPwd :: String, -- passcode- conCli :: String, -- client-id- conSrv :: String, -- server description- conSes :: String, -- session identifier (from broker)- conVers :: [F.Version], -- the accepted versions- -- the agreed version - -- after connect- conBeat :: F.Heart, -- the heart beat- conChn :: Chan F.Frame, -- sender channel+ conId :: Fac.Con, -- Con handle+ conAddr :: String, -- the broker's IP address+ conPort :: Int, -- the broker's port+ conMax :: Int, -- max receive+ conUsr :: String, -- user+ conPwd :: String, -- passcode+ conCli :: String, -- client-id+ conSrv :: String, -- server description+ conSes :: String, -- session identifier + conVers :: [F.Version], -- accepted versions+ conBeat :: F.Heart, -- the heart beat+ conChn :: Chan F.Frame, -- sender channel conBrk :: Bool,- conOwner :: ThreadId,- conHisBeat :: UTCTime,- conMyBeat :: UTCTime, - conWait :: Int,- conSubs :: [SubEntry],- conDests :: [DestEntry], - conThrds :: [ThreadEntry],- conErrs :: [F.Frame],- conRecs :: [Receipt],- conAcks :: [MsgId]}+ conOwner :: ThreadId, -- thread that created + -- the connection+ conEH :: Maybe EHandler, -- Error Handler+ conHisBeat :: UTCTime, -- broker's next beat+ conMyBeat :: UTCTime, -- our next beat+ conWait :: Int, -- wait for receipt+ -- before terminating+ conWaitE :: Int, -- wait on error handling+ conSubs :: [SubEntry], -- subscriptions+ conDests :: [DestEntry], -- destinations+ conThrds :: [ThreadEntry], -- threads with transactions+ conRecs :: [Receipt], -- expected receipts + conAcks :: [MsgId]} -- expected acks instance Eq Connection where c1 == c2 = conId c1 == conId c2 + -------------------------------------------------------------------------+ -- Make a connection. Quite ugly.+ ------------------------------------------------------------------------- mkConnection :: Fac.Con -> String -> Int -> Int -> String -> String -> String -> [F.Version] -> F.Heart -> @@ -128,7 +140,9 @@ UTCTime -> [Copt] -> Connection mkConnection cid host port mx usr pwd ci vs hs chn myself t os = Connection cid host port mx usr pwd ci "" "" vs hs chn False - myself t t (oWaitBroker os) [] [] [] [] [] []+ myself (oEH os) t t + (oWaitBroker os) + (oWaitError os) [] [] [] [] [] ------------------------------------------------------------------------- -- | Options passed to a connection@@ -149,6 +163,13 @@ -- it is advisable to use this option. OWaitBroker Int | + -- | Wait /n/ milliseconds + -- after the connection has been closed by the broker+ -- to give the library some time to process+ -- the error message (if one has been sent).+ -- + OWaitError Int |+ -- | The maximum size of TCP/IP packets. -- This option is currently ignored. -- Instead, 'Data.Conduit.Network' defines@@ -183,12 +204,21 @@ -- | 'TLSClientConfig' -- (see 'Data.Conduit.Network.TLS' for details) -- for TLS connections.- -- If the parameter is not given, + -- If the option is not given, -- a plain TCP/IP connection is used.- OTLS TLSClientConfig+ OTLS TLSClientConfig | + -- | Action to handle Error frames;+ -- if the option is not given,+ -- an exception is raised on arrival of an error frame.+ -- If it is given, one should also pass a value+ -- for OWaitError to give the error handler time+ -- to execute.+ OEH EHandler+ instance Show Copt where show (OWaitBroker i) = "OWaitBroker" ++ show i+ show (OWaitError i) = "OWaitError " ++ show i show (OMaxRecv i) = "OMaxRecv " ++ show i show (OHeartBeat h) = "OHeartBeat " ++ show h show (OAuth u p) = "OAuth " ++ u ++ "/" ++ p@@ -196,9 +226,11 @@ show OStomp = "OStomp" show (OTmo i) = "OTmo" ++ show i show (OTLS c) = "OTLS " ++ show (tlsClientUseTLS c)+ show (OEH _) = "OEHandler " instance Eq Copt where (OWaitBroker i1) == (OWaitBroker i2) = i1 == i2+ (OWaitError i1) == (OWaitError i2) = i1 == i2 (OMaxRecv i1) == (OMaxRecv i2) = i1 == i2 (OHeartBeat h1) == (OHeartBeat h2) = h1 == h2 (OAuth u1 p1) == (OAuth u2 p2) = u1 == u2 && p1 == p2@@ -206,6 +238,7 @@ (OTmo i1) == (OTmo i2) = i1 == i2 (OTLS c1) == (OTLS c2) = tlsClientUseTLS c1 && tlsClientUseTLS c2+ (OEH _) == (OEH _) = True OStomp == OStomp = True _ == _ = False @@ -214,6 +247,7 @@ ------------------------------------------------------------------------ is :: Copt -> Copt -> Bool is (OWaitBroker _) (OWaitBroker _) = True+ is (OWaitError _) (OWaitError _) = True is (OMaxRecv _) (OMaxRecv _) = True is (OHeartBeat _) (OHeartBeat _) = True is (OAuth _ _) (OAuth _ _) = True@@ -221,6 +255,7 @@ is (OStomp ) (OStomp ) = True is (OTmo _ ) (OTmo _ ) = True is (OTLS _ ) (OTLS _ ) = True+ is (OEH _ ) (OEH _ ) = True is _ _ = False noWait :: Int@@ -243,6 +278,11 @@ Just (OWaitBroker d) -> d _ -> noWait + oWaitError :: [Copt] -> Int+ oWaitError os = case find (is $ OWaitError 0) os of+ Just (OWaitError d) -> d+ _ -> noWait+ oMaxRecv :: [Copt] -> Int oMaxRecv os = case find (is $ OMaxRecv 0) os of Just (OMaxRecv i) -> i@@ -275,10 +315,16 @@ oTLS :: String -> Int -> [Copt] -> TLSClientConfig oTLS h p os = case find (is $ OTLS dcfg) os of- Just (OTLS cfg) -> cfg- _ -> dcfg+ Just (OTLS cfg) -> cfg+ _ -> dcfg where dcfg = (tlsClientConfig p $ B.pack h){tlsClientUseTLS=False} + oEH :: [Copt] -> Maybe EHandler+ oEH os = case find (is $ OEH deh) os of+ Just (OEH eh) -> Just eh+ _ -> Nothing+ where deh _ _ = return ()+ findCon :: Fac.Con -> [Connection] -> Maybe Connection findCon cid = find (\c -> conId c == cid) @@ -309,6 +355,9 @@ getVersion c = if null (conVers c) then defVersion else head $ conVers c++ getEH :: Connection -> Maybe EHandler+ getEH = conEH ------------------------------------------------------------------------ -- Sub, Dest and Thread Entry
+ changelog.md view
@@ -0,0 +1,93 @@+__0.2.0__ + Changes:++ - Low-level sockets were replaced by network-conduit-tls+ (Be aware that this change might introduce some+ subtle changes in behaviour concerning in particular + performance and connection handling)++ - OMaxRecv not used anymore++ - New Option OTLS for TLS connections++ - New Option OTmo to specify a connection timeout++__0.1.4__ + Changes:++ - New: destroyReader and destroyWriter++ - Patterns deprecated++__0.1.3__ + New Option for newWriter 'ONoContentLen'+++__0.1.2__ + Minor changes:++ - Dependency for stompl-0.1.1++ - Some more enquiries into potential mem leaks,+ but more to follow++__0.1.1__ + Dependency for bytestring 0.10++__0.1.0__ + Major changes:++ - Compliance with Stomp 1.2:++ - There are major changes in the frame format,+ please refer to the documentation of the + stompl package, version 0.1.0, there are important changes+ that may impact messages for older versions!++ - When generating an Ack frame,+ the *id* header is by default taken from the *ack* header+ in the corresponding Message frame.+ Should there be no *ack* header or if its value is empty,+ the value of the header *message-id* is taken.+ This behaviour complies with 1.2 + for brokers supporting this version,+ but also continues to work with 1.1 brokers.++ - It is now possible to send a Stomp frame+ to connect to a broker (the broker, of course,+ has to accept Stomp frames and process them correctly).+ There is a new Copt (*OStomp*) to support this feature.++__0.0.8__ + Client/Server on top of Queues.++__0.0.7__ + Fighting with hackagedb...++__0.0.6__ + Heartbeats caused a memory leak by creating + many Connection instances in the connection state list.+ The connections were lazily deleted, i.e. were+ not deleted at all.+ Connection state is now cleaned up by a strict delete.++__0.0.5__ + Major changes:++ - Underscore functions (*withConnection_*) removed; ++ - New *with* functions: *withWriter*, *withPair*;++ - New option for connection (ClientId);++ - Headers for broker-specific options can be passed to connection+ (this changes the *withConnection* type signature!)++__0.0.3__ + New interface writeAdHoc++__0.0.2__ + Minor corrections++__0.0.1__ + Initial release
− license/lgpl-3.0.txt
@@ -1,165 +0,0 @@- GNU LESSER GENERAL PUBLIC LICENSE- Version 3, 29 June 2007-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>- Everyone is permitted to copy and distribute verbatim copies- of this license document, but changing it is not allowed.--- This version of the GNU Lesser General Public License incorporates-the terms and conditions of version 3 of the GNU General Public-License, supplemented by the additional permissions listed below.-- 0. Additional Definitions.-- As used herein, "this License" refers to version 3 of the GNU Lesser-General Public License, and the "GNU GPL" refers to version 3 of the GNU-General Public License.-- "The Library" refers to a covered work governed by this License,-other than an Application or a Combined Work as defined below.-- An "Application" is any work that makes use of an interface provided-by the Library, but which is not otherwise based on the Library.-Defining a subclass of a class defined by the Library is deemed a mode-of using an interface provided by the Library.-- A "Combined Work" is a work produced by combining or linking an-Application with the Library. The particular version of the Library-with which the Combined Work was made is also called the "Linked-Version".-- The "Minimal Corresponding Source" for a Combined Work means the-Corresponding Source for the Combined Work, excluding any source code-for portions of the Combined Work that, considered in isolation, are-based on the Application, and not on the Linked Version.-- The "Corresponding Application Code" for a Combined Work means the-object code and/or source code for the Application, including any data-and utility programs needed for reproducing the Combined Work from the-Application, but excluding the System Libraries of the Combined Work.-- 1. Exception to Section 3 of the GNU GPL.-- You may convey a covered work under sections 3 and 4 of this License-without being bound by section 3 of the GNU GPL.-- 2. Conveying Modified Versions.-- If you modify a copy of the Library, and, in your modifications, a-facility refers to a function or data to be supplied by an Application-that uses the facility (other than as an argument passed when the-facility is invoked), then you may convey a copy of the modified-version:-- a) under this License, provided that you make a good faith effort to- ensure that, in the event an Application does not supply the- function or data, the facility still operates, and performs- whatever part of its purpose remains meaningful, or-- b) under the GNU GPL, with none of the additional permissions of- this License applicable to that copy.-- 3. Object Code Incorporating Material from Library Header Files.-- The object code form of an Application may incorporate material from-a header file that is part of the Library. You may convey such object-code under terms of your choice, provided that, if the incorporated-material is not limited to numerical parameters, data structure-layouts and accessors, or small macros, inline functions and templates-(ten or fewer lines in length), you do both of the following:-- a) Give prominent notice with each copy of the object code that the- Library is used in it and that the Library and its use are- covered by this License.-- b) Accompany the object code with a copy of the GNU GPL and this license- document.-- 4. Combined Works.-- You may convey a Combined Work under terms of your choice that,-taken together, effectively do not restrict modification of the-portions of the Library contained in the Combined Work and reverse-engineering for debugging such modifications, if you also do each of-the following:-- a) Give prominent notice with each copy of the Combined Work that- the Library is used in it and that the Library and its use are- covered by this License.-- b) Accompany the Combined Work with a copy of the GNU GPL and this license- document.-- c) For a Combined Work that displays copyright notices during- execution, include the copyright notice for the Library among- these notices, as well as a reference directing the user to the- copies of the GNU GPL and this license document.-- d) Do one of the following:-- 0) Convey the Minimal Corresponding Source under the terms of this- License, and the Corresponding Application Code in a form- suitable for, and under terms that permit, the user to- recombine or relink the Application with a modified version of- the Linked Version to produce a modified Combined Work, in the- manner specified by section 6 of the GNU GPL for conveying- Corresponding Source.-- 1) Use a suitable shared library mechanism for linking with the- Library. A suitable mechanism is one that (a) uses at run time- a copy of the Library already present on the user's computer- system, and (b) will operate properly with a modified version- of the Library that is interface-compatible with the Linked- Version.-- e) Provide Installation Information, but only if you would otherwise- be required to provide such information under section 6 of the- GNU GPL, and only to the extent that such information is- necessary to install and execute a modified version of the- Combined Work produced by recombining or relinking the- Application with a modified version of the Linked Version. (If- you use option 4d0, the Installation Information must accompany- the Minimal Corresponding Source and Corresponding Application- Code. If you use option 4d1, you must provide the Installation- Information in the manner specified by section 6 of the GNU GPL- for conveying Corresponding Source.)-- 5. Combined Libraries.-- You may place library facilities that are a work based on the-Library side by side in a single library together with other library-facilities that are not Applications and are not covered by this-License, and convey such a combined library under terms of your-choice, if you do both of the following:-- a) Accompany the combined library with a copy of the same work based- on the Library, uncombined with any other library facilities,- conveyed under the terms of this License.-- b) Give prominent notice with the combined library that part of it- is a work based on the Library, and explaining where to find the- accompanying uncombined form of the same work.-- 6. Revised Versions of the GNU Lesser General Public License.-- The Free Software Foundation may publish revised and/or new versions-of the GNU Lesser General Public License from time to time. Such new-versions will be similar in spirit to the present version, but may-differ in detail to address new problems or concerns.-- Each version is given a distinguishing version number. If the-Library as you received it specifies that a certain numbered version-of the GNU Lesser General Public License "or any later version"-applies to it, you have the option of following the terms and-conditions either of that published version or of any later version-published by the Free Software Foundation. If the Library as you-received it does not specify a version number of the GNU Lesser-General Public License, you may choose any version of the GNU Lesser-General Public License ever published by the Free Software Foundation.-- If the Library as you received it specifies that a proxy can decide-whether future versions of the GNU Lesser General Public License shall-apply, that proxy's public statement of acceptance of any version is-permanent authorization for you to choose that version for the-Library.
+ license/lgpl-3.0ex.txt view
@@ -0,0 +1,185 @@+These library and tools were written by and are copyrighted to+ (c) copyright 2011-2015 Tobias Schoofs ++The library is licensed under the terms of the GNU Lesser+General Public Licence (LGPL), which follows below,+with the special exception ("static linking exception"):++----+As a relaxation of clause 4 of the LGPL, the copyright holder +adds a third option under 4d)++2) Link the library statically. +----++This library and toolset is distributed in the hope that it will be+useful, but WITHOUT ANY WARRANTY; without even the implied warranty+of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+Licences for more details.+++ GNU LESSER GENERAL PUBLIC LICENSE+ Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.+++ This version of the GNU Lesser General Public License incorporates+the terms and conditions of version 3 of the GNU General Public+License, supplemented by the additional permissions listed below.++ 0. Additional Definitions.++ As used herein, "this License" refers to version 3 of the GNU Lesser+General Public License, and the "GNU GPL" refers to version 3 of the GNU+General Public License.++ "The Library" refers to a covered work governed by this License,+other than an Application or a Combined Work as defined below.++ An "Application" is any work that makes use of an interface provided+by the Library, but which is not otherwise based on the Library.+Defining a subclass of a class defined by the Library is deemed a mode+of using an interface provided by the Library.++ A "Combined Work" is a work produced by combining or linking an+Application with the Library. The particular version of the Library+with which the Combined Work was made is also called the "Linked+Version".++ The "Minimal Corresponding Source" for a Combined Work means the+Corresponding Source for the Combined Work, excluding any source code+for portions of the Combined Work that, considered in isolation, are+based on the Application, and not on the Linked Version.++ The "Corresponding Application Code" for a Combined Work means the+object code and/or source code for the Application, including any data+and utility programs needed for reproducing the Combined Work from the+Application, but excluding the System Libraries of the Combined Work.++ 1. Exception to Section 3 of the GNU GPL.++ You may convey a covered work under sections 3 and 4 of this License+without being bound by section 3 of the GNU GPL.++ 2. Conveying Modified Versions.++ If you modify a copy of the Library, and, in your modifications, a+facility refers to a function or data to be supplied by an Application+that uses the facility (other than as an argument passed when the+facility is invoked), then you may convey a copy of the modified+version:++ a) under this License, provided that you make a good faith effort to+ ensure that, in the event an Application does not supply the+ function or data, the facility still operates, and performs+ whatever part of its purpose remains meaningful, or++ b) under the GNU GPL, with none of the additional permissions of+ this License applicable to that copy.++ 3. Object Code Incorporating Material from Library Header Files.++ The object code form of an Application may incorporate material from+a header file that is part of the Library. You may convey such object+code under terms of your choice, provided that, if the incorporated+material is not limited to numerical parameters, data structure+layouts and accessors, or small macros, inline functions and templates+(ten or fewer lines in length), you do both of the following:++ a) Give prominent notice with each copy of the object code that the+ Library is used in it and that the Library and its use are+ covered by this License.++ b) Accompany the object code with a copy of the GNU GPL and this license+ document.++ 4. Combined Works.++ You may convey a Combined Work under terms of your choice that,+taken together, effectively do not restrict modification of the+portions of the Library contained in the Combined Work and reverse+engineering for debugging such modifications, if you also do each of+the following:++ a) Give prominent notice with each copy of the Combined Work that+ the Library is used in it and that the Library and its use are+ covered by this License.++ b) Accompany the Combined Work with a copy of the GNU GPL and this license+ document.++ c) For a Combined Work that displays copyright notices during+ execution, include the copyright notice for the Library among+ these notices, as well as a reference directing the user to the+ copies of the GNU GPL and this license document.++ d) Do one of the following:++ 0) Convey the Minimal Corresponding Source under the terms of this+ License, and the Corresponding Application Code in a form+ suitable for, and under terms that permit, the user to+ recombine or relink the Application with a modified version of+ the Linked Version to produce a modified Combined Work, in the+ manner specified by section 6 of the GNU GPL for conveying+ Corresponding Source.++ 1) Use a suitable shared library mechanism for linking with the+ Library. A suitable mechanism is one that (a) uses at run time+ a copy of the Library already present on the user's computer+ system, and (b) will operate properly with a modified version+ of the Library that is interface-compatible with the Linked+ Version.++ e) Provide Installation Information, but only if you would otherwise+ be required to provide such information under section 6 of the+ GNU GPL, and only to the extent that such information is+ necessary to install and execute a modified version of the+ Combined Work produced by recombining or relinking the+ Application with a modified version of the Linked Version. (If+ you use option 4d0, the Installation Information must accompany+ the Minimal Corresponding Source and Corresponding Application+ Code. If you use option 4d1, you must provide the Installation+ Information in the manner specified by section 6 of the GNU GPL+ for conveying Corresponding Source.)++ 5. Combined Libraries.++ You may place library facilities that are a work based on the+Library side by side in a single library together with other library+facilities that are not Applications and are not covered by this+License, and convey such a combined library under terms of your+choice, if you do both of the following:++ a) Accompany the combined library with a copy of the same work based+ on the Library, uncombined with any other library facilities,+ conveyed under the terms of this License.++ b) Give prominent notice with the combined library that part of it+ is a work based on the Library, and explaining where to find the+ accompanying uncombined form of the same work.++ 6. Revised Versions of the GNU Lesser General Public License.++ The Free Software Foundation may publish revised and/or new versions+of the GNU Lesser General Public License from time to time. Such new+versions will be similar in spirit to the present version, but may+differ in detail to address new problems or concerns.++ Each version is given a distinguishing version number. If the+Library as you received it specifies that a certain numbered version+of the GNU Lesser General Public License "or any later version"+applies to it, you have the option of following the terms and+conditions either of that published version or of any later version+published by the Free Software Foundation. If the Library as you+received it does not specify a version number of the GNU Lesser+General Public License, you may choose any version of the GNU Lesser+General Public License ever published by the Free Software Foundation.++ If the Library as you received it specifies that a proxy can decide+whether future versions of the GNU Lesser General Public License shall+apply, that proxy's public statement of acceptance of any version is+permanent authorization for you to choose that version for the+Library.
stomp-queue.cabal view
@@ -1,15 +1,16 @@ Name: stomp-queue-Version: 0.2.0+Version: 0.2.1 Cabal-Version: >= 1.8 Copyright: Copyright (c) Tobias Schoofs, 2011 - 2015 License: LGPL-license-file: license/lgpl-3.0.txt+license-file: license/lgpl-3.0ex.txt Author: Tobias Schoofs Maintainer: tobias dot schoofs at gmx dot net Homepage: http://github.com/toschoo/mom Category: Network, Message-oriented Middleware, Stomp, Client Build-Type: Simple Synopsis: Stompl Client Library +extra-source-files: changelog.md Description: The Stomp Protocol specifies message-oriented interoperability. Applications connect to a message broker to send (publish)@@ -33,148 +34,6 @@ on <http://github.com/toschoo/mom>. The Stomp specification can be found at <http://stomp.github.com>.-- .-- Release History:-- .-- [0.2.0] Changes:-- .-- - Low-level sockets were replaced by network-conduit-tls- (Be aware that this change might introduce some- subtle changes in behaviour concerning in particular - performance and connection handling)-- .-- - OMaxRecv not used anymore-- .-- - New Option OTLS for TLS connections-- .-- - New Option OTmo to specify a connection timeout-- .-- [0.1.4] Changes:-- . -- - New: destroyReader and destroyWriter- - .-- - Patterns deprecated-- .-- [0.1.3] New Option for newWriter 'ONoContentLen'-- .-- [0.1.2] Minor changes:-- .-- - Dependency for stompl-0.1.1-- .-- - Some more enquiries into potential mem leaks,- but more to follow-- .-- [0.1.1] Dependency for bytestring 0.10-- .-- [0.1.0] Major changes:-- .-- - Compliance with Stomp 1.2:-- .-- - There are major changes in the frame format,- please refer to the documentation of the - stompl package, version 0.1.0, there are important changes- that may impact messages for older versions!-- .-- - When generating an Ack frame,- the /id/ header is by default taken from the /ack/ header- in the corresponding Message frame.- Should there be no /ack/ header or if its value is empty,- the value of the header /message-id/ is taken.- This behaviour complies with 1.2 - for brokers supporting this version,- but also continues to work with 1.1 brokers.-- .-- - It is now possible to send a Stomp frame- to connect to a broker (the broker, of course,- has to accept Stomp frames and process them correctly).- There is a new Copt (/OStomp/) to support this feature.-- .-- [0.0.8] Client/Server on top of Queues.-- .-- [0.0.7] Fighting with hackagedb...-- .-- [0.0.6] Heartbeats caused a memory leak by creating - many Connection instances in the connection state list.- The connections were lazily deleted, /i.e./ were- not deleted at all.- Connection state is now cleaned up by a strict delete.-- .-- [0.0.5] Major changes:- - .-- - Underscore functions (/withConnection_/) removed; -- .-- - New /with*/ functions: /withWriter/, /withPair/;-- .-- - New option for connection (ClientId);-- .-- - Headers for broker-specific options can be passed to connection- (this changes the /withConnection/ type signature!)-- .-- [0.0.3] New interface writeAdHoc-- .-- [0.0.2] Minor corrections- - .-- [0.0.1] Initial release Library