master
h 30 lines 749 Bytes
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 #pragma once
3
4 #include "p9await.h"
5
6 namespace p9fs {
7
8 // Platform-independent wrapper around socket operations.
9 class ISocket
10 {
11 public:
12 virtual ~ISocket() = default;
13
14 virtual Task<std::unique_ptr<ISocket>> AcceptAsync(CancelToken& token) = 0;
15 virtual Task<size_t> RecvAsync(gsl::span<gsl::byte> buffer, CancelToken& token) = 0;
16 virtual Task<size_t> SendAsync(gsl::span<const gsl::byte> buffer, CancelToken& token) = 0;
17 };
18
19 // Platform-independent wrapper around threadpool work
20 class IWorkItem
21 {
22 public:
23 virtual ~IWorkItem() = default;
24
25 virtual void Submit() = 0;
26 };
27
28 std::unique_ptr<IWorkItem> CreateWorkItem(std::function<void()> callback);
29
30 } // namespace p9fs