Pulse 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/library/pulse.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'yaml'
4
4
  require 'socket'
5
+ require 'pulse/dcc'
5
6
  require 'pulse/user'
6
7
  require 'pulse/queue'
7
8
  require 'pulse/client'
@@ -22,6 +22,8 @@ module Pulse
22
22
  def connect
23
23
  trap 2 do
24
24
  unload_scripts
25
+ @connection.close
26
+ Thread.list.each &:kill
25
27
  transmit :QUIT, "I was interrupted"
26
28
  end
27
29
  @connection.establish
@@ -69,6 +71,15 @@ module Pulse
69
71
  end
70
72
  end
71
73
 
74
+ def send_file path, recipient
75
+ Thread.new path, recipient do
76
+ DCC.new(path).listen do |addr|
77
+ # FIXME: find the right local ip address and convert it to an integer
78
+ transmit :PRIVMSG, recipient, "\x01DCC SEND #{File.basename path} 1489377357 #{addr[1]} #{File.size path}\x01"
79
+ end
80
+ end
81
+ end
82
+
72
83
  private
73
84
 
74
85
  def emit name, *args
@@ -10,6 +10,8 @@ module Pulse
10
10
 
11
11
  def establish
12
12
  TCPSocket.open @settings.hostname, @settings.port do |socket|
13
+ @socket = socket
14
+
13
15
  Thread.start socket, &@queue.method(:process)
14
16
  @delegate.connection_established self
15
17
 
@@ -21,6 +23,10 @@ module Pulse
21
23
  @delegate.connection_terminated self
22
24
  end
23
25
 
26
+ def close
27
+ @socket.close
28
+ end
29
+
24
30
  def transmit name, *arguments
25
31
  Command.new(name, arguments).tap { |this| @queue << this }
26
32
  end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'timeout'
4
+
5
+ module Pulse
6
+ class DCC
7
+ Duration = 150
8
+
9
+ def initialize path
10
+ @path = path
11
+ end
12
+
13
+ def listen
14
+ client = nil
15
+
16
+ TCPServer.open '0.0.0.0', 0 do |server|
17
+ yield server.addr if block_given?
18
+
19
+ begin
20
+ timeout(Duration) { client = server.accept }
21
+ rescue Timeout::Error
22
+ server.close
23
+ end
24
+
25
+ each_chunk { |chunk| client.write chunk } if client
26
+ client.close if client
27
+ end
28
+ end
29
+
30
+ def each_chunk
31
+ File.open @path, ?r do |file|
32
+ yield file.readpartial 1024 until file.eof?
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -54,7 +54,12 @@ module Pulse
54
54
 
55
55
  (@conversations[command.sender.nickname] ||= Conversation.new user, self).tap do |conversation|
56
56
  user.channel = conversation
57
- emit :conversation, user, conversation, message
57
+
58
+ if message.starts_with? "\x01DCC"
59
+ emit :DCC, user, conversation, message.split[1..-1]
60
+ else
61
+ emit :conversation, user, conversation, message
62
+ end
58
63
  end
59
64
  end
60
65
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 0
9
- version: 1.2.0
8
+ - 1
9
+ version: 1.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mikkel Kroman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: executables
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-25 00:00:00 +01:00
17
+ date: 2010-11-26 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -38,6 +38,7 @@ files:
38
38
  - library/pulse/user.rb
39
39
  - library/pulse/conversation.rb
40
40
  - library/pulse/channel.rb
41
+ - library/pulse/dcc.rb
41
42
  - library/pulse/enhancements.rb
42
43
  - library/pulse.rb
43
44
  has_rdoc: true