Files
2026-07-13 13:25:10 +08:00

54 lines
1.3 KiB
C++

/**
* Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights
* Reserved. MIT License (https://opensource.org/licenses/MIT)
*/
/* 2023-2025 by zhaomingwork@qq.com */
// FUNASR_MESSAGE define the needed message between funasr engine and http server
#ifndef HTTP_SERVER2_SESSIONS_HPP
#define HTTP_SERVER2_SESSIONS_HPP
#include "funasrruntime.h"
#include "nlohmann/json.hpp"
#include <iostream>
#include <thread>
#include <atomic>
#include <mutex>
#include <condition_variable>
class Semaphore {
public:
explicit Semaphore(int count = 0) : count_(count) {}
void acquire() {
std::unique_lock<std::mutex> lock(mutex_);
cv_.wait(lock, [this]() { return count_ > 0; });
--count_;
}
void release() {
std::lock_guard<std::mutex> lock(mutex_);
++count_;
cv_.notify_one();
}
private:
int count_;
std::mutex mutex_;
std::condition_variable cv_;
};
typedef struct {
nlohmann::json msg;
std::shared_ptr<std::vector<char>> samples;
std::shared_ptr<std::vector<std::vector<float>>> hotwords_embedding=nullptr;
FUNASR_DEC_HANDLE decoder_handle=nullptr;
std::atomic<int> status;
//std::counting_semaphore<3> sem(0);
Semaphore sem_resultok;
} FUNASR_MESSAGE;
#endif // HTTP_SERVER2_REQUEST_PARSER_HPP