WEBSocket 0.0.1 → 0.0.9b

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
13
13
  Establish a websocket communication using Ruby standard sockets or Celluloid::IO sockets if required.
14
14
  EOS
15
15
  gem.summary = %q{Establish a websocket communication}
16
- gem.homepage = "https://github.com/Ezveus/ruby-websocket"
16
+ gem.homepage = "https://github.com/Ezveus/WEBSocket"
17
17
 
18
18
  gem.files = `git ls-files`.split($/)
19
19
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -1,3 +1,5 @@
1
+ require "forwardable"
2
+
1
3
  require "websocket"
2
4
  require "uri"
3
5
 
@@ -1,32 +1,116 @@
1
1
  module WEBSocket
2
- class Server
2
+ class Server
3
+ extend Forwardable
4
+ def_delegators :@server, :listen, :sysaccept, :close, :closed?, :addr
3
5
 
4
- if defined? Celluloid::IO
5
- UnderlyingServer = Celluloid::IO::TCPServer
6
- else
7
- UnderlyingServer = TCPSocket
6
+ class AcceptedSocket
7
+ extend Forwardable
8
+ attr_reader :status
9
+
10
+ def_delegators :@socket, :close, :closed?
11
+ def_delegators :@socket, :addr, :peeraddr, :setsockopt
12
+
13
+ def acquire_ownership type
14
+ @socket.acquire_ownership type
15
+ end
16
+
17
+ def connect
18
+ @handshake = WebSocket::Handshake::Server.new
19
+ msg = @socket.readpartial 4096
20
+ @handshake << msg
21
+ until @handshake.finished?
22
+ msg = @socket.readpartial 4096
23
+ @handshake << msg
24
+ end
25
+ if @handshake.valid?
26
+ @socket.write @handshake.to_s
27
+ @status = :connected
28
+ end
29
+ self
30
+ end
31
+
32
+ def evented?
33
+ false
34
+ end
35
+
36
+ def initialize socket
37
+ @socket = socket
38
+ @status = :disconnected
39
+ end
40
+
41
+ def read length = nil, buffer = nil
42
+ s = @socket.read length, buffer
43
+ frame = WebSocket::Frame::Incoming::Server.new :version => @handshake.version
44
+ frame << s
45
+ frame.next.to_s
46
+ end
47
+
48
+ def read_nonblock length, buffer = nil
49
+ buffer ||= ''
50
+
51
+ s = @socket.read length, buffer
52
+ frame = WebSocket::Frame::Incoming::Server.new :version => @handshake.version
53
+ frame << s
54
+ frame.next.to_s
55
+ end
56
+
57
+ def readpartial length, buffer = nil
58
+ s = @socket.readpartial length, buffer
59
+ frame = WebSocket::Frame::Incoming::Server.new :version => @handshake.version
60
+ frame << s
61
+ frame.next.to_s
62
+ end
63
+
64
+ def release_ownership type
65
+ @socket.release_ownership type
66
+ end
67
+
68
+ def to_io
69
+ @socket
70
+ end
71
+
72
+ def wait_readable
73
+ @socket.wait_readable
74
+ end
75
+
76
+ def wait_writable
77
+ @socket.wait_writable
78
+ end
79
+
80
+ def write s
81
+ frame = WebSocket::Frame::Outgoing::Server.new :version => @handshake.version, :data => s, :type => :text
82
+ @socket.write frame.to_s
83
+ end
84
+
85
+ def write_nonblock s
86
+ frame = WebSocket::Frame::Outgoing::Server.new :version => @handshake.version, :data => s, :type => :text
87
+ @socket.write_nonblock frame.to_s
88
+ end
89
+
90
+ def << s
91
+ frame = WebSocket::Frame::Outgoing::Server.new :version => @handshake.version, :data => s, :type => :text
92
+ @socket << frame.to_s
93
+ end
8
94
  end
9
-
95
+
10
96
  def initialize hostname, port
11
- @server = UnderlyingServer.new hostname, port
97
+ @server = Celluloid::IO::TCPServer.new hostname, port
12
98
  end
13
99
 
14
100
  def accept
15
- WEBSocket::Socket.from_underlying_socket @server.accept
101
+ AcceptedSocket.new(@server.accept).connect
16
102
  end
