Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81461a9144 | ||
|
|
963b4725b6 | ||
|
|
05b2d9005b | ||
|
|
dfb2bf0dab |
2 changed files with 16 additions and 80 deletions
|
|
@ -1,67 +0,0 @@
|
|||
require 'eventmachine'
|
||||
require 'uri'
|
||||
require 'websocket'
|
||||
|
||||
module EventMachine
|
||||
class WebSocketClient < Connection
|
||||
include Deferrable
|
||||
|
||||
attr_accessor :url
|
||||
attr_accessor :protocol_version
|
||||
attr_accessor :origin
|
||||
|
||||
def self.connect(uri, opts={})
|
||||
p_uri = URI.parse(uri)
|
||||
conn = EM.connect(p_uri.host, p_uri.port || 80, self) do |c|
|
||||
c.url = uri
|
||||
c.protocol_version = opts[:version]
|
||||
c.origin = opts[:origin]
|
||||
end
|
||||
end
|
||||
|
||||
def post_init
|
||||
@handshaked = false
|
||||
@frame = ::WebSocket::Frame::Incoming::Client.new
|
||||
end
|
||||
|
||||
def connection_completed
|
||||
@connect.yield if @connect
|
||||
@hs = ::WebSocket::Handshake::Client.new(:url => @url,
|
||||
:origin => @origin,
|
||||
:version => @protocol_version)
|
||||
send_data @hs.to_s
|
||||
end
|
||||
|
||||
def stream &cb; @stream = cb; end
|
||||
def connected &cb; @connect = cb; end
|
||||
def disconnect &cb; @disconnect = cb; end
|
||||
|
||||
def receive_data data
|
||||
if !@handshaked
|
||||
@hs << data
|
||||
if @hs.finished?
|
||||
@handshaked = true
|
||||
succeed
|
||||
end
|
||||
|
||||
receive_data(@hs.leftovers) if @hs.leftovers
|
||||
else
|
||||
@frame << data
|
||||
while msg = @frame.next
|
||||
@stream.call(msg) if @stream
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_msg(s, args={})
|
||||
type = args[:type] || :text
|
||||
frame = ::WebSocket::Frame::Outgoing::Client.new(:data => s, :type => type, :version => @hs.version)
|
||||
send_data frame.to_s
|
||||
end
|
||||
|
||||
def unbind
|
||||
super
|
||||
@disconnect.call if @disconnect
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -3,23 +3,16 @@
|
|||
|
||||
Name: rubygem-%{gem_name}
|
||||
Version: 0.5.1
|
||||
Release: 22%{?dist}
|
||||
Release: 3%{?dist}
|
||||
Epoch: 1
|
||||
Summary: EventMachine based WebSocket server
|
||||
License: MIT
|
||||
URL: http://github.com/igrigorik/em-websocket
|
||||
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
|
||||
# Test suite depends on specific version of em-websocket-client
|
||||
# that isn't pushed into master branch:
|
||||
# https://github.com/igrigorik/em-websocket/blob/master/Gemfile#L5
|
||||
# Luckily, the package is actually just one small file:
|
||||
# https://github.com/movitto/em-websocket-client/blob/expose-websocket-api/lib/em-websocket-client.rb
|
||||
Source1: https://raw.githubusercontent.com/movitto/em-websocket-client/expose-websocket-api/lib/em-websocket-client.rb
|
||||
BuildRequires: ruby(release)
|
||||
BuildRequires: rubygems-devel
|
||||
BuildRequires: ruby
|
||||
BuildRequires: rubygem(rspec)
|
||||
BuildRequires: rubygem(em-http-request)
|
||||
BuildRequires: rubygem(em-websocket-client)
|
||||
BuildRequires: rubygem(em-spec)
|
||||
BuildRequires: rubygem(http_parser.rb)
|
||||
BuildArch: noarch
|
||||
|
|
@ -30,7 +23,7 @@ EventMachine based WebSocket server.
|
|||
|
||||
%package doc
|
||||
Summary: Documentation for %{name}
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
BuildArch: noarch
|
||||
|
||||
%description doc
|
||||
|
|
@ -60,7 +53,14 @@ cp -a .%{gem_dir}/* \
|
|||
|
||||
%check
|
||||
pushd .%{gem_instdir}
|
||||
rspec -I %{dirname:%{SOURCE1}} spec
|
||||
# we do not have packages needed for tests in fedora
|
||||
sed -i '/em-http/ s/^/#/' spec/helper.rb
|
||||
sed -i '/em-websocket-client/ s/^/#/' spec/helper.rb
|
||||
|
||||
mv spec/integration/common_spec.rb{,.bak}
|
||||
mv spec/integration/draft75_spec.rb{,.bak}
|
||||
|
||||
rspec spec
|
||||
popd
|
||||
|
||||
%files
|
||||
|
|
@ -81,8 +81,11 @@ popd
|
|||
%{gem_instdir}/spec
|
||||
|
||||
%changelog
|
||||
* Wed Jan 24 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 0.5.1-2
|
||||
- Enable test suites after needed packages were imported to Fedora.
|
||||
* Fri May 11 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 1:0.5.1-3
|
||||
- The package does not have packages needed for tests in f28
|
||||
|
||||
* Thu Apr 5 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 0.5.1-2
|
||||
- Enable test suites after needed packages were imported to Fedora.
|
||||
|
||||
* Wed Jan 24 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 0.5.1-1
|
||||
- Initial package
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue