2 #ifndef __ZMQ_NORM_ENGINE_HPP_INCLUDED__ 3 #define __ZMQ_NORM_ENGINE_HPP_INCLUDED__ 5 #if defined ZMQ_HAVE_NORM 20 class norm_engine_t :
public io_object_t,
public i_engine
27 int init(
const char* network_,
bool send,
bool recv);
33 class session_base_t *session_);
37 virtual void terminate ();
41 virtual void restart_input ();
45 virtual void restart_output ();
47 virtual void zap_msg_available () {};
57 void recv_data(NormObjectHandle stream);
60 enum {BUFFER_SIZE = 2048};
63 class NormRxStreamState
66 NormRxStreamState(NormObjectHandle normStream,
70 NormObjectHandle GetStreamHandle()
const 75 void SetRxReady(
bool state)
77 bool IsRxReady()
const 80 void SetSync(
bool state)
88 {
return (
char*)(buffer_ptr + buffer_count);}
89 size_t GetBytesNeeded()
const 90 {
return (buffer_size - buffer_count);}
91 void IncrementBufferCount(
size_t count)
92 {buffer_count += count;}
94 {
return zmq_decoder->msg();}
108 void Append(NormRxStreamState& item);
109 void Remove(NormRxStreamState& item);
112 {
return (NULL == head);}
119 Iterator(
const List& list);
120 NormRxStreamState* GetNextItem();
122 NormRxStreamState* next_item;
124 friend class Iterator;
127 NormRxStreamState* head;
128 NormRxStreamState* tail;
139 NormObjectHandle norm_stream;
140 int64_t max_msg_size;
143 v2_decoder_t* zmq_decoder;
145 unsigned char* buffer_ptr;
149 NormRxStreamState* prev;
150 NormRxStreamState* next;
151 NormRxStreamState::List* list;
155 session_base_t* zmq_session;
157 NormInstanceHandle norm_instance;
158 handle_t norm_descriptor_handle;
159 NormSessionHandle norm_session;
164 v2_encoder_t zmq_encoder;
165 NormObjectHandle norm_tx_stream;
168 bool zmq_output_ready;
171 char tx_buffer[BUFFER_SIZE];
172 unsigned int tx_index;
177 bool zmq_input_ready;
178 NormRxStreamState::List rx_pending_list;
179 NormRxStreamState::List rx_ready_list;
180 NormRxStreamState::List msg_ready_list;
186 #endif // ZMQ_HAVE_NORM 188 #endif // !__ZMQ_NORM_ENGINE_HPP_INCLUDED__