17
103
 
18
104
  def accept_nonblock
19
- Celluloid::IO::TCPSocket.from_ruby_socket @server.accept_nonblock
105
+ AcceptedSocket.new(@server.accept_nonblock).connect
20
106
  end
21
107
 
22
108
  def to_io
23
109
  @server
24
110
  end
25
111
 
26
- # Are we inside a Celluloid ::IO actor?
27
112
  def evented?
28
- actor = Thread.current[:actor]
29
- actor && actor.mailbox.is_a?(Celluloid::IO::Mailbox)
113
+ false
30
114
  end
31
115
  end
32
116
  end
@@ -1,16 +1,12 @@
1
1
  module WEBSocket
2
2
  class Socket
3
+ extend Forwardable
3
4
  attr_reader :status
4
5
 
5
- def self.from_underlying_socket socket
6
- end
6
+ def_delegators :@socket, :close, :closed?
7
+ def_delegators :@socket, :addr, :peeraddr, :setsockopt
7
8
 
8
9
  def acquire_ownership type
9
- @socket.acquire_ownership type
10
- end
11
-
12
- def close
13
- @socket.close
14
10
  end
15
11
 
16
12
  def connect host, port
@@ -22,7 +18,7 @@ module WEBSocket
22
18
  end
23
19
 
24
20
  def evented?
25
- @socket.evented?
21
+ false
26
22
  end
27
23
 
28
24
  def initialize rhost, rport, lhost = nil, lport = nil
@@ -38,6 +34,15 @@ module WEBSocket
38
34
  frame.to_s
39
35
  end
40
36
 
37
+ def read_nonblock length, buffer = nil
38
+ buffer ||= ''
39
+
40
+ @socket.read_nonblock length, buffer
41
+ frame = WebSocket::Frame::Incoming::Client.new :version => @handshake.version
42
+ frame << buffer
43
+ frame.to_s
44
+ end
45
+
41
46
  def readpartial length, buffer = nil
42
47
  s = @socket.readpartial length, buffer
43
48
  frame = WebSocket::Frame::Incoming::Client.new :version => @handshake.version
@@ -46,7 +51,6 @@ module WEBSocket
46
51
  end
47
52
 
48
53
  def release_ownership type
49
- @socket.release_ownership type
50
54
  end
51
55
 
52
56
  def to_io
@@ -54,11 +58,9 @@ module WEBSocket
54
58
  end
55
59
 
56
60
  def wait_readable
57
- @socket.wait_readable
58
61
  end
59
62
 
60
63
  def wait_writable
61
- @socket.wait_writable
62
64
  end
63
65
 
64
66
  def write s
@@ -66,6 +68,11 @@ module WEBSocket
66
68
  @socket.write frame.to_s
67
69
  end
68
70
 
71
+ def write_nonblock s
72
+ frame = WebSocket::Frame::Outgoing::Client.new :version => @handshake.version, :data => s, :type => :text
73
+ @socket.write_nonblock frame.to_s
74
+ end
75
+
69
76
  def << s
70
77
  frame = WebSocket::Frame::Outgoing::Client.new :version => @handshake.version, :data => s, :type => :text
71
78
  @socket << frame.to_s
@@ -1,4 +1,4 @@
1
1
  module WEBSocket
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.9b"
3
3
  DATE = Time.now.to_s.split[0]
4
4
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: WEBSocket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.9b
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matthieu "Ezveus" Ciappara
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-09 00:00:00.000000000 Z
12
+ date: 2013-01-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: websocket
@@ -57,7 +57,7 @@ files:
57
57
  - lib/WEBSocket/server.rb
58
58
  - lib/WEBSocket/socket.rb
59
59
  - lib/WEBSocket/version.rb
60
- homepage: https://github.com/Ezveus/ruby-websocket
60
+ homepage: https://github.com/Ezveus/WEBSocket
61
61
  licenses: []
62
62
  post_install_message:
63
63
  rdoc_options: []
@@ -72,9 +72,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
72
  required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ! '>='
75
+ - - ! '>'
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 1.3.1
78
78
  requirements: []
79
79
  rubyforge_project:
80
80
  rubygems_version: 1.8.24