objectsframework-pubsub 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/objectsframework/pubsub.rb +65 -0
  3. metadata +72 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 782403b1edeb8911d1e87224dc95c21291f99bed
4
+ data.tar.gz: 760c22a133ce1254a33974ea4c0da814550bbd39
5
+ SHA512:
6
+ metadata.gz: 234403e83e8974c8bb598250ef9fc17a472f31370ba915864bd96e872559adfde7bf0641e7b27fe11dac78f5250084f55c00e7c80d3aeb95a8e630617543a49f
7
+ data.tar.gz: b4fc8d78f731d9e04ce875f652d8f0050fff96b22ca853b37e8253fd34571e0aa50ce1aff7eba01f805205ec665e5dc95633cc3c82b4863f7941deebbd2dc792
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+ require 'tubesock'
3
+
4
+ module ObjectsFramework
5
+ module PubSub
6
+ @@channels = {}
7
+
8
+ def self.included(child)
9
+ child.add_hook :filter => "request.capture", :method => "pubsub_capture_request"
10
+ child.extend ClassExtend
11
+ end
12
+
13
+ def pubsub_capture_request
14
+ # TODO: hijack rack request
15
+
16
+ if(@env["HTTP_UPGRADE"] == "websocket")
17
+ # Request is websockets hijacking
18
+ tubesock = Tubesock.hijack(@env)
19
+
20
+ @@channels[request.path.split("/")[2]].sockets << tubesock
21
+
22
+ tubesock.onclose do
23
+ @@channels[request.path.split("/")[2]].sockets.delete(tubesock)
24
+ end
25
+
26
+ tubesock.listen
27
+
28
+ [-1, {}, []]
29
+ else
30
+ return continue
31
+ end
32
+ end
33
+
34
+ module ClassExtend
35
+ def publish(channelName)
36
+ channels = class_variable_get(:@@channels)
37
+ channel = ObjectsFramework::PubSub::Channel.new(channelName)
38
+
39
+ Thread.new do
40
+ yield channel
41
+ end
42
+
43
+ channels[channelName] = channel
44
+
45
+ class_variable_set(:@@channels, channels)
46
+ end
47
+ end
48
+
49
+ class Channel
50
+ attr_accessor :sockets
51
+
52
+ def initialize(channelName)
53
+ @channelName = ""
54
+ @sockets = []
55
+ end
56
+
57
+
58
+ def send(message)
59
+ @sockets.each do |socket|
60
+ socket.send_data message
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: objectsframework-pubsub
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bram Vandenbogaerde
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tubesock
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: PubSub (with websockets) for ObjectsFramework, documentation see Github
42
+ email:
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/objectsframework/pubsub.rb
48
+ homepage: https://github.com/bramvdbogaerde/objectsframework-pubsub
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.3.0
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: PubSub for ObjectsFramework.
72
+ test_files: []