diff --git a/.gitignore b/.gitignore index 3806b27..b2e7312 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/em-websocket-0.5.1.gem +/em-websocket-*.gem diff --git a/em-websocket-client.rb b/em-websocket-client.rb new file mode 100644 index 0000000..e63b217 --- /dev/null +++ b/em-websocket-client.rb @@ -0,0 +1,67 @@ +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 diff --git a/rubygem-em-websocket.spec b/rubygem-em-websocket.spec index a963656..ad36468 100644 --- a/rubygem-em-websocket.spec +++ b/rubygem-em-websocket.spec @@ -1,18 +1,26 @@ -# Generated from em-websocket-0.5.1.gem by gem2rpm -*- rpm-spec -*- +# Generated from em-websocket-0.5.3.gem by gem2rpm -*- rpm-spec -*- %global gem_name em-websocket Name: rubygem-%{gem_name} -Version: 0.5.1 -Release: 3%{?dist} +Version: 0.5.3 +Release: 7%{?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,15 +38,12 @@ BuildArch: noarch Documentation for %{name}. %prep -gem unpack %{SOURCE0} - -%setup -q -D -T -n %{gem_name}-%{version} - -gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec +%setup -q -n %{gem_name}-%{version} %build # Create the gem as gem install only works on a gem file -gem build %{gem_name}.gemspec +%gemspec_add_dep -g base64 ">= 0.2.0" +gem build ../%{gem_name}-%{version}.gemspec # %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir # by default, so that we can move it into the buildroot in %%install @@ -49,27 +54,18 @@ mkdir -p %{buildroot}%{gem_dir} cp -a .%{gem_dir}/* \ %{buildroot}%{gem_dir}/ - - %check pushd .%{gem_instdir} -# 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 +rspec -I %{dirname:%{SOURCE1}} spec popd %files %dir %{gem_instdir} %exclude %{gem_instdir}/.gitignore -%exclude %{gem_instdir}/em-websocket.gemspec %{gem_libdir} %exclude %{gem_cache} %{gem_spec} +%license %{gem_instdir}/LICENCE %files doc %doc %{gem_docdir} @@ -77,15 +73,75 @@ popd %{gem_instdir}/Gemfile %doc %{gem_instdir}/README.md %{gem_instdir}/Rakefile +%{gem_instdir}/em-websocket.gemspec %{gem_instdir}/examples %{gem_instdir}/spec %changelog -* Fri May 11 2018 Jaroslav Prokop - 1:0.5.1-3 -- The package does not have packages needed for tests in f28 +* Fri Jul 25 2025 Fedora Release Engineering - 1:0.5.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild -* Thu Apr 5 2018 Jaroslav Prokop - 0.5.1-2 -- Enable test suites after needed packages were imported to Fedora. +* Sat Jan 18 2025 Fedora Release Engineering - 1:0.5.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Mon Nov 18 2024 Mamoru TASAKA - 1:0.5.3-5 +- Add runtime dependency for base64 explicitly for ruby34 + +* Fri Jul 19 2024 Fedora Release Engineering - 1:0.5.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jan 26 2024 Fedora Release Engineering - 1:0.5.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 22 2024 Fedora Release Engineering - 1:0.5.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jul 31 2023 Jarek Prokop - 1:0.5.3-1 +- Upgrade to em-websocket 0.5.3. + Resolves: rhbz#2227733 + +* Fri Jul 21 2023 Fedora Release Engineering - 1:0.5.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jan 20 2023 Fedora Release Engineering - 1:0.5.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 1:0.5.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Fri Jan 21 2022 Fedora Release Engineering - 1:0.5.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 1:0.5.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jan 27 2021 Fedora Release Engineering - 1:0.5.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Oct 13 11:47:40 CEST 2020 Pavel Valena - 1:0.5.2-1 +- Update to em-websocket 0.5.2. + Resolves: rhbz#1882156 + +* Wed Jul 29 2020 Fedora Release Engineering - 1:0.5.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jan 30 2020 Fedora Release Engineering - 1:0.5.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 1:0.5.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 1:0.5.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jul 14 2018 Fedora Release Engineering - 1:0.5.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri May 11 2018 Jaroslav Prokop - 1:0.5.1-2 +- Fix version number to 2 instead of 22, bump epoch as I did earlier in f28 branch. + +* Thu Apr 5 2018 Jaroslav Prokop - 0.5.1-22 +- Enable test suites after needed packages were imported to Fedora. * Wed Jan 24 2018 Jaroslav Prokop - 0.5.1-1 - Initial package diff --git a/sources b/sources index 625b1e2..4e2252b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (em-websocket-0.5.1.gem) = ca67da805a67ca7ff840cf58836e6abe5e7a965d50de529cc624b214a1cd8bd4b48ee469ab2266bd80040c94315d59f8fb5903bbf543240fbbe90e80bede0702 +SHA512 (em-websocket-0.5.3.gem) = 67eddb71428331a09ead59e3bf4b1e145c660a000de57db67b974e0f2d11315b8a4f173961190db868f94d9fd74ed312f5164abf9d3f4950e4c22a0aa542a064