-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathclient_context.hpp
43 lines (33 loc) · 1002 Bytes
/
client_context.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef HAWKTRACER_PYTHON_CLIENT_CONTEXT_HPP
#define HAWKTRACER_PYTHON_CLIENT_CONTEXT_HPP
#include <Python.h>
#include "hawktracer/parser/event.hpp"
#include "hawktracer/parser/klass_register.hpp"
#include "hawktracer/parser/protocol_reader.hpp"
#include <mutex>
#include <queue>
namespace HawkTracer
{
namespace Python
{
class Context
{
public:
Context(std::unique_ptr<parser::Stream> stream, PyObject* on_new_event);
~Context();
void start() { _reader.start(); }
void stop() { _reader.stop(); }
PyObject* poll_event();
bool eos() { return _reader.eos(); }
void wait_for_complete() { _reader.wait_for_complete(); }
private:
void _trigger_callback(const parser::Event& event);
std::mutex _events_mtx;
std::queue<parser::Event> _events;
parser::KlassRegister _klass_register;
parser::ProtocolReader _reader;
PyObject* _on_new_event = nullptr;
};
} // namespace Python
} // namespace HawkTracer
#endif // HAWKTRACER_PYTHON_CLIENT_CONTEXT_HPP