/* * node-rdkafka - Node.js wrapper for RdKafka C/C++ library * * Copyright (c) 2016 Blizzard Entertainment * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE.txt file for details. */ #ifndef SRC_KAFKA_CONSUMER_H_ #define SRC_KAFKA_CONSUMER_H_ #include #include #include #include #include #include "rdkafkacpp.h" #include "src/common.h" #include "src/connection.h" #include "src/callbacks.h" namespace NodeKafka { /** * @brief KafkaConsumer v8 wrapped object. * * Specializes the connection to wrap a consumer object through compositional * inheritence. Establishes its prototype in node through `Init` * * @sa RdKafka::Handle * @sa NodeKafka::Client */ class KafkaConsumer : public Connection { friend class Producer; public: static void Init(v8::Local); static v8::Local NewInstance(v8::Local); Baton Connect(); Baton Disconnect(); Baton Subscription(); Baton Unsubscribe(); bool IsSubscribed(); Baton Pause(std::vector &); Baton Resume(std::vector &); // Asynchronous commit events Baton Commit(std::vector); Baton Commit(RdKafka::TopicPartition*); Baton Commit(); Baton OffsetsStore(std::vector &); Baton GetWatermarkOffsets(std::string, int32_t, int64_t*, int64_t*); // Synchronous commit events Baton CommitSync(std::vector); Baton CommitSync(RdKafka::TopicPartition*); Baton CommitSync(); Baton Committed(std::vector &, int timeout_ms); Baton Position(std::vector &); Baton RefreshAssignments(); bool HasAssignedPartitions(); int AssignedPartitionCount(); Baton Assign(std::vector); Baton Unassign(); Baton Seek(const RdKafka::TopicPartition &partition, int timeout_ms); std::string Name(); Baton Subscribe(std::vector); Baton Consume(int timeout_ms); void ActivateDispatchers(); void DeactivateDispatchers(); protected: static Nan::Persistent constructor; static void New(const Nan::FunctionCallbackInfo& info); KafkaConsumer(Conf *, Conf *); ~KafkaConsumer(); private: static void part_list_print(const std::vector&); std::vector m_partitions; int m_partition_cnt; bool m_is_subscribed = false; // Node methods static NAN_METHOD(NodeConnect); static NAN_METHOD(NodeSubscribe); static NAN_METHOD(NodeDisconnect); static NAN_METHOD(NodeAssign); static NAN_METHOD(NodeUnassign); static NAN_METHOD(NodeAssignments); static NAN_METHOD(NodeUnsubscribe); static NAN_METHOD(NodeCommit); static NAN_METHOD(NodeCommitSync); static NAN_METHOD(NodeOffsetsStore); static NAN_METHOD(NodeCommitted); static NAN_METHOD(NodePosition); static NAN_METHOD(NodeSubscription); static NAN_METHOD(NodeSeek); static NAN_METHOD(NodeGetWatermarkOffsets); static NAN_METHOD(NodeConsumeLoop); static NAN_METHOD(NodeConsume); static NAN_METHOD(NodePause); static NAN_METHOD(NodeResume); }; } // namespace NodeKafka #endif // SRC_KAFKA_CONSUMER_H_