Class: Steep::Server::BaseWorker
- Inherits:
-
Object
- Object
- Steep::Server::BaseWorker
show all
- Defined in:
- lib/steep/server/base_worker.rb
Constant Summary
collapse
- LSP =
LanguageServer::Protocol
- ShutdownJob =
_ = Struct.new(:id, keyword_init: true)
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(project:, reader:, writer:) ⇒ BaseWorker
Returns a new instance of BaseWorker.
11
12
13
14
15
16
17
18
|
# File 'lib/steep/server/base_worker.rb', line 11
def initialize(project:, reader:, writer:)
@project = project
@reader = reader
@writer = writer
@skip_job = false
@shutdown = false
@skip_jobs_after_shutdown = false
end
|
Instance Attribute Details
Returns the value of attribute project.
6
7
8
|
# File 'lib/steep/server/base_worker.rb', line 6
def project
@project
end
|
Returns the value of attribute queue.
7
8
9
|
# File 'lib/steep/server/base_worker.rb', line 7
def queue
@queue
end
|
Returns the value of attribute reader.
7
8
9
|
# File 'lib/steep/server/base_worker.rb', line 7
def reader
@reader
end
|
Returns the value of attribute writer.
7
8
9
|
# File 'lib/steep/server/base_worker.rb', line 7
def writer
@writer
end
|
Instance Method Details
#handle_job(job) ⇒ Object
36
37
38
|
# File 'lib/steep/server/base_worker.rb', line 36
def handle_job(job)
end
|
#handle_request(request) ⇒ Object
32
33
34
|
# File 'lib/steep/server/base_worker.rb', line 32
def handle_request(request)
end
|
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/steep/server/base_worker.rb', line 40
def run
tags = Steep.logger.current_tags.dup
thread = Thread.new do
Thread.current.abort_on_exception = true
Steep.logger.push_tags(*tags)
Steep.logger.tagged "background" do
while job = queue.pop
case job
when ShutdownJob
writer.write(id: job.id, result: nil)
else
if skip_job?
Steep.logger.info "Skipping job..."
else
begin
handle_job(job)
rescue => exn
Steep.log_error exn
writer.write(
{
method: "window/showMessage",
params: {
type: LSP::Constant::MessageType::ERROR,
message: "Unexpected error: #{exn.message} (#{exn.class})"
}
}
)
end
end
end
end
end
end
Steep.logger.tagged "frontend" do
begin
reader.read do |request|
Steep.logger.info "Received message from master: #{request[:method]}(#{request[:id]})"
case request[:method]
when "shutdown"
queue << ShutdownJob.new(id: request[:id])
@skip_job = skip_jobs_after_shutdown?
queue.close
when "exit"
break
else
handle_request(request) unless @shutdown
end
end
ensure
thread.join
end
end
end
|
#skip_job? ⇒ Boolean
28
29
30
|
# File 'lib/steep/server/base_worker.rb', line 28
def skip_job?
@skip_job
end
|
#skip_jobs_after_shutdown!(flag = true) ⇒ Object
20
21
22
|
# File 'lib/steep/server/base_worker.rb', line 20
def skip_jobs_after_shutdown!(flag = true)
@skip_jobs_after_shutdown = flag
end
|
#skip_jobs_after_shutdown? ⇒ Boolean
24
25
26
|
# File 'lib/steep/server/base_worker.rb', line 24
def skip_jobs_after_shutdown?
@skip_jobs_after_shutdown
end
|