Class: Butler::Remote::Connection
- Inherits:
-
Object
- Object
- Butler::Remote::Connection
show all
- Includes:
- Log::Comfort
- Defined in:
- lib/butler/remote/connection.rb
Instance Attribute Summary collapse
Attributes included from Log::Comfort
#logger
Class Method Summary
collapse
Instance Method Summary
collapse
#debug, #error, #exception, #fail, #info, #log, #warn
Constructor Details
#initialize(server, socket) ⇒ Connection
Returns a new instance of Connection.
35
36
37
38
39
40
|
# File 'lib/butler/remote/connection.rb', line 35
def initialize(server, socket)
@server = server
@socket = socket
@user = nil
@logger = nil
end
|
Instance Attribute Details
#user ⇒ Object
Returns the value of attribute user.
33
34
35
|
# File 'lib/butler/remote/connection.rb', line 33
def user
@user
end
|
Class Method Details
.open(server, socket) ⇒ Object
25
26
27
28
29
|
# File 'lib/butler/remote/connection.rb', line 25
def self.open(server, socket)
connection = new(server, socket)
connection.start
connection
end
|
.open_thread(server, socket) ⇒ Object
16
17
18
19
20
21
22
23
|
# File 'lib/butler/remote/connection.rb', line 16
def self.open_thread(server, socket)
connection = new(server, socket)
Thread.new {
connection.start
connection.read_loop
}
connection
end
|
Instance Method Details
#close ⇒ Object
108
109
110
|
# File 'lib/butler/remote/connection.rb', line 108
def close
@socket.close unless @socket.closed?
end
|
#closed? ⇒ Boolean
104
105
106
|
# File 'lib/butler/remote/connection.rb', line 104
def closed?
@socket.closed?
end
|
#puts(*text) ⇒ Object
94
95
96
|
# File 'lib/butler/remote/connection.rb', line 94
def puts(*text)
@socket.puts(*text)
end
|
#quit(reason = nil) ⇒ Object
98
99
100
101
102
|
# File 'lib/butler/remote/connection.rb', line 98
def quit(reason=nil)
puts reason if reason
close
@server.disconnected(self)
end
|
#read_loop ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/butler/remote/connection.rb', line 71
def read_loop
while line = @socket.gets
line.chomp!
p line
break if line.empty?
begin
@server.dispatch(Message.new(@server, self, @user, line))
rescue Errno::EPIPE, SocketError
raise
rescue Exception => e
exception(e)
end
end
rescue Exception => e
exception(e)
ensure
@server.disconnected(self)
close
end
|
#start ⇒ Object
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
67
68
69
|
# File 'lib/butler/remote/connection.rb', line 42
def start
puts("Please identify yourself")
tries = 3
access = nil
username = nil
timeout(180) {
tries.times { |i|
@socket.print("Username: ")
username = @socket.gets.chomp
@socket.print("Password: ")
password = @socket.gets.chomp
access = @server.login(username, password)
break if access
sleep(i)
puts("Failed to authenticate, please try again.")
}
}
return quit("Failed to authenticate") unless access
puts "You're logged in, welcome #{username}."
puts "To terminate the session, enter an empty line."
puts ""
@user = User.new(username, access)
rescue Timeout::Error
quit("Login timed out.")
rescue Exception => e
exception(e)
quit(nil)
end
|