Merge branch 'ardsrk-master'
This commit is contained in:
commit
ea893c09d3
36
README.md
36
README.md
@ -303,7 +303,41 @@ See the `adapters/` directory for bindings to *libev* and *libevent*.
|
|||||||
|
|
||||||
## Reply parsing API
|
## Reply parsing API
|
||||||
|
|
||||||
To be done.
|
Hiredis comes with a reply parsing API that makes it easy for writing higher
|
||||||
|
level language bindings.
|
||||||
|
|
||||||
|
The reply parsing API consists of the following functions:
|
||||||
|
|
||||||
|
redisReader *redisReaderCreate(void);
|
||||||
|
void redisReaderFree(redisReader *reader);
|
||||||
|
int redisReaderFeed(redisReader *reader, const char *buf, size_t len);
|
||||||
|
int redisReaderGetReply(redisReader *reader, void **reply);
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
The function `redisReaderCreate` creates a `redisReader` structure that holds a
|
||||||
|
buffer with unparsed data and state for the protocol parser.
|
||||||
|
|
||||||
|
Incoming data -- most likely from a socket -- can be placed in the internal
|
||||||
|
buffer of the `redisReader` using `redisReaderFeed`. This function will make a
|
||||||
|
copy of the buffer pointed to by `buf` for `len` bytes. This data is parsed
|
||||||
|
when `redisReaderGetReply` is called. This function returns an integer status
|
||||||
|
and a reply object (as described above) via `void **reply`. The returned status
|
||||||
|
can be either `REDIS_OK` or `REDIS_ERR`, where the latter means something went
|
||||||
|
wrong (either a protocol error, or an out of memory error).
|
||||||
|
|
||||||
|
### Customizing replies
|
||||||
|
|
||||||
|
The function `redisReaderGetReply` creates `redisReply` and makes the function
|
||||||
|
argument `reply` point to the created `redisReply` variable. For instance, if
|
||||||
|
the response of type `REDIS_REPLY_STATUS` then the `str` field of `redisReply`
|
||||||
|
will hold the status as a vanilla C string. However, the functions that are
|
||||||
|
responsible for creating instances of the `redisReply` can be customized by
|
||||||
|
setting the `fn` field on the `redisReader` struct. This should be done
|
||||||
|
immediately after creating the `redisReader`.
|
||||||
|
|
||||||
|
For example, [hiredis-rb](https://github.com/pietern/hiredis-rb/blob/master/ext/hiredis_ext/reader.c)
|
||||||
|
uses customized reply object functions to create Ruby objects.
|
||||||
|
|
||||||
## AUTHORS
|
## AUTHORS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user