Class: Cxxproject::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
Instance Method Summary
collapse
Methods inherited from ErrorParser
#get_severity, #scan, #scan_lines
Constructor Details
Returns a new instance of IDEInterface.
19
20
21
22
23
|
# File 'lib/cxxproject/ide_interface.rb', line 19
def initialize()
@socket = nil
@abort = false
@thread = nil
end
|
Instance Method Details
#connect(port) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/cxxproject/ide_interface.rb', line 29
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
Printer.printError "Error: #{e.message}"
ExitHelper.exit(1)
end
end
|
#create_error_packet(msg) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/cxxproject/ide_interface.rb', line 127
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/cxxproject/ide_interface.rb', line 55
def disconnect()
if @socket
sleep 0.1 begin
@socket.close
rescue Exception => e
Printer.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
81
82
83
|
# File 'lib/cxxproject/ide_interface.rb', line 81
def force_encoding(s)
s.force_encoding("binary") if s.respond_to?("force_encoding") end
|
#get_abort ⇒ Object
177
178
179
|
# File 'lib/cxxproject/ide_interface.rb', line 177
def get_abort()
@abort
end
|
#get_number_of_projects ⇒ Object
173
174
175
|
# File 'lib/cxxproject/ide_interface.rb', line 173
def get_number_of_projects
@num ||= 0
end
|
#mutex ⇒ Object
25
26
27
|
# File 'lib/cxxproject/ide_interface.rb', line 25
def mutex
@mutex ||= Mutex.new
end
|
#set_abort(value) ⇒ Object
181
182
183
184
|
# File 'lib/cxxproject/ide_interface.rb', line 181
def set_abort(value)
@abort = value
ProcessHelper.killProcess if @abort
end
|
#set_build_info(name_attr, config_name_attr, num = -1)) ⇒ Object
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/cxxproject/ide_interface.rb', line 143
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
Printer.printError "Error: #{e.message}"
set_abort(true)
end
end
|
#set_errors(error_array) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/cxxproject/ide_interface.rb', line 99
def set_errors(error_array)
if @socket
merged_messages = []
last_msg = nil
error_array.each do |msg|
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
merged_messages.each do |msg|
msg.message.rstrip!
packet = create_error_packet(msg)
begin
mutex.synchronize { @socket.write(packet) }
rescue Exception => e
Printer.printError "Error: #{e.message}"
set_abort(true)
end
end
end
end
|
85
86
87
88
89
90
91
92
|
# File 'lib/cxxproject/ide_interface.rb', line 85
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
74
75
76
77
78
79
|
# File 'lib/cxxproject/ide_interface.rb', line 74
def write_long(packet, l)
4.times do
packet << (l & 0xff)
l = l >> 8
end
end
|
#write_string(packet, s) ⇒ Object
94
95
96
97
|
# File 'lib/cxxproject/ide_interface.rb', line 94
def write_string(packet, s)
write_long(packet, s.length)
packet << s
end
|