1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

kafka refine array, to decode and create object.

This commit is contained in:
winlin 2015-10-19 13:55:53 +08:00
parent c4862878d1
commit 493d282255
3 changed files with 81 additions and 13 deletions

View file

@ -30,6 +30,7 @@ using namespace std;
#include <srs_core_autofree.hpp>
#include <srs_kernel_log.hpp>
#include <srs_protocol_io.hpp>
#include <srs_protocol_stream.hpp>
#ifdef SRS_AUTO_KAFKA
@ -682,10 +683,12 @@ SrsKafkaApiKey SrsKafkaCorrelationPool::get(int32_t correlation_id)
SrsKafkaProtocol::SrsKafkaProtocol(ISrsProtocolReaderWriter* io)
{
skt = io;
reader = new SrsFastStream();
}
SrsKafkaProtocol::~SrsKafkaProtocol()
{
srs_freep(reader);
}
int SrsKafkaProtocol::send_and_free_message(SrsKafkaRequest* msg)
@ -733,6 +736,36 @@ int SrsKafkaProtocol::send_and_free_message(SrsKafkaRequest* msg)
return ret;
}
int SrsKafkaProtocol::recv_message(SrsKafkaResponse** pmsg)
{
*pmsg = NULL;
int ret = ERROR_SUCCESS;
SrsKafkaResponseHeader header;
while (reader->size() < header.size()) {
if ((ret = reader->grow(skt, header.size())) != ERROR_SUCCESS) {
srs_error("kafka recv message failed. ret=%d", ret);
return ret;
}
}
SrsBuffer buffer;
if ((ret = buffer.initialize(reader->bytes(), reader->size())) != ERROR_SUCCESS) {
return ret;
}
SrsBuffer* buf = &buffer;
if ((ret = header.decode(buf)) != ERROR_SUCCESS) {
srs_error("kafka decode response header failed. ret=%d", ret);
return ret;
}
// TODO: FIXME: decode message.
return ret;
}
SrsKafkaClient::SrsKafkaClient(ISrsProtocolReaderWriter* io)
{
protocol = new SrsKafkaProtocol(io);
@ -756,6 +789,13 @@ int SrsKafkaClient::fetch_metadata(string topic)
return ret;
}
SrsKafkaResponse* res = NULL;
if ((ret = protocol->recv_message(&res)) != ERROR_SUCCESS) {
srs_error("kafka recv response failed. ret=%d", ret);
return ret;
}
SrsAutoFree(SrsKafkaResponse, res);
// TODO: FIXME: implements it.
return ret;