tubesock 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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