ensime_bridge 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|