se-realtime 0.0.0.beta2 → 0.0.1
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/Gemfile.lock +4 -2
- data/lib/se/realtime/version.rb +1 -1
- data/lib/se/realtime/websocket.rb +25 -3
- data/se-realtime.gemspec +1 -0
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df6fdee6c38b71e56a2aabc911c610f18e1d6da92770d8a3fc2190eb35e1a4a6
|
4
|
+
data.tar.gz: 29bd4cd03a4fd5c6c06eca9855c039b392308a8ad2f516d8b8d0073713bda294
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c884b402278a17f3712839fb130e29cb5a1d7d26ac1f94e1a250a616bf349775209887ae3e604beb93a0282dbeb1c54e03a9376e0c804456407df3e6d6d8d877
|
7
|
+
data.tar.gz: 62fba0dba0aa3c9b9d0a43bae3f01d92afaa21911d2b8ed00f11cb047c374e4bc569b4c4f91d450d8d1c133ea287b39f9152622c368c3f7ad0c6e700aa03a260
|
data/Gemfile.lock
CHANGED
@@ -4,6 +4,7 @@ PATH
|
|
4
4
|
se-realtime (0.0.0.beta2)
|
5
5
|
mechanize (~> 2.7)
|
6
6
|
nokogiri (~> 1.8)
|
7
|
+
openssl (~> 2.1)
|
7
8
|
permessage_deflate (~> 0.1)
|
8
9
|
websocket-driver (~> 0.6)
|
9
10
|
|
@@ -30,14 +31,15 @@ GEM
|
|
30
31
|
minitest (5.10.3)
|
31
32
|
net-http-digest_auth (1.4.1)
|
32
33
|
net-http-persistent (2.9.4)
|
33
|
-
nokogiri (1.8.
|
34
|
+
nokogiri (1.8.2)
|
34
35
|
mini_portile2 (~> 2.3.0)
|
35
36
|
ntlm-http (0.1.1)
|
37
|
+
openssl (2.1.0)
|
36
38
|
permessage_deflate (0.1.4)
|
37
39
|
rake (10.5.0)
|
38
40
|
unf (0.1.4)
|
39
41
|
unf_ext
|
40
|
-
unf_ext (0.0.7.
|
42
|
+
unf_ext (0.0.7.5)
|
41
43
|
webrobots (0.1.2)
|
42
44
|
websocket-driver (0.7.0)
|
43
45
|
websocket-extensions (>= 0.1.0)
|
data/lib/se/realtime/version.rb
CHANGED
@@ -4,6 +4,7 @@ require "websocket/driver"
|
|
4
4
|
require "json"
|
5
5
|
require "permessage_deflate"
|
6
6
|
require "open-uri"
|
7
|
+
require 'openssl'
|
7
8
|
|
8
9
|
module SE
|
9
10
|
module Realtime
|
@@ -11,14 +12,28 @@ module SE
|
|
11
12
|
attr_reader :url, :thread, :driver
|
12
13
|
attr_accessor :handler
|
13
14
|
|
15
|
+
# If you're looking back it this, look at super_logger (ws_super_logger, panic switch logging) and logger (realtime, messages (and some warnings))
|
16
|
+
|
14
17
|
def initialize(url, cookies, &handler)
|
18
|
+
@super_logger = Logger.new('ws_super_logger.log')
|
19
|
+
|
15
20
|
@uri = URI.parse(url)
|
16
21
|
@url = "ws#{@uri.scheme.split("")[4]}://#{@uri.host}"
|
17
22
|
@driver = WebSocket::Driver.client(self)
|
18
|
-
|
23
|
+
if @uri.scheme.split("")[4] == 's'
|
24
|
+
@socket = TCPSocket.new(@uri.host, 443)
|
25
|
+
@super_logger.info "Opened TCP socket for (port 443) #{@uri} (#{@socket})"
|
26
|
+
@socket = OpenSSL::SSL::SSLSocket.new(@socket)
|
27
|
+
@socket.connect
|
28
|
+
@super_logger.info "Upgrade TCP socket to SSL socket socket for #{@uri} (#{@socket})"
|
29
|
+
else
|
30
|
+
@socket = TCPSocket.new(@uri.host, 80)
|
31
|
+
@super_logger.info "Opened TCP socket for (port 80) #{@uri} (#{@socket})"
|
32
|
+
end
|
19
33
|
@handler = handler
|
20
34
|
@logger = Logger.new "realtime.log"
|
21
35
|
@restart = true
|
36
|
+
@super_logger.info "Set @restart to #{@restart}"
|
22
37
|
|
23
38
|
@driver.add_extension PermessageDeflate
|
24
39
|
@driver.set_header "Cookies", cookies if cookies
|
@@ -28,6 +43,7 @@ module SE
|
|
28
43
|
|
29
44
|
@driver.on :open, ->(_e) do
|
30
45
|
send "155-questions-active"
|
46
|
+
@super_logger.info "Socket open. Subscribed to 155-questions-active"
|
31
47
|
@logger.info "WebSocket is open!"
|
32
48
|
end
|
33
49
|
|
@@ -43,8 +59,10 @@ module SE
|
|
43
59
|
|
44
60
|
@driver.on :close, ->(_e) do
|
45
61
|
@logger.info "Realtime WebSocket is closing."
|
62
|
+
@super_logger.info "Socket was closed. @restart == #{@restart}"
|
46
63
|
if @restart
|
47
64
|
@logger.info "Attempting to reopen websocket..."
|
65
|
+
@super_logger.info "Attempting to reopen socket"
|
48
66
|
@driver.start
|
49
67
|
end
|
50
68
|
end
|
@@ -56,16 +74,19 @@ module SE
|
|
56
74
|
@thread = Thread.new do
|
57
75
|
trap("SIGINT") do
|
58
76
|
@restart = false
|
77
|
+
@super_logger.info "Got SIGINT. Dying."
|
59
78
|
close
|
60
79
|
Thread.exit
|
61
80
|
end
|
62
81
|
loop do
|
63
82
|
begin
|
64
|
-
@driver.parse(@socket.recv(1))
|
83
|
+
@driver.parse(@socket.is_a?(TCPSocket) ? @socket.recv(1) : @socket.sysread(1))
|
65
84
|
rescue IOError, SystemCallError => e
|
85
|
+
@super_logger.warn "Got some kind of interrupt in the thread. Panic."
|
66
86
|
@logger.warn "Recieved #{e} closing TCP socket. You shouldn't be worried :)"
|
67
87
|
end
|
68
88
|
end
|
89
|
+
@super_logger.warn "Left TCPSocket.recv loop. If you're reading this, panic."
|
69
90
|
end
|
70
91
|
|
71
92
|
at_exit { @thread.join }
|
@@ -82,8 +103,9 @@ module SE
|
|
82
103
|
end
|
83
104
|
|
84
105
|
def close
|
106
|
+
@super_logger.warn "Was told to close. Was sad."
|
85
107
|
@driver.close
|
86
|
-
@socket.shutdown
|
108
|
+
@socket.is_a?(TCPSocket) ? @socket.shutdown : @socket.sysclose
|
87
109
|
rescue IOError, Errno::ENOTCONN => e
|
88
110
|
@logger.error "Recieved #{e.class} trying to close websocket. Ignoring..."
|
89
111
|
end
|
data/se-realtime.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: se-realtime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thesecretmaster
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.6'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: openssl
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.1'
|
111
125
|
description:
|
112
126
|
email:
|
113
127
|
- thesecretmaster@developingtechnician.com
|
@@ -144,9 +158,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
158
|
version: '0'
|
145
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
160
|
requirements:
|
147
|
-
- - "
|
161
|
+
- - ">="
|
148
162
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
163
|
+
version: '0'
|
150
164
|
requirements: []
|
151
165
|
rubyforge_project:
|
152
166
|
rubygems_version: 2.7.3
|