ircguerilla-irc 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/irc/client/command_handler.rb +2 -2
- data/lib/irc/client/connected_state.rb +53 -8
- data/lib/irc/client/connection.rb +41 -6
- data/lib/irc/client/connection_listener.rb +26 -11
- data/lib/irc/client/connection_state.rb +15 -2
- data/lib/irc/client/context.rb +49 -11
- data/lib/irc/client/disconnected_state.rb +28 -16
- data/lib/irc/client/message_handler.rb +40 -16
- data/lib/irc/client/registered_state.rb +18 -0
- data/lib/irc/client/unregistered_state.rb +51 -16
- data/lib/irc/commands/nick_command.rb +14 -0
- data/lib/irc/messages/error_join_message.rb +1 -1
- data/lib/irc/messages/error_message.rb +53 -24
- data/lib/irc/messages/error_nick_name_in_use_message.rb +70 -0
- data/lib/irc/messages/factory.rb +16 -0
- data/lib/irc/messages/isupport_message.rb +86 -0
- data/lib/irc/messages/kick_message.rb +114 -0
- data/lib/irc/messages/message.rb +21 -1
- data/lib/irc/messages/nick_message.rb +17 -2
- data/lib/irc/messages/pong_message.rb +1 -1
- data/lib/irc/messages/welcome_message.rb +72 -0
- data/lib/irc/util/color.rb +77 -0
- data/lib/irc/util/nick_generator.rb +58 -0
- data/test/functional/irc/client/connection_test.rb +34 -1
- data/test/functional/irc/client/context_test.rb +5 -2
- data/test/mocks/test/irc/client/connection.rb +128 -0
- data/test/mocks/test/irc/client/disconnected_state.rb +44 -0
- data/test/test_helper.rb +1 -1
- data/test/unit/irc/client/command_handler_test.rb +12 -12
- data/test/unit/irc/client/message_handler_test.rb +136 -0
- data/test/unit/irc/commands/command_test.rb +87 -84
- data/test/unit/irc/commands/join_command_test.rb +3 -1
- data/test/unit/irc/commands/nick_command_test.rb +7 -1
- data/test/unit/irc/commands/ping_command_test.rb +12 -16
- data/test/unit/irc/commands/pong_command_test.rb +2 -1
- data/test/unit/irc/messages/error_join_message_test.rb +23 -2
- data/test/unit/irc/messages/error_message_test.rb +56 -0
- data/test/unit/irc/messages/error_nick_name_in_use_message_test.rb +56 -0
- data/test/unit/irc/messages/factory_test.rb +25 -0
- data/test/unit/irc/messages/isupport_message_test.rb +138 -0
- data/test/unit/irc/messages/join_message_test.rb +22 -1
- data/test/unit/irc/messages/kick_message_test.rb +76 -0
- data/test/unit/irc/messages/message_test.rb +33 -0
- data/test/unit/irc/messages/nick_message_test.rb +22 -1
- data/test/unit/irc/messages/notice_message_test.rb +22 -1
- data/test/unit/irc/messages/part_message_test.rb +22 -1
- data/test/unit/irc/messages/ping_message_test.rb +21 -1
- data/test/unit/irc/messages/pong_message_test.rb +21 -1
- data/test/unit/irc/messages/private_message_test.rb +22 -1
- data/test/unit/irc/messages/welcome_message_test.rb +59 -0
- data/test/unit/irc/util/color_test.rb +97 -0
- data/test/unit/irc/util/nick_generator_test.rb +52 -0
- metadata +69 -52
@@ -56,7 +56,7 @@ module IRC
|
|
56
56
|
# Sends the command directly to the server bypassing the queue. Sending commands too fast
|
57
57
|
# to the server can result in a disconnect from the server.
|
58
58
|
def send_command(command)
|
59
|
-
@context.
|
59
|
+
@context.output_socket << "#{command.to_s}\r\n"
|
60
60
|
@log.debug("[#{@context.network.to_s.upcase}] >>> #{command.to_s}")
|
61
61
|
end
|
62
62
|
|
@@ -99,7 +99,7 @@ module IRC
|
|
99
99
|
raise CommandHandlerError.new("Can't stop command handler. Already stopped.") if @thread == nil
|
100
100
|
|
101
101
|
# Kill the thread & clear the command queue.
|
102
|
-
@thread
|
102
|
+
Thread.kill(@thread)
|
103
103
|
@queue.clear
|
104
104
|
|
105
105
|
@log.debug("[#{@context.network.to_s.upcase}] Command handler successfully stopped.")
|
@@ -26,6 +26,9 @@
|
|
26
26
|
require 'irc/client/client_error'
|
27
27
|
require 'irc/client/connection_state'
|
28
28
|
require 'irc/client/disconnected_state'
|
29
|
+
require 'irc/commands/nick_command'
|
30
|
+
require 'irc/commands/password_command'
|
31
|
+
require 'irc/commands/user_command'
|
29
32
|
require 'irc/commands/pong_command'
|
30
33
|
require 'irc/commands/quit_command'
|
31
34
|
require 'log4r'
|
@@ -40,6 +43,10 @@ module IRC
|
|
40
43
|
@log = Log4r::Logger.new('IRC::Client::ConnectedState')
|
41
44
|
end
|
42
45
|
|
46
|
+
# Changes the nick name.
|
47
|
+
def change_nick(context, nick)
|
48
|
+
end
|
49
|
+
|
43
50
|
# Connects to the server.
|
44
51
|
def connect(context, server)
|
45
52
|
raise ClientError.new("Can't connect to server. Already connected to a server.")
|
@@ -61,25 +68,63 @@ module IRC
|
|
61
68
|
# Set network & server to nil.
|
62
69
|
context.network = context.server = nil
|
63
70
|
|
64
|
-
# Close socket and set
|
65
|
-
context.
|
66
|
-
context.
|
67
|
-
|
71
|
+
# Close input/output socket and set them to nil.
|
72
|
+
context.input_socket.close if context.input_socket != nil && !context.input_socket.closed?
|
73
|
+
context.input_socket = nil
|
74
|
+
|
75
|
+
context.output_socket.close if context.output_socket != nil && !context.output_socket.closed?
|
76
|
+
context.output_socket = nil
|
77
|
+
|
68
78
|
# Change to the disconnected state.
|
69
79
|
change_state(context, DisconnectedState.instance)
|
70
80
|
|
71
81
|
end
|
72
82
|
|
83
|
+
# Register the connection by sending the password, nick and user commands.
|
84
|
+
def register(context, nick, login, realname)
|
85
|
+
raise ClientError.new("Can't register connection. Connection registration is only possible in the unregistered state.")
|
86
|
+
end
|
87
|
+
|
73
88
|
# ConnectionListener
|
89
|
+
|
90
|
+
def on_error(context, reason)
|
74
91
|
|
92
|
+
@log.debug("#{network_name(context)} Got disconnected from server #{context.server.hostname}. #{reason.capitalize}.")
|
93
|
+
|
94
|
+
# Stop the command & message handlers.
|
95
|
+
context.stop_command_handler
|
96
|
+
context.stop_message_handler
|
97
|
+
|
98
|
+
# Set network & server to nil.
|
99
|
+
context.network = context.server = nil
|
100
|
+
|
101
|
+
# Close input/output socket and set them to nil.
|
102
|
+
context.input_socket.close if context.input_socket != nil && !context.input_socket.closed?
|
103
|
+
context.input_socket = nil
|
104
|
+
|
105
|
+
context.output_socket.close if context.output_socket != nil && !context.output_socket.closed?
|
106
|
+
context.output_socket = nil
|
107
|
+
|
108
|
+
# Change to the disconnected state.
|
109
|
+
change_state(context, DisconnectedState.instance)
|
110
|
+
|
111
|
+
end
|
112
|
+
|
75
113
|
# This method gets called when disconnected from a server.
|
76
|
-
def on_disconnect(
|
77
|
-
log.debug("#{network_name(
|
114
|
+
def on_disconnect(context, server, reason = nil)
|
115
|
+
log.debug("#{network_name(context)} Successfully disconnected from #{server}. #{reason != nil ? reason + '.' : ''}")
|
78
116
|
end
|
79
117
|
|
118
|
+
# This method gets called when a user changes it's nick name.
|
119
|
+
def on_nick(context, before, after)
|
120
|
+
return if before.nick.strip.downcase != context.nick.strip.downcase
|
121
|
+
context.nick = after.nick
|
122
|
+
@log.debug("#{network_name(context)} Successfully changed nick name from #{before.nick} to #{after.nick}.")
|
123
|
+
end
|
124
|
+
|
80
125
|
# This method gets called when a ping message was received from the server.
|
81
|
-
def on_ping(
|
82
|
-
IRC::Commands::PongCommand.new(servers[0], servers[1]).execute(
|
126
|
+
def on_ping(context, servers)
|
127
|
+
IRC::Commands::PongCommand.new(servers[0], servers[1]).execute(context)
|
83
128
|
end
|
84
129
|
|
85
130
|
|
@@ -51,8 +51,7 @@ module IRC
|
|
51
51
|
|
52
52
|
# Connects to the server.
|
53
53
|
def connect(server)
|
54
|
-
@
|
55
|
-
state.connect(self, server)
|
54
|
+
@context.connect(server)
|
56
55
|
end
|
57
56
|
|
58
57
|
# Returns true if a connection to an IRC server has been established.
|
@@ -60,6 +59,11 @@ module IRC
|
|
60
59
|
@context.connected?
|
61
60
|
end
|
62
61
|
|
62
|
+
# Returns all registered connection listeners.
|
63
|
+
def connection_listeners
|
64
|
+
return @context.connection_listeners
|
65
|
+
end
|
66
|
+
|
63
67
|
# Disconnects from the currently connected server.
|
64
68
|
def disconnect(message = nil)
|
65
69
|
@context.disconnect(message)
|
@@ -85,16 +89,41 @@ module IRC
|
|
85
89
|
@context.network
|
86
90
|
end
|
87
91
|
|
88
|
-
# Returns
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
+
# Returns the nick name that is used when connected to an IRC server.
|
93
|
+
def nick
|
94
|
+
@context.nick
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns the nick name that is used when connected to an IRC server.
|
98
|
+
def nick=(new_nick)
|
99
|
+
@context.change_nick(new_nick)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Returns the supported options of the currently connected server.
|
103
|
+
def options
|
104
|
+
return @context.options
|
92
105
|
end
|
93
106
|
|
94
107
|
# Leaves the given channels.
|
95
108
|
def part(channels)
|
96
109
|
@context.part(channels)
|
97
110
|
end
|
111
|
+
|
112
|
+
# Returns the real name that is used when connected to an IRC server.
|
113
|
+
def realname
|
114
|
+
@context.realname
|
115
|
+
end
|
116
|
+
|
117
|
+
# Register the connection by sending the password, nick and user commands.
|
118
|
+
def register(nick = nil, login = nil, realname = nil)
|
119
|
+
@context.register(nick, login, realname)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Returns true if a connection to an IRC server has been established and the connection
|
123
|
+
# has been successfully registered.
|
124
|
+
def registered?
|
125
|
+
@context.registered?
|
126
|
+
end
|
98
127
|
|
99
128
|
# Removes a previously added connection listener. The connection listener will not
|
100
129
|
# get notified any longer when a message was received from the IRC server.
|
@@ -112,6 +141,12 @@ module IRC
|
|
112
141
|
@context.send_command_via_queue(command)
|
113
142
|
end
|
114
143
|
|
144
|
+
# Returns the server, to which the connection object is connected to.
|
145
|
+
def server
|
146
|
+
return @context.server
|
147
|
+
end
|
148
|
+
|
149
|
+
|
115
150
|
end
|
116
151
|
|
117
152
|
end
|
@@ -35,17 +35,12 @@ module IRC
|
|
35
35
|
def on_connect(connection, server)
|
36
36
|
end
|
37
37
|
|
38
|
-
# This method gets called
|
39
|
-
def
|
40
|
-
end
|
41
|
-
|
42
|
-
# This method gets called when a private message was received from a channel or an user.
|
43
|
-
def on_private_message(connection, target, message)
|
38
|
+
# This method gets called an error message was received from the IRC server.
|
39
|
+
def on_error(connection, reason)
|
44
40
|
end
|
45
41
|
|
46
|
-
# This method gets called when
|
47
|
-
|
48
|
-
def on_need_more_parameters(connection, nick)
|
42
|
+
# This method gets called when disconnected from a server.
|
43
|
+
def on_disconnect(connection, server, reason = nil)
|
49
44
|
end
|
50
45
|
|
51
46
|
# This method gets called when a notice message was received.
|
@@ -61,9 +56,17 @@ module IRC
|
|
61
56
|
end
|
62
57
|
|
63
58
|
# This method gets called when a user gets kicked from a channel.
|
64
|
-
def on_kick(connection, channel,
|
59
|
+
def on_kick(connection, channel, kicker_user, kicked_user, reason)
|
60
|
+
end
|
61
|
+
|
62
|
+
# This method gets called when a user changes it's nick name.
|
63
|
+
def on_nick(connection, before, after)
|
65
64
|
end
|
66
65
|
|
66
|
+
# This method gets called when the chosen nick name is already in use.
|
67
|
+
def on_nick_already_in_use(connection, nick_name)
|
68
|
+
end
|
69
|
+
|
67
70
|
# This method gets called when a user (possibly us) leaves a channel.
|
68
71
|
def on_part(connection, channel, user)
|
69
72
|
end
|
@@ -80,14 +83,26 @@ module IRC
|
|
80
83
|
def on_pong(connection, daemons)
|
81
84
|
end
|
82
85
|
|
86
|
+
# This method gets called when a private message was received from a channel or an user.
|
87
|
+
def on_private_message(connection, target, message)
|
88
|
+
end
|
89
|
+
|
90
|
+
# This method gets called when the connection was successfully registered.
|
91
|
+
def on_registration(connection)
|
92
|
+
end
|
93
|
+
|
83
94
|
# This method gets called when an error happend during the connection registration.
|
84
95
|
def on_registration_failure(connection, message)
|
85
96
|
end
|
86
97
|
|
87
|
-
# This method gets called when a message from the server
|
98
|
+
# This method gets called when a message from the server was received.
|
88
99
|
def on_server_response(connection, message)
|
89
100
|
end
|
90
101
|
|
102
|
+
# This method gets called when a welcome message was received.
|
103
|
+
def on_welcome(connection, user, text)
|
104
|
+
end
|
105
|
+
|
91
106
|
end
|
92
107
|
|
93
108
|
end
|
@@ -35,6 +35,10 @@ module IRC
|
|
35
35
|
include ConnectionListener
|
36
36
|
include ::Singleton
|
37
37
|
|
38
|
+
# Changes the nick name.
|
39
|
+
def change_nick(context, nick)
|
40
|
+
end
|
41
|
+
|
38
42
|
# Connects to the server.
|
39
43
|
def connect(context, server)
|
40
44
|
end
|
@@ -54,6 +58,10 @@ module IRC
|
|
54
58
|
# Sends a private message to the target (a nick or a channel).
|
55
59
|
def private_message(context, target, message)
|
56
60
|
end
|
61
|
+
|
62
|
+
# Register the connection by sending the password, nick and user commands.
|
63
|
+
def register(context, nick, login, realname)
|
64
|
+
end
|
57
65
|
|
58
66
|
# Sends the command to the server bypassing the command queue.
|
59
67
|
def send_command(context, command)
|
@@ -68,8 +76,13 @@ module IRC
|
|
68
76
|
# ConnectionListener
|
69
77
|
|
70
78
|
# This method gets called when a ping message was received from the server.
|
71
|
-
def on_ping(
|
72
|
-
IRC::Commands::PongCommand.new(servers[0], servers[1]).
|
79
|
+
def on_ping(context, servers)
|
80
|
+
IRC::Commands::PongCommand.new(servers[0], servers[1]).execute(context)
|
81
|
+
end
|
82
|
+
|
83
|
+
# This method gets called when a welcome message was received.
|
84
|
+
def on_welcome(context, user, text)
|
85
|
+
context.nick = user.nick
|
73
86
|
end
|
74
87
|
|
75
88
|
protected
|
data/lib/irc/client/context.rb
CHANGED
@@ -29,6 +29,7 @@ require 'irc/client/context'
|
|
29
29
|
require 'irc/client/connection_listener'
|
30
30
|
require 'irc/client/disconnected_state'
|
31
31
|
require 'irc/client/message_handler'
|
32
|
+
require 'irc/util/nick_generator'
|
32
33
|
require 'log4r'
|
33
34
|
|
34
35
|
module IRC
|
@@ -46,30 +47,40 @@ module IRC
|
|
46
47
|
|
47
48
|
# The connection listeners that get notified when a message was received by the IRC server.
|
48
49
|
attr_reader :connection_listeners
|
49
|
-
|
50
|
-
# The
|
51
|
-
attr_reader :
|
52
|
-
|
53
|
-
# The nick name that is used when connected to an IRC server.
|
54
|
-
attr_reader :nick
|
55
|
-
|
56
|
-
# The real name that is used when connected to an IRC server.
|
57
|
-
attr_reader :realname
|
50
|
+
|
51
|
+
# The nick name generator that used, when automatic nick name change is enabled.
|
52
|
+
attr_reader :nick_generator
|
58
53
|
|
59
54
|
# The context's current state. The initial state is disconnected.
|
60
55
|
attr_reader :state
|
61
56
|
|
62
57
|
# ACCESSOR
|
63
58
|
|
59
|
+
# When set to true the connection object changes the nick name automatically when
|
60
|
+
# the chosen name is already in use.
|
61
|
+
attr_accessor :auto_nick_change
|
62
|
+
|
63
|
+
# The login name that is used when connected to an IRC server.
|
64
|
+
attr_accessor :login
|
65
|
+
|
64
66
|
# The network to which the context is connected., or nil if no connection has been established.
|
65
67
|
attr_accessor :network
|
66
68
|
|
69
|
+
# The nick name that is used when connected to an IRC server.
|
70
|
+
attr_accessor :nick
|
71
|
+
|
72
|
+
# The real name that is used when connected to an IRC server.
|
73
|
+
attr_accessor :realname
|
74
|
+
|
75
|
+
# The options that are supported by the server.
|
76
|
+
attr_accessor :options
|
77
|
+
|
67
78
|
# The IRC server the context is connected to, or nil if no connection has been established.
|
68
79
|
attr_accessor :server
|
69
80
|
|
70
81
|
# The TCPSocket the context uses to talk to the IRC server.
|
71
|
-
|
72
|
-
|
82
|
+
attr_writer :input_socket
|
83
|
+
attr_writer :output_socket
|
73
84
|
|
74
85
|
def initialize(nick = nil, login = nil, realname = nil)
|
75
86
|
|
@@ -82,6 +93,10 @@ module IRC
|
|
82
93
|
@login = login || ENV['USER'] || ENV['USERNAME'] || nick
|
83
94
|
@realname = realname || ENV['USER'] || ENV['USERNAME'] || nick
|
84
95
|
|
96
|
+
# Enable automatic nick change. Use the nick name generator.
|
97
|
+
@auto_nick_change = true
|
98
|
+
@nick_generator = IRC::Util::NickGenerator.new(@nick)
|
99
|
+
|
85
100
|
# A hash to keep track of currently joined channels.
|
86
101
|
@joined_channels = Hash.new
|
87
102
|
|
@@ -97,6 +112,9 @@ module IRC
|
|
97
112
|
# Change into the disconnected state.
|
98
113
|
change_state(DisconnectedState.instance)
|
99
114
|
|
115
|
+
# The options from the isupport messages.
|
116
|
+
@options = Hash.new
|
117
|
+
|
100
118
|
end
|
101
119
|
|
102
120
|
# Adds a new connection listener. The connection listener gets notified when a
|
@@ -110,6 +128,11 @@ module IRC
|
|
110
128
|
send_command_via_queue(command)
|
111
129
|
end
|
112
130
|
|
131
|
+
# Changes the context's state to the next state,
|
132
|
+
def change_nick(new_nick)
|
133
|
+
state.change_nick(self, new_nick)
|
134
|
+
end
|
135
|
+
|
113
136
|
# Changes the context's state to the next state,
|
114
137
|
def change_state(next_state)
|
115
138
|
|
@@ -144,6 +167,16 @@ module IRC
|
|
144
167
|
def disconnect(message = nil)
|
145
168
|
state.disconnect(self, message)
|
146
169
|
end
|
170
|
+
|
171
|
+
# Returns the socket, that is used to receive messages from the server.
|
172
|
+
def input_socket
|
173
|
+
return @input_socket
|
174
|
+
end
|
175
|
+
|
176
|
+
# Returns the socket, that is used to send commands to the server.
|
177
|
+
def output_socket
|
178
|
+
return @output_socket
|
179
|
+
end
|
147
180
|
|
148
181
|
# Joins the given channels.
|
149
182
|
def join(channels)
|
@@ -195,6 +228,11 @@ module IRC
|
|
195
228
|
state.part(self, channels)
|
196
229
|
end
|
197
230
|
|
231
|
+
# Register the connection by sending the password, nick and user commands.
|
232
|
+
def register(nick = nil, login = nil, realname = nil)
|
233
|
+
state.register(self, nick || self.nick, login || self.login, realname || self.realname)
|
234
|
+
end
|
235
|
+
|
198
236
|
# Returns true if a connection to an IRC server has been established and the connection
|
199
237
|
# has been successfully registered.
|
200
238
|
def registered?
|
@@ -27,9 +27,6 @@ require 'irc/client/client_error'
|
|
27
27
|
require 'irc/client/connection'
|
28
28
|
require 'irc/client/connection_state'
|
29
29
|
require 'irc/client/unregistered_state'
|
30
|
-
require 'irc/commands/nick_command'
|
31
|
-
require 'irc/commands/password_command'
|
32
|
-
require 'irc/commands/user_command'
|
33
30
|
require 'irc/models/server'
|
34
31
|
require 'log4r'
|
35
32
|
require 'socket'
|
@@ -46,34 +43,39 @@ module IRC
|
|
46
43
|
@log = Log4r::Logger.new('IRC::Client::DisconnectedState')
|
47
44
|
end
|
48
45
|
|
46
|
+
# Changes the nick name.
|
47
|
+
def change_nick(context, nick)
|
48
|
+
raise ClientError.new("Can't change nick name. Not connected to a server.")
|
49
|
+
end
|
50
|
+
|
49
51
|
# Connects to the server.
|
50
52
|
def connect(context, server)
|
51
53
|
|
52
54
|
@log.debug("#{network_name(context)} Trying to connect to server #{server.hostname} on port #{server.port}.")
|
53
55
|
|
54
56
|
# Establish the connection to the server.
|
55
|
-
context
|
57
|
+
establish_connection(context, server)
|
56
58
|
|
57
59
|
# Set the server to which we are connected.
|
58
60
|
context.server = server
|
59
61
|
|
62
|
+
# Clear the supported options, that get initialized by the isupport messages.
|
63
|
+
context.options = Hash.new
|
64
|
+
|
60
65
|
# Initialize and start the command & message handlers.
|
61
66
|
context.start_command_handler
|
62
|
-
context.start_message_handler
|
67
|
+
context.start_message_handler
|
63
68
|
|
64
69
|
# Change to the unregistered state.
|
65
70
|
change_state(context, UnregisteredState.instance)
|
66
71
|
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
context.send_command_via_queue(IRC::Commands::NickCommand.new(context.nick))
|
73
|
-
context.send_command_via_queue(IRC::Commands::UserCommand.new(context.nick, Socket.gethostname, server.hostname, context.realname))
|
72
|
+
# Notify all connection listeners that we are successfully connected now.
|
73
|
+
context.connection_listeners.each do |connection_listener|
|
74
|
+
connection_listener.on_connect(context, server)
|
75
|
+
end
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
+
rescue Exception => e
|
78
|
+
raise ClientError.new("Can't connect to server #{server.hostname} on port #{server.port}. #{e.message.capitalize}.")
|
77
79
|
|
78
80
|
end
|
79
81
|
|
@@ -97,6 +99,11 @@ module IRC
|
|
97
99
|
raise ClientError.new("Can't send a private message. Not connected to a server.")
|
98
100
|
end
|
99
101
|
|
102
|
+
# Register the connection by sending the password, nick and user commands.
|
103
|
+
def register(context, nick, login, realname)
|
104
|
+
raise ClientError.new("Can't register connection. Not connected to a server.")
|
105
|
+
end
|
106
|
+
|
100
107
|
# Sends the command to the server bypassing the command queue.
|
101
108
|
def send_command(context, command)
|
102
109
|
raise ClientError.new("Can't send command. Not connected to a server.")
|
@@ -116,11 +123,16 @@ module IRC
|
|
116
123
|
|
117
124
|
private
|
118
125
|
|
119
|
-
def establish_connection(server)
|
126
|
+
def establish_connection(context, server)
|
120
127
|
|
121
128
|
# Try to connect to the server before the timeout exceeds.
|
122
129
|
Timeout::timeout(Connection::MAX_CONNECTION_TIMEOUT_IN_SEC) do
|
123
|
-
|
130
|
+
|
131
|
+
socket = TCPSocket.open(server.hostname, server.port)
|
132
|
+
|
133
|
+
context.input_socket = socket
|
134
|
+
context.output_socket = socket
|
135
|
+
|
124
136
|
end
|
125
137
|
|
126
138
|
end
|