nixd
Loading...
Searching...
No Matches
EvalClient.h
Go to the documentation of this file.
1#pragma once
2
4
6
8
9#include <memory>
10#include <thread>
11
12namespace nixd {
13
15 std::atomic<bool> Ready;
16
17public:
18 llvm::unique_function<void(const rpc::RegisterBCParams &)> RegisterBC;
19 llvm::unique_function<void(const rpc::ExprValueParams &,
22
23 EvalClient(std::unique_ptr<lspserver::InboundPort> In,
24 std::unique_ptr<lspserver::OutboundPort> Out);
25
26 void onReady(const int &Flags) {
28 "nix-node-eval({0}) reported it's ready for processing requests",
29 Flags);
30 Ready = true;
31 }
32
33 bool ready() { return Ready; }
34};
35
37 std::unique_ptr<util::PipedProc> Proc;
38 std::unique_ptr<llvm::raw_fd_ostream> Stream;
39
40 std::thread Input;
41
42public:
43 OwnedEvalClient(std::unique_ptr<lspserver::InboundPort> In,
44 std::unique_ptr<lspserver::OutboundPort> Out,
45 std::unique_ptr<util::PipedProc> Proc,
46 std::unique_ptr<llvm::raw_fd_ostream> Stream)
47 : EvalClient(std::move(In), std::move(Out)), Proc(std::move(Proc)),
48 Stream(std::move(Stream)) {
49
50 Input = std::thread([this]() { run(); });
51 }
52
53 util::PipedProc &proc() { return *Proc; }
54
55 ~OwnedEvalClient() override {
57 Input.join();
58 }
59
60 /// Lanch nix-node-eval, with properly handled file descriptors.
61 /// System-wide errno will be written into "Fail" variable and thus cannot be
62 /// discarded.
63 static std::unique_ptr<OwnedEvalClient> create(int &Fail);
64};
65
66} // namespace nixd
void closeInbound()
Close the inbound port.
Definition LSPServer.h:91
EvalClient(std::unique_ptr< lspserver::InboundPort > In, std::unique_ptr< lspserver::OutboundPort > Out)
void onReady(const int &Flags)
Definition EvalClient.h:26
llvm::unique_function< void(const rpc::RegisterBCParams &) RegisterBC)
Definition EvalClient.h:18
llvm::unique_function< void(const rpc::ExprValueParams &, lspserver::Callback< rpc::ExprValueResponse >) ExprValue)
Definition EvalClient.h:21
~OwnedEvalClient() override
Definition EvalClient.h:55
static std::unique_ptr< OwnedEvalClient > create(int &Fail)
OwnedEvalClient(std::unique_ptr< lspserver::InboundPort > In, std::unique_ptr< lspserver::OutboundPort > Out, std::unique_ptr< util::PipedProc > Proc, std::unique_ptr< llvm::raw_fd_ostream > Stream)
Definition EvalClient.h:43
util::PipedProc & proc()
Definition EvalClient.h:53
llvm::unique_function< void(llvm::Expected< T >)> Callback
Definition Function.h:14
void log(const char *Fmt, Ts &&...Vals)
Definition Logger.h:58