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}
|
Name: rubygem-%{gem_name}
|
||||||
Version: 0.5.1
|
Version: 0.5.1
|
||||||
Release: 22%{?dist}
|
Release: 3%{?dist}
|
||||||
|
Epoch: 1
|
||||||
Summary: EventMachine based WebSocket server
|
Summary: EventMachine based WebSocket server
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://github.com/igrigorik/em-websocket
|
URL: http://github.com/igrigorik/em-websocket
|
||||||
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
|
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: ruby(release)
|
||||||
BuildRequires: rubygems-devel
|
BuildRequires: rubygems-devel
|
||||||
BuildRequires: ruby
|
BuildRequires: ruby
|
||||||
BuildRequires: rubygem(rspec)
|
BuildRequires: rubygem(rspec)
|
||||||
BuildRequires: rubygem(em-http-request)
|
|
||||||
BuildRequires: rubygem(em-websocket-client)
|
|
||||||
BuildRequires: rubygem(em-spec)
|
BuildRequires: rubygem(em-spec)
|
||||||
BuildRequires: rubygem(http_parser.rb)
|
BuildRequires: rubygem(http_parser.rb)
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
@ -30,7 +23,7 @@ EventMachine based WebSocket server.
|
||||||
|
|
||||||
%package doc
|
%package doc
|
||||||
Summary: Documentation for %{name}
|
Summary: Documentation for %{name}
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
%description doc
|
%description doc
|
||||||
|
|
@ -60,7 +53,14 @@ cp -a .%{gem_dir}/* \
|
||||||
|
|
||||||
%check
|
%check
|
||||||
pushd .%{gem_instdir}
|
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
|
popd
|
||||||
|
|
||||||
%files
|
%files
|
||||||
|
|
@ -81,8 +81,11 @@ popd
|
||||||
%{gem_instdir}/spec
|
%{gem_instdir}/spec
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Jan 24 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 0.5.1-2
|
* Fri May 11 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 1:0.5.1-3
|
||||||
- Enable test suites after needed packages were imported to Fedora.
|
- 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
|
* Wed Jan 24 2018 Jaroslav Prokop <jar.prokop@volny.cz> - 0.5.1-1
|
||||||
- Initial package
|
- Initial package
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue