Introduce protocol abstraction interfaces #22
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Introduce an interface
IMuninProtocolHandler
to abstract the implementation of the data exchange protocol between munin master and munin node.This PR creates a new namespace
Smdn.Net.MuninNode.Protocol
and introduces the interfacesIMuninProtocolHandlerFactory
andIMuninProtocolHandler
.The munin protocol handling that has been implemented in
NodeBase
will be moved and separated to a new classMuninProtocolHandler
that implementsIMuninProtocolHandler
.In addition, an interface
IMuninNodeProfile
will be introduced to reduce the consolidation betweenNodeBase
andIMuninProtocolHandler
.The outlines of the APIs to be introduced by this change are as follows:
This change will improve the independence, extensibility, testability, and maintainability of the protocol implementation.
At the same time, reorganize the code base to improve protocol handling in the future.
This PR also fixes race condition due to use of single
IBufferWriter
while sending response.Considerations
In this PR, the term
transaction
is used instead of the termsession
, following the example in the Munin's official document.In the future, the terminology used with names such as
INodeSessionCallback
needs to be consistent withtransaction
.