tubesock 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/lib/tubesock.rb +10 -11
- data/lib/tubesock/hijack.rb +6 -3
- data/lib/tubesock/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e34c2f3cd416319f09063d1420a92bb4de54f41
|
4
|
+
data.tar.gz: 35232dc37e37a9abd7b2595d4eeb8b9e9b252b39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81501d0966fd116753dfe71231626c3cda459672fef63bde5f12a0df305ed91d89fafba1179a29ea825562aa6052bf40c94d0e72c568e46b3bdba2d5daa417f2
|
7
|
+
data.tar.gz: 5a06e190adfd2967405e22af868f0967d671b20613c30682fa4bf3d925579e9f49df83d582c4729f640c61cdde314e86d86f309f726d0891e4370f3f36cbab87
|
data/lib/tubesock.rb
CHANGED
@@ -8,6 +8,10 @@ class Tubesock
|
|
8
8
|
def initialize(socket, version)
|
9
9
|
@socket = socket
|
10
10
|
@version = version
|
11
|
+
|
12
|
+
@open_handlers = []
|
13
|
+
@message_handlers = []
|
14
|
+
@close_handlers = []
|
11
15
|
end
|
12
16
|
|
13
17
|
def self.hijack(env)
|
@@ -41,15 +45,15 @@ class Tubesock
|
|
41
45
|
end
|
42
46
|
|
43
47
|
def onopen(&block)
|
44
|
-
@
|
48
|
+
@open_handlers << block
|
45
49
|
end
|
46
50
|
|
47
51
|
def onmessage(&block)
|
48
|
-
@
|
52
|
+
@message_handlers << block
|
49
53
|
end
|
50
54
|
|
51
55
|
def onclose(&block)
|
52
|
-
@
|
56
|
+
@close_handlers << block
|
53
57
|
end
|
54
58
|
|
55
59
|
def listen
|
@@ -57,6 +61,7 @@ class Tubesock
|
|
57
61
|
Thread.current.abort_on_exception = true
|
58
62
|
framebuffer = WebSocket::Frame::Incoming::Server.new(version: @version)
|
59
63
|
running = true
|
64
|
+
@open_handlers.each(&:call)
|
60
65
|
while running
|
61
66
|
data, addrinfo = @socket.recvfrom(2000)
|
62
67
|
running = false if data == ""
|
@@ -66,18 +71,12 @@ class Tubesock
|
|
66
71
|
if data == ""
|
67
72
|
running = false
|
68
73
|
else
|
69
|
-
@
|
74
|
+
@message_handlers.each{|h| h.call(HashWithIndifferentAccess.new(JSON.load(data))) }
|
70
75
|
end
|
71
76
|
end
|
72
77
|
end
|
73
|
-
@
|
78
|
+
@close_handlers.each(&:call)
|
74
79
|
@socket.close
|
75
80
|
end
|
76
|
-
@openhandler.call if @openhandler
|
77
|
-
end
|
78
|
-
|
79
|
-
def close
|
80
|
-
@socket.close if @socket.open?
|
81
|
-
@closehandler.call
|
82
81
|
end
|
83
82
|
end
|
data/lib/tubesock/hijack.rb
CHANGED
@@ -6,9 +6,12 @@ class Tubesock
|
|
6
6
|
included do
|
7
7
|
def hijack
|
8
8
|
if Tubesock.websocket?(env)
|
9
|
-
|
10
|
-
yield
|
11
|
-
|
9
|
+
sock = Tubesock.hijack(env)
|
10
|
+
yield sock
|
11
|
+
sock.onclose do
|
12
|
+
ActiveRecord::Base.clear_active_connections!
|
13
|
+
end
|
14
|
+
sock.listen
|
12
15
|
render text: nil, status: -1
|
13
16
|
else
|
14
17
|
render text: "Not found", status: :not_found
|
data/lib/tubesock/version.rb
CHANGED