peatio1.9 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21e80cf48d4e7fdde91bdcc54415b5de89382fc3d771f4a1d10ae10593e1c209
4
- data.tar.gz: 3e9328c73c580e323ad011c1c1c54f21c9d2aa5baf0a7ec4c4f933801c975188
3
+ metadata.gz: 9c27f83d3d8bcd476b619d1935c563452c4b7290300907326c651d4a24bcc0b0
4
+ data.tar.gz: 45a725ae726b661d0a787db208a03b02864c3079863ba4aa5516fa339d3cfede
5
5
  SHA512:
6
- metadata.gz: 777ac8d99de880e823479b65987d689f4ebf353b79d6faab850d2e263530e4f2aeafe4cef938771743ba49ab4cde091626373a50ca4ae69eb4c9a5ba3f27c372
7
- data.tar.gz: 13081c7908134089e5c5b4842fdeac92ffeed6a9c00165d38ef98239e9c5a6f47def17610342fc4cd6686fe354a5e85cb8f22cc5b9776085128be23c98e8b158
6
+ metadata.gz: ef2e5cea2866ffc70d4fb0498da9ba8d26ad3120f9dac860f7a8402c93d37fe4d176eee0f485a1923b73ba938636f951d70844bf284df02143f306e526a99a80
7
+ data.tar.gz: 76aaf1deab676935b9ebb52a81966682963497c17ea7010d8aed09ae92259fbcec94717e6e5b604162f943d826c792a1751eae023853561752ba8b63070d01c1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- peatio1.9 (0.4.4)
4
+ peatio1.9 (0.4.5)
5
5
  amqp
6
6
  bunny
7
7
  clamp
@@ -40,7 +40,6 @@ GEM
40
40
  jaro_winkler (1.5.1)
41
41
  json (2.3.1)
42
42
  jwt (2.2.1)
43
- mysql2 (0.5.3)
44
43
  mysql2 (0.5.3-x64-mingw32)
45
44
  parallel (1.12.1)
46
45
  parser (2.5.1.2)
data/README.md CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'peatio'
12
+ gem 'peatio1.9', '0.4.4', require: 'peatio'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,7 +18,7 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install peatio
21
+ $ gem install peatio1.9
22
22
 
23
23
  ## Usage
24
24
 
@@ -35,7 +35,7 @@ module Peatio::MQ::Events
35
35
  end
36
36
  end
37
37
 
38
- def initialize(socket, streams)
38
+ def initialize(socket, streams = {})
39
39
  @socket = socket
40
40
  @streams = streams
41
41
 
@@ -4,7 +4,6 @@ module Peatio::Ranger
4
4
  @authenticator = authenticator
5
5
  @socket = socket
6
6
  @logger = logger
7
- @streams = []
8
7
  end
9
8
 
10
9
  def send(method, data)
@@ -13,21 +12,36 @@ module Peatio::Ranger
13
12
  @socket.send payload
14
13
  end
15
14
 
16
- def handle(msg)
17
- authorized = false
18
- begin
19
- data = JSON.parse(msg)
15
+ def update_streams
16
+ @socket.instance_variable_set(:@connection_handler, @client)
17
+ end
20
18
 
21
- token = data["jwt"]
19
+ def subscribe(streams)
20
+ raise "Streams must be an array of strings" unless streams.is_a?(Array)
21
+ streams.each do |stream|
22
+ next if stream.nil?
23
+ @client.streams[stream] = true
24
+ end
25
+ send :success, message: "subscribed", streams: @client.streams.keys
26
+ end
22
27
 
23
- payload = @authenticator.authenticate!(token)
28
+ def unsubscribe(streams)
29
+ raise "Streams must be an array of strings" unless streams.is_a?(Array)
30
+ streams.each do |stream|
31
+ next if stream.nil?
32
+ @client.streams.delete(stream)
33
+ end
34
+ send :success, message: "unsubscribed", streams: @client.streams.keys
35
+ end
24
36
 
37
+ def authenticate(jwt)
38
+ begin
39
+ token = data["jwt"]
40
+ payload = @authenticator.authenticate!(token)
25
41
  authorized = true
26
- rescue JSON::ParserError
27
42
  rescue => error
28
43
  @logger.error error.message
29
44
  end
30
-
31
45
  if !authorized
32
46
  send :error, message: "Authentication failed."
33
47
  return
@@ -36,27 +50,50 @@ module Peatio::Ranger
36
50
  @client.user = payload[:uid]
37
51
  @client.authorized = true
38
52
 
39
- @logger.info "ranger: user #{@client.user} authenticated #{@streams}"
40
-
53
+ @logger.info "ranger: user #{@client.user} authenticated"
41
54
  send :success, message: "Authenticated."
55
+
42
56
  end
43
57
 
44
- def handshake(handshake)
45
- query = URI::decode_www_form(handshake.query_string)
58
+ def handle(msg)
59
+ authorized = false
60
+ begin
61
+ data = JSON.parse(msg)
62
+
63
+ case data["event"]
64
+ when "subscribe"
65
+ subscribe data["streams"]
66
+ when "unsubscribe"
67
+ unsubscribe data["streams"]
68
+ when "jwt"
69
+ authenticate data["jwt"]
46
70
 
47
- @streams = query.map do |item|
48
- if item.first == "stream"
49
- item.last
50
71
  end
72
+ rescue JSON::ParserError
73
+ rescue => error
74
+ @logger.error error.message
51
75
  end
76
+ end
52
77
 
53
- @logger.info "ranger: WebSocket connection openned, streams: #{@streams}"
54
-
55
- @client = Peatio::MQ::Events::Client.new(
56
- @socket, @streams,
57
- )
58
-
59
- @socket.instance_variable_set(:@connection_handler, @client)
78
+ def handshake(hs)
79
+ @client = Peatio::MQ::Events::Client.new(@socket)
80
+ query = URI::decode_www_form(hs.query_string)
81
+ subscribe(query.map {|item| item.last if item.first == "stream"})
82
+ @logger.info "ranger: WebSocket connection openned"
83
+
84
+ if hs.headers_downcased.key?("authorization")
85
+ authorized, payload = authenticate(hs.headers["authorization"])
86
+
87
+ if !authorized
88
+ @logger.info "ranger: #{@client.user} authentication failed"
89
+ raise EM::WebSocket::HandshakeError, "Authorization failed"
90
+ else
91
+ @logger.info [authorized, payload].inspect
92
+ @client.user = payload[:uid]
93
+ @client.authorized = true
94
+ @logger.info "ranger: user #{@client.user} authenticated #{@client.streams}"
95
+ end
96
+ end
60
97
  end
61
98
  end
62
99
 
@@ -91,6 +128,10 @@ module Peatio::Ranger
91
128
  connection.handle(msg)
92
129
  end
93
130
 
131
+ socket.onping do |value|
132
+ logger.info "Received ping: #{value}"
133
+ end
134
+
94
135
  socket.onclose do
95
136
  logger.info "ranger: WebSocket connection closed"
96
137
  end
@@ -1,3 +1,3 @@
1
1
  module Peatio
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peatio1.9
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - topdev