Class: PhusionPassenger::MessageClient
- Inherits:
-
Object
- Object
- PhusionPassenger::MessageClient
show all
- Includes:
- Utils
- Defined in:
- lib/phusion_passenger/message_client.rb
Overview
A convenience class for communicating with MessageServer servers, for
example the ApplicationPool server.
Constant Summary
Constant Summary
Constants included
from Utils
Utils::FileSystemWatcher, Utils::NULL
Instance Method Summary
(collapse)
Methods included from Utils
#split_by_null_into_hash
Constructor Details
- (MessageClient) initialize(username, password, address = "unix:#{Utils.passenger_tmpdir}/socket"))
Connect to the given server. By default it connects to the current
generation's helper server.
39
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
|
# File 'lib/phusion_passenger/message_client.rb', line 39
def initialize(username, password, address = "unix:#{Utils.passenger_tmpdir}/socket")
@socket = connect_to_server(address)
begin
@channel = MessageChannel.new(@socket)
result = @channel.read
if result.nil?
raise EOFError
elsif result.size != 2 || result[0] != "version"
raise IOError, "The message server didn't sent a valid version identifier"
elsif result[1] != "1"
raise IOError, "Unsupported message server protocol version #{result[1]}"
end
@channel.write_scalar(username)
@channel.write_scalar(password)
result = @channel.read
if result.nil?
raise EOFError
elsif result[0] != "ok"
raise SecurityError, result[0]
end
rescue Exception
@socket.close
raise
end
end
|
Instance Method Details
- (Object) backtraces
# BacktracesServer methods ###
107
108
109
110
111
|
# File 'lib/phusion_passenger/message_client.rb', line 107
def backtraces
write("backtraces")
check_security_response
return read_scalar
end
|
- (Object) check_security_response
150
151
152
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/phusion_passenger/message_client.rb', line 150
def check_security_response
begin
result = @channel.read
rescue
auto_disconnect
raise
end
if result.nil?
raise EOFError
elsif result[0] != "Passed security"
raise SecurityError, result[0]
end
end
|
68
69
70
71
|
# File 'lib/phusion_passenger/message_client.rb', line 68
def close
@socket.close if @socket
@channel = @socket = nil
end
|
- (Boolean) connected?
73
74
75
|
# File 'lib/phusion_passenger/message_client.rb', line 73
def connected?
return !!@channel
end
|
- (Object) detach(detach_key)
# ApplicationPool::Server methods ###
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/phusion_passenger/message_client.rb', line 79
def detach(detach_key)
write("detach", detach_key)
check_security_response
result = read
if result.nil?
raise EOFError
else
return result.first == "true"
end
end
|
# Low level I/O methods ###
115
116
117
118
119
120
|
# File 'lib/phusion_passenger/message_client.rb', line 115
def read
return @channel.read
rescue
auto_disconnect
raise
end
|
- (Object) read_scalar
136
137
138
139
140
141
|
# File 'lib/phusion_passenger/message_client.rb', line 136
def read_scalar
return @channel.read_scalar
rescue
auto_disconnect
raise
end
|
- (Object) recv_io(klass = IO, negotiate = true)
143
144
145
146
147
148
|
# File 'lib/phusion_passenger/message_client.rb', line 143
def recv_io(klass = IO, negotiate = true)
return @channel.recv_io(klass, negotiate)
rescue
auto_disconnect
raise
end
|
90
91
92
93
94
95
96
97
|
# File 'lib/phusion_passenger/message_client.rb', line 90
def status
write("inspect")
check_security_response
return read_scalar
rescue
auto_disconnect
raise
end
|
- (Object) write(*args)
122
123
124
125
126
127
|
# File 'lib/phusion_passenger/message_client.rb', line 122
def write(*args)
@channel.write(*args)
rescue
auto_disconnect
raise
end
|
- (Object) write_scalar(*args)
129
130
131
132
133
134
|
# File 'lib/phusion_passenger/message_client.rb', line 129
def write_scalar(*args)
@channel.write_scalar(*args)
rescue
auto_disconnect
raise
end
|
99
100
101
102
103
|
# File 'lib/phusion_passenger/message_client.rb', line 99
def xml
write("toXml", true)
check_security_response
return read_scalar
end
|