mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
refine code for kakfa request/response, string/bytes.
This commit is contained in:
parent
8a4ec49064
commit
45755fd1e7
2 changed files with 99 additions and 14 deletions
|
@ -27,6 +27,7 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include <srs_kernel_error.hpp>
|
#include <srs_kernel_error.hpp>
|
||||||
|
#include <srs_core_autofree.hpp>
|
||||||
|
|
||||||
#ifdef SRS_AUTO_KAFKA
|
#ifdef SRS_AUTO_KAFKA
|
||||||
|
|
||||||
|
@ -36,6 +37,15 @@ SrsKafkaString::SrsKafkaString()
|
||||||
data = NULL;
|
data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsKafkaString::SrsKafkaString(string v)
|
||||||
|
{
|
||||||
|
size = (int16_t)v.length();
|
||||||
|
|
||||||
|
srs_assert(size > 0);
|
||||||
|
data = new char[size];
|
||||||
|
memcpy(data, v.data(), size);
|
||||||
|
}
|
||||||
|
|
||||||
SrsKafkaString::~SrsKafkaString()
|
SrsKafkaString::~SrsKafkaString()
|
||||||
{
|
{
|
||||||
srs_freep(data);
|
srs_freep(data);
|
||||||
|
@ -62,6 +72,15 @@ SrsKafkaBytes::SrsKafkaBytes()
|
||||||
data = NULL;
|
data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsKafkaBytes::SrsKafkaBytes(const char* v, int nb_v)
|
||||||
|
{
|
||||||
|
size = (int16_t)nb_v;
|
||||||
|
|
||||||
|
srs_assert(size > 0);
|
||||||
|
data = new char[size];
|
||||||
|
memcpy(data, v, size);
|
||||||
|
}
|
||||||
|
|
||||||
SrsKafkaBytes::~SrsKafkaBytes()
|
SrsKafkaBytes::~SrsKafkaBytes()
|
||||||
{
|
{
|
||||||
srs_freep(data);
|
srs_freep(data);
|
||||||
|
@ -175,7 +194,7 @@ int SrsKafkaResponseHeader::total_size()
|
||||||
return 4 + size;
|
return 4 + size;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsKafkaMessage::SrsKafkaMessage()
|
SrsKafkaRawMessage::SrsKafkaRawMessage()
|
||||||
{
|
{
|
||||||
offset = 0;
|
offset = 0;
|
||||||
message_size = 0;
|
message_size = 0;
|
||||||
|
@ -186,7 +205,7 @@ SrsKafkaMessage::SrsKafkaMessage()
|
||||||
value = new SrsKafkaBytes();
|
value = new SrsKafkaBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsKafkaMessage::~SrsKafkaMessage()
|
SrsKafkaRawMessage::~SrsKafkaRawMessage()
|
||||||
{
|
{
|
||||||
srs_freep(key);
|
srs_freep(key);
|
||||||
srs_freep(value);
|
srs_freep(value);
|
||||||
|
@ -198,14 +217,30 @@ SrsKafkaMessageSet::SrsKafkaMessageSet()
|
||||||
|
|
||||||
SrsKafkaMessageSet::~SrsKafkaMessageSet()
|
SrsKafkaMessageSet::~SrsKafkaMessageSet()
|
||||||
{
|
{
|
||||||
vector<SrsKafkaMessage*>::iterator it;
|
vector<SrsKafkaRawMessage*>::iterator it;
|
||||||
for (it = messages.begin(); it != messages.end(); ++it) {
|
for (it = messages.begin(); it != messages.end(); ++it) {
|
||||||
SrsKafkaMessage* message = *it;
|
SrsKafkaRawMessage* message = *it;
|
||||||
srs_freep(message);
|
srs_freep(message);
|
||||||
}
|
}
|
||||||
messages.clear();
|
messages.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsKafkaRequest::SrsKafkaRequest()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsKafkaRequest::~SrsKafkaRequest()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsKafkaResponse::SrsKafkaResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsKafkaResponse::~SrsKafkaResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
SrsKafkaTopicMetadataRequest::SrsKafkaTopicMetadataRequest()
|
SrsKafkaTopicMetadataRequest::SrsKafkaTopicMetadataRequest()
|
||||||
{
|
{
|
||||||
header.set_api_key(SrsKafkaApiKeyMetadataRequest);
|
header.set_api_key(SrsKafkaApiKeyMetadataRequest);
|
||||||
|
@ -215,6 +250,19 @@ SrsKafkaTopicMetadataRequest::~SrsKafkaTopicMetadataRequest()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsKafkaTopicMetadataRequest::add_topic(string topic)
|
||||||
|
{
|
||||||
|
topics.append(new SrsKafkaString(topic));
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsKafkaTopicMetadataResponse::SrsKafkaTopicMetadataResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsKafkaTopicMetadataResponse::~SrsKafkaTopicMetadataResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
SrsKafkaProtocol::SrsKafkaProtocol(ISrsProtocolReaderWriter* io)
|
SrsKafkaProtocol::SrsKafkaProtocol(ISrsProtocolReaderWriter* io)
|
||||||
{
|
{
|
||||||
skt = io;
|
skt = io;
|
||||||
|
@ -224,7 +272,7 @@ SrsKafkaProtocol::~SrsKafkaProtocol()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsKafkaProtocol::send_and_free_message(SrsKafkaMessage* msg)
|
int SrsKafkaProtocol::send_and_free_message(SrsKafkaRequest* msg)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
@ -247,6 +295,11 @@ int SrsKafkaClient::fetch_metadata(string topic)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
SrsKafkaTopicMetadataRequest* req = new SrsKafkaTopicMetadataRequest();
|
||||||
|
SrsAutoFree(SrsKafkaTopicMetadataRequest, req);
|
||||||
|
|
||||||
|
req->add_topic(topic);
|
||||||
|
|
||||||
// TODO: FIXME: implements it.
|
// TODO: FIXME: implements it.
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -64,6 +64,7 @@ private:
|
||||||
char* data;
|
char* data;
|
||||||
public:
|
public:
|
||||||
SrsKafkaString();
|
SrsKafkaString();
|
||||||
|
SrsKafkaString(std::string v);
|
||||||
virtual ~SrsKafkaString();
|
virtual ~SrsKafkaString();
|
||||||
public:
|
public:
|
||||||
virtual bool null();
|
virtual bool null();
|
||||||
|
@ -83,6 +84,7 @@ private:
|
||||||
char* data;
|
char* data;
|
||||||
public:
|
public:
|
||||||
SrsKafkaBytes();
|
SrsKafkaBytes();
|
||||||
|
SrsKafkaBytes(const char* v, int nb_v);
|
||||||
virtual ~SrsKafkaBytes();
|
virtual ~SrsKafkaBytes();
|
||||||
public:
|
public:
|
||||||
virtual bool null();
|
virtual bool null();
|
||||||
|
@ -269,7 +271,7 @@ public:
|
||||||
* the kafka message in message set.
|
* the kafka message in message set.
|
||||||
* @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Messagesets
|
* @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Messagesets
|
||||||
*/
|
*/
|
||||||
struct SrsKafkaMessage
|
struct SrsKafkaRawMessage
|
||||||
{
|
{
|
||||||
// metadata.
|
// metadata.
|
||||||
public:
|
public:
|
||||||
|
@ -313,8 +315,8 @@ public:
|
||||||
*/
|
*/
|
||||||
SrsKafkaBytes* value;
|
SrsKafkaBytes* value;
|
||||||
public:
|
public:
|
||||||
SrsKafkaMessage();
|
SrsKafkaRawMessage();
|
||||||
virtual ~SrsKafkaMessage();
|
virtual ~SrsKafkaRawMessage();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -324,12 +326,32 @@ public:
|
||||||
class SrsKafkaMessageSet
|
class SrsKafkaMessageSet
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::vector<SrsKafkaMessage*> messages;
|
std::vector<SrsKafkaRawMessage*> messages;
|
||||||
public:
|
public:
|
||||||
SrsKafkaMessageSet();
|
SrsKafkaMessageSet();
|
||||||
virtual ~SrsKafkaMessageSet();
|
virtual ~SrsKafkaMessageSet();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the kafka request message, for protocol to send.
|
||||||
|
*/
|
||||||
|
class SrsKafkaRequest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsKafkaRequest();
|
||||||
|
virtual ~SrsKafkaRequest();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the kafka response message, for protocol to recv.
|
||||||
|
*/
|
||||||
|
class SrsKafkaResponse
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsKafkaResponse();
|
||||||
|
virtual ~SrsKafkaResponse();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* request the metadata from broker.
|
* request the metadata from broker.
|
||||||
* This API answers the following questions:
|
* This API answers the following questions:
|
||||||
|
@ -344,20 +366,30 @@ public:
|
||||||
*
|
*
|
||||||
* @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-MetadataAPI
|
* @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-MetadataAPI
|
||||||
*/
|
*/
|
||||||
class SrsKafkaTopicMetadataRequest
|
class SrsKafkaTopicMetadataRequest : public SrsKafkaRequest
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsKafkaRequestHeader header;
|
SrsKafkaRequestHeader header;
|
||||||
SrsKafkaArray<SrsKafkaString*> request;
|
SrsKafkaArray<SrsKafkaString*> topics;
|
||||||
public:
|
public:
|
||||||
SrsKafkaTopicMetadataRequest();
|
SrsKafkaTopicMetadataRequest();
|
||||||
virtual ~SrsKafkaTopicMetadataRequest();
|
virtual ~SrsKafkaTopicMetadataRequest();
|
||||||
|
public:
|
||||||
|
virtual void add_topic(std::string topic);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsKafkaTopicMetadataResponse
|
/**
|
||||||
|
* response for the metadata request from broker.
|
||||||
|
* The response contains metadata for each partition,
|
||||||
|
* with partitions grouped together by topic. This
|
||||||
|
* metadata refers to brokers by their broker id.
|
||||||
|
* The brokers each have a host and port.
|
||||||
|
* @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-MetadataResponse
|
||||||
|
*/
|
||||||
|
class SrsKafkaTopicMetadataResponse : public SrsKafkaResponse
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsKafkaRequestHeader header;
|
SrsKafkaResponseHeader header;
|
||||||
public:
|
public:
|
||||||
SrsKafkaTopicMetadataResponse();
|
SrsKafkaTopicMetadataResponse();
|
||||||
virtual ~SrsKafkaTopicMetadataResponse();
|
virtual ~SrsKafkaTopicMetadataResponse();
|
||||||
|
@ -378,7 +410,7 @@ public:
|
||||||
* write the message to kafka server.
|
* write the message to kafka server.
|
||||||
* @param msg the msg to send. user must not free it again.
|
* @param msg the msg to send. user must not free it again.
|
||||||
*/
|
*/
|
||||||
virtual int send_and_free_message(SrsKafkaMessage* msg);
|
virtual int send_and_free_message(SrsKafkaRequest* msg);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue