blob: 7c6677485954f7c87a500d3f952af4d0a160e325 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "utils.h"
#include <pybind11/pybind11.h>
namespace py = pybind11;
Message Reader_readNext(Reader& reader) {
return waitForAsyncValue<Message>([&](ReadNextCallback callback) { reader.readNextAsync(callback); });
}
Message Reader_readNextTimeout(Reader& reader, int timeoutMs) {
Message msg;
Result res;
Py_BEGIN_ALLOW_THREADS res = reader.readNext(msg, timeoutMs);
Py_END_ALLOW_THREADS
CHECK_RESULT(res);
return msg;
}
bool Reader_hasMessageAvailable(Reader& reader) {
return waitForAsyncValue<bool>(
[&](HasMessageAvailableCallback callback) { reader.hasMessageAvailableAsync(callback); });
}
void Reader_close(Reader& reader) {
waitForAsyncResult([&](ResultCallback callback) { reader.closeAsync(callback); });
}
void Reader_seek(Reader& reader, const MessageId& msgId) {
waitForAsyncResult([&](ResultCallback callback) { reader.seekAsync(msgId, callback); });
}
void Reader_seek_timestamp(Reader& reader, uint64_t timestamp) {
waitForAsyncResult([&](ResultCallback callback) { reader.seekAsync(timestamp, callback); });
}
bool Reader_is_connected(Reader& reader) { return reader.isConnected(); }
void export_reader(py::module_& m) {
using namespace py;
class_<Reader>(m, "Reader")
.def("topic", &Reader::getTopic, return_value_policy::copy)
.def("read_next", &Reader_readNext)
.def("read_next", &Reader_readNextTimeout)
.def("has_message_available", &Reader_hasMessageAvailable)
.def("close", &Reader_close)
.def("seek", &Reader_seek)
.def("seek", &Reader_seek_timestamp)
.def("is_connected", &Reader_is_connected);
}