mirror of
https://gitlab.com/niansa/llama_any.git
synced 2025-03-06 20:48:27 +01:00
Fixed 'Result' type conflict and added missing include to SingleEvent.cpp
This commit is contained in:
parent
5fca6fa023
commit
d76d8ced9b
9 changed files with 33 additions and 31 deletions
|
@ -102,7 +102,7 @@ void AsyncManager::run() {
|
|||
|
||||
// Set futures
|
||||
for (auto& [future, value] : execQueue) {
|
||||
future->set(value?Result::Error:Result::Success);
|
||||
future->set(value?AsyncResult::Error:AsyncResult::Success);
|
||||
future = nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,14 +11,14 @@ class Runtime;
|
|||
|
||||
|
||||
|
||||
enum class Result {
|
||||
enum class AsyncResult {
|
||||
Error,
|
||||
Success
|
||||
};
|
||||
|
||||
class AsyncManager {
|
||||
public:
|
||||
using SockFuture = basiccoro::SingleEvent<Result>;
|
||||
using SockFuture = basiccoro::SingleEvent<AsyncResult>;
|
||||
using SockFutureUnique = std::unique_ptr<SockFuture>;
|
||||
using SockFutureMap = std::unordered_multimap<int, SockFutureUnique>;
|
||||
|
||||
|
@ -43,13 +43,13 @@ public:
|
|||
stopping = true;
|
||||
}
|
||||
|
||||
basiccoro::AwaitableTask<Result> waitRead(int fd) {
|
||||
basiccoro::AwaitableTask<AsyncResult> waitRead(int fd) {
|
||||
auto event = std::make_unique<SockFuture>();
|
||||
auto eventPtr = event.get();
|
||||
sockReads.emplace(fd, std::move(event));
|
||||
co_return co_await *eventPtr;
|
||||
}
|
||||
basiccoro::AwaitableTask<Result> waitWrite(int fd) {
|
||||
basiccoro::AwaitableTask<AsyncResult> waitWrite(int fd) {
|
||||
auto event = std::make_unique<SockFuture>();
|
||||
auto eventPtr = event.get();
|
||||
sockWrites.emplace(fd, std::move(event));
|
||||
|
|
22
Client.cpp
22
Client.cpp
|
@ -72,18 +72,18 @@ Client::Client(const std::string& addr, unsigned port, AsyncManager& asyncManage
|
|||
# endif
|
||||
}
|
||||
|
||||
basiccoro::AwaitableTask<Result> Client::ask(std::string_view prompt, const std::function<basiccoro::AwaitableTask<void> (unsigned progress)>& on_progress, const std::function<basiccoro::AwaitableTask<void> (std::string_view token)>& on_token) {
|
||||
basiccoro::AwaitableTask<AsyncResult> Client::ask(std::string_view prompt, const std::function<basiccoro::AwaitableTask<void> (unsigned progress)>& on_progress, const std::function<basiccoro::AwaitableTask<void> (std::string_view token)>& on_token) {
|
||||
std::string fres;
|
||||
|
||||
// Send prompt length
|
||||
uint8_t len = prompt.length();
|
||||
if (co_await connection->writeObject(len, true) == Result::Error) {
|
||||
co_return Result::Error;
|
||||
if (co_await connection->writeObject(len, true) == AsyncResult::Error) {
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Send prompt
|
||||
if (co_await connection->write(prompt) == Result::Error) {
|
||||
co_return Result::Error;
|
||||
if (co_await connection->write(prompt) == AsyncResult::Error) {
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Receive progress
|
||||
|
@ -91,8 +91,8 @@ basiccoro::AwaitableTask<Result> Client::ask(std::string_view prompt, const std:
|
|||
uint8_t progress;
|
||||
|
||||
// Receive percentage
|
||||
if (co_await connection->readObject(progress) == Result::Error) {
|
||||
co_return Result::Error;
|
||||
if (co_await connection->readObject(progress) == AsyncResult::Error) {
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Run on_progress callback
|
||||
|
@ -105,8 +105,8 @@ basiccoro::AwaitableTask<Result> Client::ask(std::string_view prompt, const std:
|
|||
// Receive response
|
||||
for (;;) {
|
||||
// Receive response length
|
||||
if (co_await connection->readObject(len) == Result::Error) {
|
||||
co_return Result::Error;
|
||||
if (co_await connection->readObject(len) == AsyncResult::Error) {
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// End if zero
|
||||
|
@ -118,7 +118,7 @@ basiccoro::AwaitableTask<Result> Client::ask(std::string_view prompt, const std:
|
|||
// Receive response
|
||||
const auto token = co_await connection->read(len);
|
||||
if (token.empty()) {
|
||||
co_return Result::Error;
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Run on_token callback
|
||||
|
@ -126,5 +126,5 @@ basiccoro::AwaitableTask<Result> Client::ask(std::string_view prompt, const std:
|
|||
}
|
||||
|
||||
// No error
|
||||
co_return Result::Success;
|
||||
co_return AsyncResult::Success;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ class Client
|
|||
public:
|
||||
Client(const std::string &addr, unsigned port, AsyncManager& asyncManager);
|
||||
|
||||
basiccoro::AwaitableTask<Result> ask(std::string_view prompt, const std::function<basiccoro::AwaitableTask<void> (unsigned progress)>& on_progress, const std::function<basiccoro::AwaitableTask<void> (std::string_view token)>& on_token);
|
||||
basiccoro::AwaitableTask<AsyncResult> ask(std::string_view prompt, const std::function<basiccoro::AwaitableTask<void> (unsigned progress)>& on_progress, const std::function<basiccoro::AwaitableTask<void> (std::string_view token)>& on_token);
|
||||
};
|
||||
|
||||
#endif // CLIENT_HPP
|
||||
|
|
12
Receiver.cpp
12
Receiver.cpp
|
@ -21,27 +21,27 @@ basiccoro::AwaitableTask<std::string> Receiver::Simple::read(size_t amount) {
|
|||
// Return final buffer
|
||||
co_return fres;
|
||||
}
|
||||
basiccoro::AwaitableTask<Result> Receiver::Simple::read(std::byte *buffer, size_t size) {
|
||||
basiccoro::AwaitableTask<AsyncResult> Receiver::Simple::read(std::byte *buffer, size_t size) {
|
||||
size_t allBytesRead = 0;
|
||||
|
||||
while (allBytesRead != size) {
|
||||
// Wait for data
|
||||
if (co_await aMan.waitRead(fd) == Result::Error) [[unlikely]] {
|
||||
if (co_await aMan.waitRead(fd) == AsyncResult::Error) [[unlikely]] {
|
||||
// Error
|
||||
co_return Result::Error;
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Receive data
|
||||
ssize_t bytesRead;
|
||||
if ((bytesRead = recv(fd, reinterpret_cast<char*>(buffer+allBytesRead), size-allBytesRead, 0)) < 0) [[unlikely]] {
|
||||
// Error
|
||||
co_return Result::Error;
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
allBytesRead += bytesRead;
|
||||
}
|
||||
|
||||
// No error
|
||||
co_return Result::Success;
|
||||
co_return AsyncResult::Success;
|
||||
}
|
||||
|
||||
basiccoro::AwaitableTask<std::string> Receiver::Simple::readSome(size_t max) {
|
||||
|
@ -50,7 +50,7 @@ basiccoro::AwaitableTask<std::string> Receiver::Simple::readSome(size_t max) {
|
|||
fres.resize(max);
|
||||
|
||||
// Wait for data
|
||||
if (co_await aMan.waitRead(fd) == Result::Error) [[unlikely]] {
|
||||
if (co_await aMan.waitRead(fd) == AsyncResult::Error) [[unlikely]] {
|
||||
co_return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ public:
|
|||
|
||||
// Reads the exact amount of bytes given
|
||||
basiccoro::AwaitableTask<std::string> read(size_t amount);
|
||||
basiccoro::AwaitableTask<Result> read(std::byte *buffer, size_t size);
|
||||
basiccoro::AwaitableTask<AsyncResult> read(std::byte *buffer, size_t size);
|
||||
// Reads at max. the amount of bytes given
|
||||
basiccoro::AwaitableTask<std::string> readSome(size_t max);
|
||||
|
||||
|
|
10
Sender.cpp
10
Sender.cpp
|
@ -12,18 +12,18 @@
|
|||
|
||||
|
||||
|
||||
basiccoro::AwaitableTask<Result> Sender::Simple::write(std::string_view str, bool moreData) {
|
||||
basiccoro::AwaitableTask<AsyncResult> Sender::Simple::write(std::string_view str, bool moreData) {
|
||||
co_return co_await this->write(reinterpret_cast<const std::byte*>(str.data()), str.size(), moreData);
|
||||
}
|
||||
|
||||
basiccoro::AwaitableTask<Result> Sender::Simple::write(const std::byte *data, size_t size, bool moreData) {
|
||||
basiccoro::AwaitableTask<AsyncResult> Sender::Simple::write(const std::byte *data, size_t size, bool moreData) {
|
||||
std::string fres;
|
||||
|
||||
// Wait for socket to get ready for writing
|
||||
if (co_await aMan.waitWrite(fd) == Result::Error) [[unlikely]] {
|
||||
co_return Result::Error;
|
||||
if (co_await aMan.waitWrite(fd) == AsyncResult::Error) [[unlikely]] {
|
||||
co_return AsyncResult::Error;
|
||||
}
|
||||
|
||||
// Write
|
||||
co_return (send(fd, reinterpret_cast<const char*>(data), size, MSG_FLAGS_OR_ZERO(MSG_NOSIGNAL | (int(moreData)*MSG_MORE))) < 0)?Result::Error:Result::Success;
|
||||
co_return (send(fd, reinterpret_cast<const char*>(data), size, MSG_FLAGS_OR_ZERO(MSG_NOSIGNAL | (int(moreData)*MSG_MORE))) < 0)?AsyncResult::Error:AsyncResult::Success;
|
||||
}
|
||||
|
|
|
@ -18,8 +18,8 @@ protected:
|
|||
public:
|
||||
Simple(AsyncManager& asyncManager, int fd) : aMan(asyncManager), fd(fd) {}
|
||||
|
||||
basiccoro::AwaitableTask<Result> write(std::string_view, bool moreData = false);
|
||||
basiccoro::AwaitableTask<Result> write(const std::byte *data, size_t, bool moreData = false);
|
||||
basiccoro::AwaitableTask<AsyncResult> write(std::string_view, bool moreData = false);
|
||||
basiccoro::AwaitableTask<AsyncResult> write(const std::byte *data, size_t, bool moreData = false);
|
||||
|
||||
template<typename T>
|
||||
auto writeObject(const T& o, bool moreData = false) {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "SingleEvent.hpp"
|
||||
|
||||
#include <utility>
|
||||
|
||||
namespace basiccoro
|
||||
{
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue