libassa 3.5.1
|
CharInBuffer is a bucket for the character-based streams/messages. More...
#include <CharInBuffer.h>
Public Types | |
enum | state_t { start , waiting , complete , error } |
States: start, waiting, complete, error. More... | |
Public Member Functions | |
CharInBuffer (size_t size_, const string &delimiter_) | |
Constructor. | |
operator void * () const | |
Test the state of an object. | |
const char * | c_str () const |
Get the constant character pointer to the buffer. | |
size_t | length () const |
Bytes in the buffer so far. | |
size_t | size () const |
Bytes in the buffer so far. | |
void | reset () |
Discard all accumulated characters and be ready to receive a new message. | |
void | dump () const |
Write the state of an object to the log file. | |
state_t | state () const |
Report the current state of the object. | |
Private Member Functions | |
void | state (state_t new_state_) |
Go to the new state. | |
void | chop () |
Remove the delimiter from the end of the buffer. | |
Static Private Member Functions | |
static const char * | state_name (state_t state_) |
Report the state name. | |
Private Attributes | |
state_t | m_state |
Internal state of an object. | |
std::string | m_buffer |
Buffer to store the bytes received. | |
size_t | m_max_size |
Maximum allowable size (delimiter included) before overflow occurs. | |
std::string | m_delimiter |
Delimiter. Multibyte delimiter is allowed. | |
Friends | |
ASSA::Socket & | operator>> (ASSA::Socket &, ASSA::CharInBuffer &) |
Read bytes from Socket stream until either record delimiter is detected, or EOF occured, or Socket stream is exhausted. | |
CharInBuffer is a bucket for the character-based streams/messages.
It helps in reading, parsing, and storing record-oriented character streams from Socket stream asynchronously. The record terminator can be multibyte. The terminator is detected and removed from the bucket. When terminator is detected, the block of characters collected in the bucket is ready to be processed further by the application according to its communication protocol. If either Socket read() error is encountered, or an overflow occurs (number of characters read exceeds the maximum limit), the object goes into the error state and won't accept further input, unless reset.
Definition at line 44 of file CharInBuffer.h.
States: start, waiting, complete, error.
Enumerator | |
---|---|
start | start state |
waiting | incomplete record is in the buffer |
complete | matched end-of-record - full record |
error | overflow or Socket I/O error |
Definition at line 85 of file CharInBuffer.h.
Constructor.
size_ | Maximum expected size before buffer overflow |
delimiter_ | End-of-record character(s). Can be multi-byte. |
Definition at line 24 of file CharInBuffer.cpp.
References ASSA::CHARINBUF, error, m_delimiter, m_max_size, state(), trace_with_mask, and waiting.
Get the constant character pointer to the buffer.
Definition at line 66 of file CharInBuffer.h.
References m_buffer.
|
inlineprivate |
Remove the delimiter from the end of the buffer.
Definition at line 144 of file CharInBuffer.h.
References m_buffer, and m_delimiter.
void CharInBuffer::dump | ( | ) | const |
Write the state of an object to the log file.
Definition at line 50 of file CharInBuffer.cpp.
References ASSA::CHARINBUF, DL, ASSA::MemDump::dump_to_log(), m_buffer, m_delimiter, m_max_size, m_state, state_name(), and ASSA::TRACE.
|
inline |
|
inline |
Test the state of an object.
Definition at line 127 of file CharInBuffer.h.
|
inline |
|
inline |
|
inline |
Report the current state of the object.
Definition at line 93 of file CharInBuffer.h.
References m_state.
Referenced by CharInBuffer(), and reset().
Report the state name.
Definition at line 37 of file CharInBuffer.cpp.
References error.
Referenced by dump().
|
friend |
Read bytes from Socket stream until either record delimiter is detected, or EOF occured, or Socket stream is exhausted.
If match, bite off delimiter and set the state to complete. If not, continue reading till either there is no more characters to read, or Socket error (Fail or EOF), or buffer overflow. If overflow occurs, set the state to 'error' and terminate.
Definition at line 80 of file CharInBuffer.cpp.
|
private |
|
private |
Delimiter. Multibyte delimiter is allowed.
Definition at line 116 of file CharInBuffer.h.
Referenced by CharInBuffer(), chop(), and dump().
|
private |
Maximum allowable size (delimiter included) before overflow occurs.
Definition at line 113 of file CharInBuffer.h.
Referenced by CharInBuffer(), and dump().
|
private |
Internal state of an object.
Definition at line 107 of file CharInBuffer.h.