rubot 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/extensions.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  dir = File.dirname(__FILE__)
2
2
 
3
+ require "#{dir}/extensions/object"
3
4
  require "#{dir}/extensions/string"
4
5
  require "#{dir}/extensions/kernel"
@@ -0,0 +1,7 @@
1
+ class Object
2
+ def eigen_class
3
+ class << self
4
+ self
5
+ end
6
+ end
7
+ end
data/lib/irc.rb CHANGED
@@ -2,6 +2,7 @@ module Rubot
2
2
  module Irc
3
3
  smartload :Constants
4
4
  smartload :Message
5
+ smartload :MessageQueue
5
6
  smartload :Server
6
7
  end
7
8
  end
@@ -0,0 +1,40 @@
1
+ module Rubot
2
+ module Irc
3
+ class MessageQueue
4
+ attr_accessor :delay
5
+
6
+ def initialize(delay)
7
+ @delay = delay
8
+ @lock = Mutex.new
9
+ @queue = []
10
+ end
11
+
12
+ def method_missing(method, *args, &block)
13
+ if block
14
+ eigen_class.instance_eval do
15
+ define_method method do |destination, *messages|
16
+ messages.flatten.each do |message|
17
+ @queue << {:block => block, :destination => destination, :message => message}
18
+ end
19
+ @lock.synchronize do
20
+ @thread = Thread.new { flush } unless @thread && @thread.alive?
21
+ end
22
+ end
23
+ end
24
+ nil
25
+ else
26
+ super
27
+ end
28
+ end
29
+
30
+ private
31
+ def flush
32
+ until @queue.empty?
33
+ element = @queue.shift
34
+ element[:block].call(element[:destination], element[:message])
35
+ sleep @delay unless @queue.empty?
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
data/lib/irc/server.rb CHANGED
@@ -12,6 +12,16 @@ module Rubot
12
12
  end
13
13
  @channels = @channels.split(",").collect(&:strip)
14
14
  @dispatcher = dispatcher
15
+
16
+ @message_queue = MessageQueue.new(@message_delay)
17
+
18
+ @message_queue.message do |destination, message|
19
+ raw "PRIVMSG #{destination} :#{message}"
20
+ end
21
+
22
+ @message_queue.action do |destination, action|
23
+ raw "PRIVMSG #{destination} :\001ACTION #{action}\001"
24
+ end
15
25
  end
16
26
 
17
27
  def connect
@@ -55,14 +65,16 @@ module Rubot
55
65
  end
56
66
 
57
67
  def msg(destination, message)
58
- message = message.to_s.split("\n") unless message.is_a? Array
59
- build_message_array(message).each do |l|
60
- raw "PRIVMSG #{destination} :#{l}"
61
- end
68
+ @message_queue.message(destination, message)
69
+ #message = message.to_s.split("\n") unless message.is_a? Array
70
+ #build_message_array(message).each do |l|
71
+ # raw "PRIVMSG #{destination} :#{l}"
72
+ #end
62
73
  end
63
74
 
64
75
  def action(destination, message)
65
- msg(destination, "\001ACTION #{message}\001")
76
+ @message_queue.action(destination, message)
77
+ #msg(destination, "\001ACTION #{message}\001")
66
78
  end
67
79
 
68
80
  def raw(message)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Chris Thorn
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-04 00:00:00 -09:00
17
+ date: 2010-03-18 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -33,11 +33,13 @@ files:
33
33
  - lib/core/runner.rb
34
34
  - lib/core.rb
35
35
  - lib/extensions/kernel.rb
36
+ - lib/extensions/object.rb
36
37
  - lib/extensions/string.rb
37
38
  - lib/extensions.rb
38
39
  - lib/init/bundler.rb
39
40
  - lib/irc/constants.rb
40
41
  - lib/irc/message.rb
42
+ - lib/irc/message_queue.rb
41
43
  - lib/irc/server.rb
42
44
  - lib/irc.rb
43
45
  - lib/rubot.rb