ensime_bridge 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ensime.rb +6 -2
- data/lib/ensime_bridge.rb +34 -23
- metadata +1 -1
data/lib/ensime.rb
CHANGED
@@ -16,12 +16,12 @@ class Ensime
|
|
16
16
|
def initialize conf_path
|
17
17
|
@quiet = false
|
18
18
|
@conf_path = conf_path
|
19
|
+
@version = "0.9.10-SNAPSHOT"
|
19
20
|
@conf = Hash[File.read(conf_path).gsub("\n", "").gsub(
|
20
21
|
"(", " ").gsub(")", " ").gsub('"', "").split(" :").collect do |x|
|
21
22
|
m = x.match("\([^ ]*\) *\(.*\)$")
|
22
23
|
[m[1], m[2]]
|
23
|
-
end]
|
24
|
-
@version = "0.9.10-SNAPSHOT"
|
24
|
+
end] if File.exists? conf_path
|
25
25
|
end
|
26
26
|
def get_classpath
|
27
27
|
log = nil
|
@@ -66,6 +66,10 @@ EOF
|
|
66
66
|
classpath + ":#{@conf['java-home']}/lib/tools.jar"
|
67
67
|
end
|
68
68
|
def run
|
69
|
+
if @conf.nil?
|
70
|
+
puts "no #{@conf_path} file found" if not quiet
|
71
|
+
return
|
72
|
+
end
|
69
73
|
if is_running?
|
70
74
|
puts "ensime is already running"
|
71
75
|
else
|
data/lib/ensime_bridge.rb
CHANGED
@@ -3,6 +3,7 @@ require 'websocket-eventmachine-client'
|
|
3
3
|
require 'json'
|
4
4
|
require 'thread'
|
5
5
|
require 'base64'
|
6
|
+
require 'logger'
|
6
7
|
require_relative 'ensime'
|
7
8
|
class EnsimeBridge
|
8
9
|
attr_accessor :socket, :quiet
|
@@ -27,39 +28,39 @@ class EnsimeBridge
|
|
27
28
|
@queue = Queue.new
|
28
29
|
@bridge_file = "#{@cache}bridge"
|
29
30
|
@http_file = "#{@cache}http"
|
31
|
+
@logger = Logger.new(@cache + "bridge.log", 2, 100000)
|
30
32
|
end
|
31
33
|
def remote_stop
|
32
|
-
|
33
|
-
|
34
|
-
|
34
|
+
if is_running?
|
35
|
+
s = get_socket(@bridge_file)
|
36
|
+
s.puts "self.stop"
|
37
|
+
s.close
|
38
|
+
end
|
35
39
|
end
|
36
40
|
def stop
|
37
41
|
@ensime.stop
|
38
42
|
exit
|
39
43
|
end
|
40
|
-
def log what
|
41
|
-
Kernel.puts what.to_s if not quiet
|
42
|
-
end
|
43
44
|
def connect_to_ensime
|
44
45
|
url = "ws://127.0.0.1:#{File.read("#{@cache}http").chomp}/jerky"
|
45
46
|
@socket = WebSocket::EventMachine::Client.connect(:uri => url)
|
46
47
|
@socket.onopen do
|
47
|
-
|
48
|
+
@logger.info "Connected to ensime!"
|
48
49
|
end
|
49
50
|
@socket.onerror do |err|
|
50
|
-
|
51
|
+
@logger.error err
|
51
52
|
end
|
52
53
|
@socket.onmessage do |msg, type|
|
53
|
-
|
54
|
+
@logger.info "Received message: #{msg}, type #{type}"
|
54
55
|
@queue << msg
|
55
56
|
end
|
56
57
|
@socket.onclose do |code, reason|
|
57
|
-
|
58
|
+
@logger.info "Disconnected with status code: #{code} #{reason}"
|
58
59
|
end
|
59
60
|
end
|
60
61
|
def json packet
|
61
62
|
s = packet.to_json
|
62
|
-
|
63
|
+
@logger.info " to server => #{s}"
|
63
64
|
@socket.send s
|
64
65
|
end
|
65
66
|
def req message
|
@@ -79,15 +80,25 @@ class EnsimeBridge
|
|
79
80
|
sleep 0.2
|
80
81
|
end
|
81
82
|
end
|
83
|
+
def send_result result
|
84
|
+
if not result.nil? and not result.empty?
|
85
|
+
@client.puts result.gsub("\n", "")
|
86
|
+
else
|
87
|
+
@client.puts "nil"
|
88
|
+
return false
|
89
|
+
end
|
90
|
+
@logger.info result.gsub("\n", "")
|
91
|
+
return true
|
92
|
+
end
|
82
93
|
def run
|
83
94
|
@ensime.quiet = quiet
|
84
95
|
@ensime.run
|
85
96
|
if is_running?
|
86
|
-
|
97
|
+
@logger.info "bridge is already running"
|
87
98
|
return
|
88
99
|
end
|
89
100
|
wait_for_ensime
|
90
|
-
|
101
|
+
@logger.info "ensime is ready"
|
91
102
|
Thread.new do
|
92
103
|
EventMachine.run do
|
93
104
|
connect_to_ensime
|
@@ -99,23 +110,23 @@ class EnsimeBridge
|
|
99
110
|
begin
|
100
111
|
command = @client.readline.chomp
|
101
112
|
while true
|
102
|
-
result =
|
113
|
+
result = nil
|
114
|
+
@logger.info "command: #{command}"
|
115
|
+
if command.start_with? "{"
|
116
|
+
@socket.send command
|
117
|
+
else
|
118
|
+
result = instance_eval command
|
119
|
+
end
|
103
120
|
if command == "unqueue"
|
104
|
-
if not
|
105
|
-
@client.puts result.gsub("\n", "")
|
106
|
-
else
|
107
|
-
@client.puts "nil"
|
108
|
-
break
|
109
|
-
end
|
110
|
-
log result.gsub("\n", "")
|
121
|
+
break if not send_result result
|
111
122
|
else
|
112
123
|
break
|
113
124
|
end
|
114
125
|
end
|
115
126
|
@client.close
|
116
127
|
rescue => e
|
117
|
-
|
118
|
-
|
128
|
+
@logger.error e
|
129
|
+
@logger.error e.backtrace
|
119
130
|
end
|
120
131
|
end
|
121
132
|
end
|