22 #include <string_view>
44 template <
typename T,
typename Derived>
58 virtual std::unique_ptr<T>
build() = 0;
82 template <
typename U,
typename F>
102 template <
typename U,
typename F>
122 template <
typename U,
typename F>
142 template <
typename U,
typename F>
156 Derived&
use_line_framer(std::string_view delimiter =
"\n",
bool include_delimiter =
false,
157 size_t max_length = 65536) {
158 framer_ = std::make_unique<framer::LineFramer>(delimiter, include_delimiter, max_length);
159 return static_cast<Derived&
>(*this);
169 Derived&
use_packet_framer(
const std::vector<uint8_t>& start_pattern,
const std::vector<uint8_t>& end_pattern,
171 framer_ = std::make_unique<framer::PacketFramer>(start_pattern, end_pattern, max_length);
172 return static_cast<Derived&
>(*this);
182 return static_cast<Derived&
>(*this);
193 template <
typename U,
typename F>
Generic Builder interface for fluent API pattern.
BuilderInterface(BuilderInterface &&)=default
BuilderInterface & operator=(const BuilderInterface &)=default
Derived & on_connect(U *obj, F method)
Set connection handler callback using member function pointer.
std::unique_ptr< framer::IFramer > framer_
Derived & on_error(U *obj, F method)
Set error handler callback using member function pointer.
virtual Derived & on_error(std::function< void(const wrapper::ErrorContext &)> handler)=0
Set error handler callback.
Derived & use_packet_framer(const std::vector< uint8_t > &start_pattern, const std::vector< uint8_t > &end_pattern, size_t max_length)
Use PacketFramer for message segmentation (binary pattern matching)
Derived & use_line_framer(std::string_view delimiter="\n", bool include_delimiter=false, size_t max_length=65536)
Use LineFramer for message segmentation (e.g., newline delimited)
virtual Derived & on_disconnect(std::function< void(const wrapper::ConnectionContext &)> handler)=0
Set disconnection handler callback.
BuilderInterface & operator=(BuilderInterface &&)=default
virtual ~BuilderInterface()=default
std::function< void(memory::ConstByteSpan)> on_message_
virtual Derived & on_data(std::function< void(const wrapper::MessageContext &)> handler)=0
Set data handler callback.
BuilderInterface()=default
Derived & on_message(U *obj, F method)
Set message handler callback using member function pointer.
Derived & on_data(U *obj, F method)
Set data handler callback using member function pointer.
Derived & on_disconnect(U *obj, F method)
Set disconnection handler callback using member function pointer.
virtual Derived & on_connect(std::function< void(const wrapper::ConnectionContext &)> handler)=0
Set connection handler callback.
Derived & on_message(std::function< void(memory::ConstByteSpan)> handler)
Set message handler callback (for framed messages)
virtual std::unique_ptr< T > build()=0
Build and return the configured product.
BuilderInterface(const BuilderInterface &)=default
virtual Derived & auto_manage(bool auto_manage=true)=0
Enable auto-manage functionality.
A C++17 compatible span-like class for safe array access.
Context for connection/disconnection events.
Context for error events.
Context for data/message related events.