master
h 53 lines 1.12 KB
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 #pragma once
3
4 #include "p9platform.h"
5 #include "p9io.h"
6
7 namespace p9fs {
8
9 class Socket final : public ISocket
10 {
11 public:
12 Socket(int socket = -1);
13
14 Task<std::unique_ptr<ISocket>> AcceptAsync(CancelToken& token) override;
15 Task<size_t> RecvAsync(gsl::span<gsl::byte> buffer, CancelToken& token) override;
16 Task<size_t> SendAsync(gsl::span<const gsl::byte> buffer, CancelToken& token) override;
17 void Reset(int socket = -1);
18
19 private:
20 wil::unique_fd m_Socket;
21 CoroutineEpollIssuer m_Io;
22 };
23
24 class WorkItem final : public IWorkItem
25 {
26 public:
27 WorkItem(std::function<void()> callback);
28
29 void Submit() override;
30
31 private:
32 std::function<void()> m_Callback;
33 };
34
35 class ThreadPool final
36 {
37 public:
38 ThreadPool();
39
40 void SubmitWork(std::function<void()> callback);
41
42 private:
43 void WorkerCallback();
44
45 std::queue<std::function<void()>> m_WorkQueue;
46 std::mutex m_Lock;
47 std::condition_variable m_Condition;
48 unsigned int m_MaxThreads{};
49 unsigned int m_AvailableThreads{};
50 unsigned int m_RunningThreads{};
51 };
52
53 } // namespace p9fs