nixd
Toggle main menu visibility
Loading...
Searching...
No Matches
nixd
include
nixd
Controller
EvalClient.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
nixd/Protocol/Protocol.h
"
4
5
#include "
nixd/Support/PipedProc.h
"
6
7
#include <
lspserver/LSPServer.h
>
8
9
#include <memory>
10
#include <thread>
11
12
namespace
nixd
{
13
14
class
EvalClient
:
public
lspserver::LSPServer
{
15
std::atomic<bool> Ready;
16
17
public
:
18
llvm::unique_function<void(
const
rpc::RegisterBCParams
&)>
RegisterBC
;
19
llvm::unique_function<void(
const
rpc::ExprValueParams
&,
20
lspserver::Callback<rpc::ExprValueResponse>
)>
21
ExprValue
;
22
23
EvalClient
(std::unique_ptr<lspserver::InboundPort> In,
24
std::unique_ptr<lspserver::OutboundPort> Out);
25
26
void
onReady
(
const
int
&Flags) {
27
lspserver::log
(
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
36
class
OwnedEvalClient
:
public
EvalClient
{
37
std::unique_ptr<util::PipedProc> Proc;
38
std::unique_ptr<llvm::raw_fd_ostream> Stream;
39
40
std::thread Input;
41
42
public
:
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
{
56
closeInbound
();
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
LSPServer.h
PipedProc.h
lspserver::LSPServer
Definition
LSPServer.h:17
lspserver::LSPServer::closeInbound
void closeInbound()
Close the inbound port.
Definition
LSPServer.h:91
lspserver::LSPServer::run
void run()
Definition
LSPServer.cpp:15
nixd::EvalClient::EvalClient
EvalClient(std::unique_ptr< lspserver::InboundPort > In, std::unique_ptr< lspserver::OutboundPort > Out)
nixd::EvalClient::onReady
void onReady(const int &Flags)
Definition
EvalClient.h:26
nixd::EvalClient::ready
bool ready()
Definition
EvalClient.h:33
nixd::EvalClient::RegisterBC
llvm::unique_function< void(const rpc::RegisterBCParams &)> RegisterBC
Definition
EvalClient.h:18
nixd::EvalClient::ExprValue
llvm::unique_function< void(const rpc::ExprValueParams &, lspserver::Callback< rpc::ExprValueResponse >)> ExprValue
Definition
EvalClient.h:21
nixd::OwnedEvalClient::~OwnedEvalClient
~OwnedEvalClient() override
Definition
EvalClient.h:55
nixd::OwnedEvalClient::create
static std::unique_ptr< OwnedEvalClient > create(int &Fail)
nixd::OwnedEvalClient::OwnedEvalClient
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
nixd::OwnedEvalClient::proc
util::PipedProc & proc()
Definition
EvalClient.h:53
Protocol.h
lspserver::Callback
llvm::unique_function< void(llvm::Expected< T >)> Callback
Definition
Function.h:14
lspserver::log
void log(const char *Fmt, Ts &&...Vals)
Definition
Logger.h:58
nixd
Definition
CommandLine/Configuration.h:9
nixd::rpc::ExprValueParams
Definition
include/nixd/Protocol/Protocol.h:28
nixd::rpc::RegisterBCParams
Definition
include/nixd/Protocol/Protocol.h:17
nixd::util::PipedProc
Definition
PipedProc.h:9
Generated by
1.17.0