Releases: Dtronix/DtronixMessageQueue
DtronixMessageQueue 1.2 Released
Change Highlights
- TcpSocket
- Breaking Change: Removed Port configuration. Renamed Ip configuration to Address. Port is integrated into the Address. "IP:PORT".
- Renamed Socket classes to TcpSocket.
- All TCP sockets now create an encrypted channel before sending any MQ data. Data is transformed via AES-256 and the private key is generated via a ECDiffieHellmanCng class. MAC to be added at a later time.
- TcpSocketSession.Send now contains a fourth parameter specifying if the data should be padded to a 16bit alignment. Send always transports all data passed in16 bytes blocks. If the last block would not fill 16 bytes, it is then buffered for the next send. The padding parameter will take the 16 byte block buffer, pad the end and then the buffer will be sent. Useful if you know you are sending a lot of data in a row and only want to pad once at the end.
- All TcpSocket send packets contain a header with a type, (optional) additional header information (such as body length or close reason).
- Buffer manager is now used to generate transformation buffers.
- MessageQueue
- Closing is now handled by the TcpSocket instead of the MQ.
- RPC
- Breaking Change: Removed CancellationToken from the acceptable passed parameters. This change has come about by forcing each session to execute all calls sequentially as opposed to all at the same time.
- All RPC calls are now executed sequentially on a ActionProcessor thread as opposed to the TPL. If there are long running methods, the body should be converted to a task to be executed on a TPL thread.
- General
- Breaking Change: Updated all projects to .net 4.6 to include new security classes.
- Updated ProtoBuf-net to version 2.3.13
- BufferManager now provides ArraySegments instead of SocketAsyncEventArgs.
- Created MemoryQueueStream used to queue passed byte arrays and read them out to a buffer.
- MqFrameBuilder now utilizes the MemoryQueueStream as opposed to MemoryStream.
- Changed testing suite to Nunit.
8772920 - Renamed tests to more reflect their actual contents. BREAKING CHANGE: Removed logic for RPC method cancellation.
695022f - Updated protobuf package. Changed RPC processing to be sequential and to run on dedicated threads instead of the thread pool. TODO: Fix broken tests.
2250aeb - Renamed PlainCryptoTransform to BlockCopyCryptoTransform.
8695ddb - Added documentation to the PainCryptoTransform. Added additional documentation for the TcpSocketSession.
5e6ccfc - Adding documentation to TcpSocketSession. TcpSocketSession.Send now contains a parameter to specify if the data should be padded to be aligned on 16 bytes.
2c38313 - Added comparison of AES encryption speeds vs Buffer.BlockCopy.
97b92d3 - Added reset method to set all header values to default. If the session was closed during the reading process, it will now no longer go back to reading after. Reset the header after reading the complete encryption key. Fixed all tests.
9de5df5 - Moved securing process to use headers. Temporarily removed version number from the negotiation. Removed debugging code from TransformDataBuffer. Simplified sending headers and bodies with SendWithHeader method. Removed several unused methods.
7dcbc3a - Separated BufferManager to not be dependent upon SocketAsyncEventArgs. Changed AsyncManager, OutboxProcessor & InboxProcessor to private fields. Sessions now use a pre-made buffer for encryption transformations on receiving data.
75e14ec - Relocated CloseReason into TcpSocket directory.
3076f2c - Removed unused code. ToDo: Relocate existing close code to tcp records.
6561c24 - Updated packages for new versions of protobuf & nunit.
c6360a2 - Initial work to change from RSA to DH key setup. TODO: Fix code for tests.
7c5570f - Fixed issue with sockets overflowing their buffers. Restored performance testing suites.
a01ff29 - Added automatic padding to the end of each packet. Started work on unifying SendReceiveBuffer size.
ee43b2a - Started documentation of the secured transport.
f68c971 - Work to reduce the amount of required padding/flushes.
77a7fe9 - Completed first iteration of sending and receiving encrypted data. Changed all data to be encrypted over the transport instead of just message data encryption. TODO: Change to use DH key generation.
8b7c168 - Work on debugging transport data loss.
6fc4a08 - Added headers for all outgoing packets. Work on reading incoming packets with the headers.
e45f64e - Fixed issue of malformed data on send/receive after AES encryption. Created dummy PlainCryptoTransform.cs to review transformations. Started separation of the encryption layer from the transport layer.
572a756 - Work to remove buffer copies.
fc9d051 - Completed basic Rsa -> Aes encryption channel. Working on AES implementation of encryption/decryption.
6428db5 - Updated all projects to .net 4.6 to include new security classes.
fd85b2e - Fixed tests IP address connection.
e6d7b62 - Fixed memory leak in the new MemoryQueueStream where retrieving the stream length would inadvertently copy the queue bytes. Added simple tests for the MemoryQueueStream.
758c6d8 - Removed running of tests for now on Mono.
c1e4b81 - Removed some tests from running on failing on mono, but succeeding on the target OS of windows.
cbdbac5 - Renamed Socket classes to TcpSocket since that is all it is designed to handle at this point. Migrated advancements from transport-protocol branch to master. Added MemoryQueueBufferStream to buffer the stream data without moving it to another buffer. Added new tools. Added testing of via travis. Translated all tests to nunit from xunit. Removed Closing and Connecting from valid states as it was complicating the process. Updated protobuf-net to 2.3.2. Removed Port configuration Renamed Ip configuration to Address. Port is integrated into the Address. "IP:PORT".
77aee32 - Set theme jekyll-theme-minimal
59ee013 - Updated nuget version.
DtronixMessageQueue 1.1 Released
Change Highlights
-
MessageQueue
- Removed TPL tasks as method of processing messages and replaced with ActionProcessor to handle processing of all messages.
- Prevented clients from making multiple concurrent connections on same client.
- Added logic to the Config.ConnectionTimeout config.
- SocketAsyncEventArgs now is created on demand for every new connection. Fixes bug for reused SocketAsyncEventArgs
- Added GUID as a base type in the MqFrame, MqMessageReader and MqMessageWriter.
-
RPC
- Removed AuthenticationSuccess. Now handled through Ready event.
- Added timeout for connections from RpcClient.
- Added a method invoker which creates IL code and creates a cached instance of the invoker.
-
General
- Reformatted code according to Microsoft standards.
603b245 - Added documentation to the MessageHandler class. When any MessageHandler throws on a call, the session is now terminated since it was unhanded due to invalid data sent. Added Guid to MqFrame as a type to read and write. Added Guid to MqMessageReader and MqMessageWriter. Added tests for new Guid methods.
3815640 - Added echo test. A message of set length is sent from client to server and back. Reports the total messages sent and the average response time.
62cccc8 - Added performance test to compare new method invocation. Performance tests now automatically generate .md markdown files.
ea492d8 - Rewrite of core RPC calls to allow for faster generated calls to RPC methods. Added method cache which creates a method invoker (IL) and attaches it to a cached object.
04ea18e - Updated the readme to remove UDP from an approved protocol... for now.
b67bc9f - Work on speeding up method invocation.
0d25ff9 - Added documentation. Cleaned up tests. Added some internal actions which can be called by the tests.
8c27545 - Updated performance tests and removed old results. Completed ActionProcessor. Added tests for ActionProcessor. Updated performance tests output. Added non-working console test runner to the tools directory. Updated documentation.
5ac47b3 - Started logic for adding threads.
488461c - Added logic for removal and transfer of actions to another active thread. Still not building.
225a08a - Added basic balancing to the processor based upon how many actions are registered. Added simple tests for balancing and removing of threads. Renamed QueueActionExecution to Queue and QueueOnce.
7772154 - Renamed SessionProcessor.cs to ActionProcessor.cs. Added documentation to the ActionProcessor. Added base for supervisor actions.
097a327 - Removed ref requirement for register/deregister. Limited number of queued actions to 1. Actions are registered now before the action can be invoked and the method is invoked via the GUID. ProcessActions are now created once and then queued accordingly.
019bf2f - Made processing threads all background. Added ability to pause & resume tests. Fixed issue with the memory timer throwing an exception when the window is closed.
f406776 - Fixed timeout error on client re-connections. Fixed code formatting. Passing all of GUIDs by reference.
30ac960 - Fixed bug with reconnecting clients.
8976b20 - Added separate processor for incoming and outgoing messages. Each client has two threads and each server has at least 2 threads. 1/2 of logical processors for incoming processing and 1/2 for outgoing messages. TODO: Add configuration for this inbound and outbound threads. Removed tabs from MqPerformanceTest.cs.
e24c70f - First iteration of adding a central session processor in lieu of using the TPL.
5ff3a1f - Added base semaphore to limit incoming buffer size. Added MqConfig.MaxQueuedInboundPackets configuration.
5ca7684 - Rework method of handling SocketAsyncEventArgs. SocketAsyncEventArgs are created on demand and disposed of after use. The buffers are reused.
2b54168 - DtronixMessageQueue.Tests.Performance back to the 1.0 version. Updated code for the new standards. Simplified throughput test.
0303fe8 - Fixed MqSession & SocketSession to send packets and throttle the messages sent to the configuration limit. Standardized the closing of the sockets on the session side.
335cc5e - Unified performance tests and added common code to the base classes. TODO: Work on bug with FrameBuilder where the frame buffer is overflowing.
bf77518 - Added property to return total message data size excluding headers. GUI Tests will now report the total data transferred and speed of the upload and download streams.
4165f96 - Added test for server stopping and starting again. Added test for client connecting after it has been closed. Fixed backlog. Rework of CI to ignore the WPF client.
04cd6e9 - Fixed issue when reaching max connections, new clients could not connect. Semaphore is removed from the new connections. Added tests for new features. Client will now be notified if that the connection has been closed before the connection process has been completed. Added helper method to create a new MqClient in the tests. BUGFIX: Fixed closing method on MqServer where it was removing the client from the list of connected clients ahead of the main removal procedure. Server and clients will now create MaxConnections + 1 number of buffers and socket async event args for the closing of newly connected clients. Added SocketCloseReason.ConnectionRefused to the valid disconnect reason. Performance test now displays live memory information.
edc252e - Mq performance test is now separated client from server. Added semaphore to the MqSession.Send to prevent the outbox queue filling up. Configurable from MqConfig.MaxQueuedOutgoingMessages.
f6024ae - Updated to the standard way of formatting .net code.
3963e0d - Fixed tests. Added ability for authentication timeouts from the client side.
32c14c1 - Prevented the client from making multiple connections while connecting. Moved the closed state set to before events are fired.
9e1ca3b - Removed events before pushing event args back to the stack.
a5ed2ab - Added functionality behind Config.ConnectionTimeout. All remote proxies no longer need to have instances of the interfaced class. They can now just specify the name of the remote service now with the interface. Corrected a few tests behaving improperly.
7908bcb - Removed AuthenticationSuccess. Now handled through the Ready event. Fixed bug where client would call the Ready event before the client was authenticated. Added test for this bug.
ac60352 - Clarification note about the RpcServerInfoDataContract.RequireAuthentication property. Fixed issue where sessions could not access the specified session type in the authentication process.
Dtronix Message Queue v1.0 Released
Change Highlights
- MessageQueue
- Removed all SmartThreadPool threads and transitioned to TPL tasks.
- MqMessageReader
- Added Position property to determine or set the position of the byte pointer in the reader.
- Added Skip() method to allow for skipping of portions of the stream.
- RPC
- Simplified method of authenticating clients.
- RPC sessions can now be authenticated before connections are established.
- AuthenticationResult is renamed to AuthenticationSuccess and failures are handled through the Closed event.
faf85d6 Removed all references to the SmartThreadPool.
e69d8d1 Added shalow and deep cloning of MqFrame and MqMessage. Completed RpcStream class. Added Rpc streaming tests. Started Rpc streaming parameters.
9049762 ByteTransport now notifies the message handler that it is ready for more data.
0b3827d Added MqFrame.ToMessage() to convert a frame into a message. Implementing methods to handle transportation of bytes.
cbdb53f Changed AuthenticationResult to AuthenticationSuccess. Authentication failure is now handled through the Closed session event. Updated all RPC calls to use MessageHandler SendHandlerMessage method. SendHandlerMessage now prefixes messages with a header frame and strips this frame when passing it to the handler action.
6b1dbc2 Reworked ResponseWait into ConcurrentDictionary. Moved waiting logic around.
33d806c Fixed issue with CreateRemoteWaitHandle which created a handle on the local list instead of the remote.
65f9313 Ported all waiting methods to a dedicated classes to be reused in stream reading.
055bf58 Rework of wait handles.
debbd84 Fix for hanging test.
e76d514 Relocated message handlers. Started work on RpcByteTransport.
d1001e7 Added RepeatAttribute for repeating Theories. Fixed timeout issue in client outout test.
c6cac1c Fixed bug with exception deserialization.
42d8b9a Added blocking tests.
5549773 Complete changeover to TPL tasks.
274e9bf Dependency on SmartThreadPool and used TPL Tasks.
a2accaf Named STP threads. Changed default number of RPC session threads to 5 to increase performance.
9c2cb4f Added tests for new MqMessageReader Skip method. Added MqMessageReader.Position setter and tests.
f2f737a Added byte skipping in MqMessageReader. Implemented in the Ppc methods.
31867d0 Checks added to ensure message is handled.
22b2c26 Moved message handling into separate class to separate session functionality.
7722fef Renamed SocketBase to SessionHandler. Simplified method of session creation.
6aa8144 Work to simplify session usage.
e352f54 Reordering internal way wait handles are held.
a6ba5dd Started work on streaming RPC data.
72bcabf Moved timeout functionality into the BaseSocket for servers and clients. When a server drops a client connection, the client will timeout. Tests added. Moved timeout configurations from MqConfig into SocketConfig.
b6cd8e3 Completed implementation of Rpc Authentication. Added new "Ready" event executed on worker thread for sessions to be executed after the session has been authenticated.
944130b Updated for wire descriptors
16a067a Fixed MqSession deleting the authentication frame failure before closing. Started protocol documentation.
4d1066f Added testing. First complete iteration of authentication events.
3da6df9 Committed in broken state. Completed logical flow of authentication of sessions.
4c96eaa Work on new Rpc authentication module.
39f7636 Allowed OnConnected and OnDisconnected to be overriden in sub-sessions. Added new disconnection reasons for authentication and authorization.
Dtronix Message Queue v0.9.1 Released
Change Highlights
- All sending and receiving processing occurs on the SmartThreadPool allowing for more control.
- MqPostmaster no longer is used.
- Hide session implementation details via explicit interface implementation.
- All configuration files are now used as a generic type in the session to allow for east of configuration usage.
- Completed Rpc documentation.
e2b6e53 - Removed postmaster and worker. ALl processing work is now done on the SmartThreadPool threads. Fixed issue #1 hopefully for good. Added configurations to limit the concurrent execution threads for the Rpc client & server.
385b67c - Implemented IProcessMqSession.
ae208c5 - Session processing has been internalized via explicit interface implementation.
0108201 - Migrated session setup to use explicit interface implementation. Made Frames private in MqMessage. Frames are accessed by using the MqMessage class directly. Fixed performance tests not setting up.
1f8ae73 - Renamed SessionConnectedEventArgs.cs to SessionEventArgs to be used in multiple places. Fixed tests hanging. Added new event on SocketBase called SessionSetup. Called before the session is connected but after initial setup.
5f8c537 - Attempt to add a generic config type to all of the classes to ease configuration usage.
bc3c824 - Added documentation. RpcSession and SerializationStore remaining.
Dtronix Message Queue v0.9 Released
Change Highlights
- Added simple RPC functionality.
- Remote proxy methods can return values, throw exceptions and be canceled via CancellationToken.
- Updated performance tester.
- Fixed issue of messages remaining in queue pending a new read/write. (Issue #1)
- Revamped MqPostmaster to now use SmartThreadPool instead of threads via MqWorker.
- MqWorker removed.
- Changed project layout to allow for more flexibility.
- Completely removed Nlog.
3b0ae5f - Added performance test for testing multiple clients across process boundaries.
9bbcf31 - Removed MqWorker.cs due to new reliance on
b2d5181 - Cleaned up code.
787d494 - Removed unnecessary usage of exception catching.
88e7e29 - Implemented remote invoke cancellation.
b45fcdc - Added new RpcMessageType for cancellation.
11b5ec1 - Started work on cancellation notification.
ce16625 - Testing using SmartThreadPool for threading of work items.
d819280 - Fixed tests. Rpc requests functioning correctly now.
b5d6a8f - Fixed test hanging.
ac5f408 - Replaced reset event with SemaphoreSlim
13cbe86 - Isolated socket from MQ implementation.
229d0bb - Updated nuspec for inclusion of Rpc system.
77055e6 - Combined the Rpc classes into the base Message queue system and removed associated projects.
2af8c77 - Added documentation. Started sub-threadding work on RPC calls.
072840e - Changed existing remote exception to a Data Contract and added a new RpcRemoteException class. Completed initial changeover to protobuf.
0f42224 - Fixed bug with MqMessageReader.NextFrame where the message position would not be updated. Added MqMessageReader.ReadToEnd to read remaining bytes in the message. Added Position and Length properties to MqMessageReader. Added tests for the new methods and properties. Removed redundant actions in EnsureBuffer. Now will only check and throw if there is not enough buffer space.
8311936 - Moved frame creation methods into Sessions to further break logic between the socket and the MqSessions.
6cc402c - Performance tests are now functioning. Finally fixed long standing bug for issue #1.
1572d82 - Fixed some compiler warnings.
7c897f9 - Added logging to test why client stops calling server proxy method.
16aee36 - Initial RPC Performance test complete.
08a8251 - Added config to control the length of time it takes an idle worker to timeout.
61af5b4 - Adding performance tests for PRC functionality.
871fbcb - Added tests. Testing performance.
a103457 - Migrated RPC project into MessageQueue solution. Created initial tests.
c8fc219 - Created override-able method to be invoked after setup has occurred on the session.
95ec972 - Fixed performance test. Changed IncomingMessageEventArgs to directly use the session instead of the super class.
7955b9f - Renamed CloseSession to just Close to match standard conventions.
cb6a2ac - Modified MqSession to be inherited to allow for session manipulation. Fixed tests.
Dtronix Message Queue v0.8 Released
Change Highlights
- SuperSocket dependency removed. All sockets now use standard socket events and methods.
- Removed Nlog dependency.
- Added MqMessageReader and MqMessageWriter to handle parsing and creating of messages.
- Session timeout functionality.
Changelog Highlights
46e82da - Timeout can now be disabled via the configurations. Updated default send/receive buffer size to 16KB. Timeout timer starts with the first client connection and ends with the last disconnected client.
e09cfc3 - Added documentation to all methods, properties and fields.
f582d61 - First implementation of the timeout functionality. Cleaned up unused usings. Added ping frame type. Empty body 1 byte frame. Added tests to FrameBuilder and Frame for Command and Ping frames and to ensure ping and command frames are ignored. Created wrapper to send frames directly to session. Added new abstract CreateFrame to allow for type specification. Updated performance tests. Tests are now performing as they were with SuperSocket.
173625a - Dispose threads instead of just stopping them.
e63a897 - Fixed server not using correct socket property to determine if it is running or not. Updated performance tests.
fe9e278 - First iteration of MqFrame refactoring to make the frame size dictated by the configurations. Added new class for MqServer and MqClient configurations. Added documentation throughout.
e73debb - Added back in original test to the performance tester. Updated readme and performance information.
95d2bb0 - Removed unused nuget package.
fc18a63 - Removed mailbox and merged functionality into MqSession. Fixed issues with the performance tester.
15127eb - Removed unused uncompiled files. Fixed bug with MqFrameBuilder where the Writer would now write 1 byte buffer values to the buffer.
10505d7 - Added robustness to MqFrameBuilder to handle larger than buffer packets.
a612dca - Server and client can now disconnect from each other.
75923ce - Re-implementation of the Socket base and Server. Working on client.
39bcd28 - Retrieved base files for SocketAsyncEventArgs. Trying to test again.
0b0ef8a - Completed re-write of MqMessageReader and MqMessageWriter. Reader and Writer now will use the specified encoding. Char writing overhauled to use encoding. Added overrides for char writing. Added tests.
3101359 - Added Ascii writing and reading methods directly to frames. Added frame tests for Ascii writing and reading.
548cba4 - Updated performance testers. Fixed issue with Postmaster not sizing dynamically.
224abaa - Completed first iteration of performance testing for multiple clients.
6db6a92 - Added MqSession property to IncomingMessageEventArgs. Started performance tests for multiple clients. Fixed issue with Postmaster creating endless outbox workers.
Dtronix Message Queue v0.5 Released
Initial release.