2 #ifndef __ZMQ_NORM_ENGINE_HPP_INCLUDED__
3 #define __ZMQ_NORM_ENGINE_HPP_INCLUDED__
5 #if defined ZMQ_HAVE_NORM
7 #if defined(ZMQ_HAVE_WINDOWS) && defined(ZMQ_IOTHREAD_POLLER_USE_EPOLL)
8 #define ZMQ_USE_NORM_SOCKET_WRAPPER
26 class norm_engine_t
ZMQ_FINAL :
public io_object_t,
public i_engine
29 norm_engine_t (zmq::io_thread_t *parent_,
const options_t &
options_);
36 bool has_handshake_stage ()
ZMQ_FINAL {
return false; };
40 void plug (zmq::io_thread_t *io_thread_,
41 class session_base_t *session_)
ZMQ_FINAL;
67 void recv_data (NormObjectHandle
stream);
76 class NormRxStreamState
79 NormRxStreamState (NormObjectHandle normStream,
83 ~NormRxStreamState ();
85 NormObjectHandle GetStreamHandle ()
const {
return norm_stream; }
89 void SetRxReady (
bool state) { rx_ready = state; }
90 bool IsRxReady ()
const {
return rx_ready; }
92 void SetSync (
bool state) { in_sync = state; }
93 bool InSync ()
const {
return in_sync; }
97 char *AccessBuffer () {
return (
char *) (buffer_ptr + buffer_count); }
98 size_t GetBytesNeeded ()
const {
return buffer_size - buffer_count; }
99 void IncrementBufferCount (
size_t count) { buffer_count +=
count; }
100 msg_t *AccessMsg () {
return zmq_decoder->msg (); }
117 bool IsEmpty ()
const {
return NULL == head; }
124 Iterator (
const List &list);
125 NormRxStreamState *GetNextItem ();
128 NormRxStreamState *next_item;
130 friend class Iterator;
133 NormRxStreamState *head;
134 NormRxStreamState *tail;
140 List *AccessList () {
return list; }
144 NormObjectHandle norm_stream;
145 int64_t max_msg_size;
150 v2_decoder_t *zmq_decoder;
152 unsigned char *buffer_ptr;
156 NormRxStreamState *prev;
157 NormRxStreamState *
next;
158 NormRxStreamState::List *list;
162 const endpoint_uri_pair_t _empty_endpoint;
164 session_base_t *zmq_session;
166 NormInstanceHandle norm_instance;
167 handle_t norm_descriptor_handle;
168 NormSessionHandle norm_session;
173 v2_encoder_t zmq_encoder;
174 NormObjectHandle norm_tx_stream;
177 bool zmq_output_ready;
180 char tx_buffer[BUFFER_SIZE];
181 unsigned int tx_index;
186 bool zmq_input_ready;
187 NormRxStreamState::List
189 NormRxStreamState::List
191 NormRxStreamState::List
194 #ifdef ZMQ_USE_NORM_SOCKET_WRAPPER
197 DWORD wrapper_thread_id;
198 HANDLE wrapper_thread_handle;
204 #endif // ZMQ_HAVE_NORM
206 #endif // !__ZMQ_NORM_ENGINE_HPP_INCLUDED__