Class: Bake::IDEInterface
Overview
payload of problem type: 4 bytes = length filename x bytes = filename 4 bytes = linenumber 1 byte = severity (0..2) rest = error msg
Constant Summary
Constants inherited
from ErrorParser
ErrorParser::SEVERITY_ERROR, ErrorParser::SEVERITY_INFO, ErrorParser::SEVERITY_OK, ErrorParser::SEVERITY_WARNING
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from ErrorParser
#get_severity, #get_tasking_severity, #inv_severity, #makeVsError, #scan, #scan_lines
Constructor Details
Returns a new instance of IDEInterface.
19
20
21
22
23
|
# File 'lib/common/ide_interface.rb', line 19
def initialize()
@socket = nil
@abort = false
@thread = nil
end
|
Class Method Details
.instance ⇒ Object
25
26
27
|
# File 'lib/common/ide_interface.rb', line 25
def self.instance
@@ide ||= IDEInterface.new
end
|
Instance Method Details
#connect(port) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/common/ide_interface.rb', line 34
def connect(port)
begin
@socket = TCPSocket.new('localhost', port)
@thread = Thread.new do
while true do
begin
@socket.recv_nonblock(1)
set_abort(true)
break
rescue Errno::EWOULDBLOCK
sleep 0.1
rescue Errno::EAGAIN
sleep 0.1
rescue Exception => e
break
end
end
end
rescue Exception => e
Bake.formatter.printError("Error: #{e.message}")
ExitHelper.exit(1)
end
end
|
#create_error_packet(msg) ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/common/ide_interface.rb', line 134
def create_error_packet(msg)
packet = ""
[packet, msg.file_name, msg.message].each {|s|force_encoding(s)}
packet << 1 write_long(packet,0)
write_string(packet, msg.file_name)
write_long(packet,msg.line_number)
packet << (msg.severity & 0xFF)
packet << msg.message
(packet)
packet
end
|
#disconnect ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/common/ide_interface.rb', line 60
def disconnect()
if @socket
sleep 0.1 begin
@socket.close
rescue Exception => e
Bake.formatter.printError("Error: #{e.message}")
ExitHelper.exit(1)
end
@socket = nil
end
begin
@thread.join if @thread
rescue
end
@thread = nil
end
|
#force_encoding(s) ⇒ Object
86
87
88
|
# File 'lib/common/ide_interface.rb', line 86
def force_encoding(s)
s.force_encoding("binary") if s.respond_to?("force_encoding") end
|
#get_abort ⇒ Object
184
185
186
|
# File 'lib/common/ide_interface.rb', line 184
def get_abort()
@abort
end
|
#get_number_of_projects ⇒ Object
180
181
182
|
# File 'lib/common/ide_interface.rb', line 180
def get_number_of_projects
@num ||= 0
end
|
#mutex ⇒ Object
30
31
32
|
# File 'lib/common/ide_interface.rb', line 30
def mutex
@mutex ||= Mutex.new
end
|
#set_abort(value) ⇒ Object
188
189
190
191
|
# File 'lib/common/ide_interface.rb', line 188
def set_abort(value)
@abort = value
ProcessHelper.killProcess(false) if @abort
end
|
#set_build_info(name_attr, config_name_attr, num = -1)) ⇒ Object
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/common/ide_interface.rb', line 150
def set_build_info(name_attr, config_name_attr, num = -1)
@num = num if (num >= 0)
name = String.new(name_attr)
config_name = String.new(config_name_attr)
packet = ""
[packet, name, config_name].each {|s|force_encoding(s)}
lname = name.length
lconfig = config_name.length
lsum = 4 + lname + 4 + lconfig + 4
packet << 10
write_long(packet, lsum)
write_long(packet, lname)
packet << name
write_long(packet, lconfig)
packet << config_name
write_long(packet, num >=0 ? num : 0)
begin
mutex.synchronize { @socket.write(packet) if @socket }
rescue Exception => e
Bake.formatter.printError("Error: #{e.message}")
set_abort(true)
end
end
|
#set_errors(error_array) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/common/ide_interface.rb', line 104
def set_errors(error_array)
if @socket
merged_messages = []
last_msg = nil
error_array.each do |msg|
if msg.severity != 255
if msg.file_name.nil?
last_msg.message += "\r\n#{msg.message}" if last_msg
else
last_msg = msg.dup
merged_messages << last_msg
end
end
end
merged_messages.each do |msg|
msg.message.rstrip!
packet = create_error_packet(msg)
begin
mutex.synchronize { @socket.write(packet) }
rescue Exception => e
Bake.formatter.printError("Error: #{e.message}")
set_abort(true)
end
end
end
end
|
90
91
92
93
94
95
96
97
|
# File 'lib/common/ide_interface.rb', line 90
def (packet)
l = packet.length - 5
if packet.respond_to?("setbyte")
(1..4).each { |i| packet.setbyte(i, (l & 0xFF)); l = l >> 8 } else
(1..4).each { |i| packet[i] = (l & 0xFF); l = l >> 8 } end
end
|
#write_long(packet, l) ⇒ Object
79
80
81
82
83
84
|
# File 'lib/common/ide_interface.rb', line 79
def write_long(packet, l)
4.times do
packet << (l & 0xff)
l = l >> 8
end
end
|
#write_string(packet, s) ⇒ Object
99
100
101
102
|
# File 'lib/common/ide_interface.rb', line 99
def write_string(packet, s)
write_long(packet, s.length)
packet << s
end
|