aromancer 0.0.7 → 0.0.9
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/.DS_Store +0 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/Gemfile.lock +2 -2
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/checksums/aromancer-0.0.8.gem.sha512 +1 -0
- data/checksums/aromancer-0.0.9.gem.sha512 +1 -0
- data/lib/aromancer/api.rb +10 -27
- data/lib/aromancer/cli.rb +153 -0
- data/lib/aromancer/routes.rb +117 -134
- data/lib/aromancer/serve.rb +35 -0
- data/lib/aromancer/server.rb +6 -6
- data/lib/aromancer/storage.rb +214 -93
- data/lib/aromancer/unix_dom.rb +13 -0
- data/lib/aromancer/version.rb +1 -1
- data/lib/aromancer/websocket.rb +29 -8
- data/lib/aromancer.rb +48 -127
- data/lib/reiquire.rb +2 -0
- data/listen.rb +0 -4
- data/locale/en.yml +3 -2
- data/tasks/make.rake +2 -2
- metadata +7 -3
- data/LICENSE.txt +0 -21
- data/gem_graph.png +0 -0
data/lib/aromancer/storage.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
=begin
|
|
2
4
|
|
|
3
5
|
storage.rb
|
|
@@ -12,28 +14,127 @@ module Aromancer
|
|
|
12
14
|
class Storage
|
|
13
15
|
include Singleton
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
VALID_KEYS = [
|
|
18
|
+
:arena,
|
|
19
|
+
:last_error,
|
|
20
|
+
:legends,
|
|
21
|
+
:player,
|
|
22
|
+
:preference_debug,
|
|
23
|
+
:preference_force_ssl,
|
|
24
|
+
:preference_hide_sentences,
|
|
25
|
+
:preference_hide_stream,
|
|
26
|
+
:server_url_host,
|
|
27
|
+
:server_url_port,
|
|
28
|
+
:server_url_scheme,
|
|
29
|
+
:signed_out_flag,
|
|
30
|
+
:stream,
|
|
31
|
+
:websocket_path,
|
|
32
|
+
:websocket_scheme
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
PERSISTED_KEYS = [
|
|
36
|
+
:last_error,
|
|
37
|
+
:player,
|
|
38
|
+
:preference_debug,
|
|
39
|
+
:preference_force_ssl,
|
|
40
|
+
:preference_hide_sentences,
|
|
41
|
+
:preference_hide_stream,
|
|
42
|
+
:server_url_host,
|
|
43
|
+
:server_url_port,
|
|
44
|
+
:server_url_scheme,
|
|
45
|
+
:websocket_path,
|
|
46
|
+
:websocket_scheme
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
URI_KEYS = [
|
|
50
|
+
:scheme,
|
|
51
|
+
:host,
|
|
52
|
+
:port
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
DEFAULT_PREFERENCES = {
|
|
56
|
+
preference_debug: false,
|
|
57
|
+
preference_force_ssl: false,
|
|
58
|
+
preference_hide_sentences: true,
|
|
59
|
+
preference_hide_stream: true,
|
|
60
|
+
}
|
|
16
61
|
|
|
17
|
-
|
|
62
|
+
DEFAULT_SERVER_URL = :"http://127.0.0.1:3000".to_s
|
|
63
|
+
|
|
64
|
+
attr_accessor :storage_open, :cache, :clear_flag, :parser_error
|
|
18
65
|
|
|
19
66
|
def initialize
|
|
67
|
+
reload!
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def ensure_default_preferences_exist
|
|
71
|
+
DEFAULT_PREFERENCES.each{|d_key, d_value|
|
|
72
|
+
current_value = get_key(d_key)
|
|
73
|
+
if current_value.nil? || ![TrueClass, FalseClass].include?(current_value.class)
|
|
74
|
+
set_key(d_key.to_s, d_value)
|
|
75
|
+
end
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def reload!
|
|
80
|
+
@storage_open = false
|
|
81
|
+
@clear_flag = false
|
|
82
|
+
@parser_error = nil
|
|
20
83
|
clear_cache!
|
|
21
|
-
|
|
84
|
+
Aromancer.configure_home
|
|
22
85
|
end
|
|
23
86
|
|
|
24
87
|
def clear_cache!
|
|
88
|
+
if @storage_open
|
|
89
|
+
@clear_flag = true
|
|
90
|
+
return
|
|
91
|
+
end
|
|
92
|
+
@clear_flag = false
|
|
25
93
|
@storage_open = false
|
|
26
|
-
|
|
94
|
+
|
|
95
|
+
@cache = {} # clear'd
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.snapshot_config
|
|
99
|
+
current_config = {}
|
|
100
|
+
|
|
101
|
+
PERSISTED_KEYS.each{|p_key|
|
|
102
|
+
current_config[p_key] = Aromancer::Storage.instance.get_key(p_key)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
current_config
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.valid_config?(config)
|
|
109
|
+
return false unless config.kind_of?(Hash)
|
|
110
|
+
|
|
111
|
+
config.keys.all?{|k| PERSISTED_KEYS.include?(k.to_sym)}
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def self.restore_config(config)
|
|
115
|
+
return nil unless valid_config?(config)
|
|
116
|
+
PERSISTED_KEYS.each{|p_key|
|
|
117
|
+
Aromancer::Storage.instance.set_key(p_key, config[p_key])
|
|
118
|
+
}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def self.recreate!
|
|
122
|
+
current_config = snapshot_config
|
|
123
|
+
FileUtils.rm_rf(storage_filepath)
|
|
124
|
+
Aromancer::Storage.instance.reload!
|
|
125
|
+
restore_config(current_config)
|
|
27
126
|
end
|
|
28
127
|
|
|
29
128
|
def self.storage_filepath
|
|
30
|
-
filepath = File.join(Aromancer.home_directory, "
|
|
129
|
+
filepath = File.join(Aromancer.home_directory, "v#{Aromancer::VERSION}.json")
|
|
31
130
|
|
|
32
131
|
# create storage file if not present
|
|
33
132
|
unless File.exist?(filepath)
|
|
34
133
|
File.open(filepath, "w+") do |f|
|
|
35
|
-
f.write({
|
|
134
|
+
f.write({created_at: Time.now}.to_json)
|
|
36
135
|
end
|
|
136
|
+
else
|
|
137
|
+
|
|
37
138
|
end
|
|
38
139
|
|
|
39
140
|
filepath
|
|
@@ -50,33 +151,33 @@ module Aromancer
|
|
|
50
151
|
|
|
51
152
|
def self.get_preference(preference, default: nil)
|
|
52
153
|
p_key = "preference_#{preference}"
|
|
53
|
-
|
|
54
|
-
if
|
|
55
|
-
instance.set_key(p_key, default)
|
|
56
|
-
|
|
154
|
+
pref = Aromancer::Storage.instance.get_key(p_key)
|
|
155
|
+
if pref.nil? && !default.nil?
|
|
156
|
+
Aromancer::Storage.instance.set_key(p_key, default)
|
|
157
|
+
pref = Aromancer::Storage.instance.get_key(p_key)
|
|
57
158
|
end
|
|
58
|
-
|
|
159
|
+
pref
|
|
59
160
|
end
|
|
60
161
|
|
|
61
162
|
def self.set_preference(preference, value)
|
|
62
163
|
p_key = "preference_#{preference}"
|
|
63
|
-
instance.set_key(p_key, value)
|
|
164
|
+
Aromancer::Storage.instance.set_key(p_key, value)
|
|
64
165
|
end
|
|
65
166
|
|
|
66
167
|
def self.toggle_preference(key)
|
|
67
|
-
v = get_preference(key)
|
|
168
|
+
v = get_preference(key, default: DEFAULT_PREFERENCES["preference_#{key}"])
|
|
68
169
|
set_preference(key, !v)
|
|
69
170
|
end
|
|
70
171
|
|
|
71
172
|
def self.toggle_force_ssl
|
|
72
173
|
toggle_preference(:force_ssl)
|
|
73
174
|
v = get_preference(:force_ssl)
|
|
74
|
-
|
|
75
|
-
|
|
175
|
+
Aromancer::Storage.set_key(:server_url_scheme, "http#{v ? :s : ""}")
|
|
176
|
+
Aromancer::Storage.set_key(:websocket_scheme, "ws#{v ? :s : ""}")
|
|
76
177
|
end
|
|
77
178
|
|
|
78
179
|
def self.set_signed_out_flag(flag)
|
|
79
|
-
|
|
180
|
+
instance.set_key(:signed_out_flag, flag)
|
|
80
181
|
end
|
|
81
182
|
|
|
82
183
|
def self.get_signed_out_flag
|
|
@@ -84,7 +185,7 @@ module Aromancer
|
|
|
84
185
|
end
|
|
85
186
|
|
|
86
187
|
def self.set_player(player_hash)
|
|
87
|
-
|
|
188
|
+
instance.set_key(:player, player_hash)
|
|
88
189
|
end
|
|
89
190
|
|
|
90
191
|
def self.get_player
|
|
@@ -92,7 +193,7 @@ module Aromancer
|
|
|
92
193
|
end
|
|
93
194
|
|
|
94
195
|
def self.set_legends(legends_array)
|
|
95
|
-
|
|
196
|
+
instance.set_key(:legends, legends_array)
|
|
96
197
|
end
|
|
97
198
|
|
|
98
199
|
def self.get_legends
|
|
@@ -100,7 +201,8 @@ module Aromancer
|
|
|
100
201
|
end
|
|
101
202
|
|
|
102
203
|
def self.set_arena(arena_hash)
|
|
103
|
-
|
|
204
|
+
instance.set_key(:arena, arena_hash)
|
|
205
|
+
Aromancer::UnixDom.render_arena
|
|
104
206
|
end
|
|
105
207
|
|
|
106
208
|
def self.get_arena
|
|
@@ -108,7 +210,7 @@ module Aromancer
|
|
|
108
210
|
end
|
|
109
211
|
|
|
110
212
|
def self.set_stream(stream_array)
|
|
111
|
-
|
|
213
|
+
instance.set_key(:stream, stream_array)
|
|
112
214
|
end
|
|
113
215
|
|
|
114
216
|
def self.get_stream
|
|
@@ -116,33 +218,26 @@ module Aromancer
|
|
|
116
218
|
end
|
|
117
219
|
|
|
118
220
|
def self.set_last_error(error_hash)
|
|
119
|
-
|
|
221
|
+
instance.set_key(:last_error, error_hash)
|
|
120
222
|
end
|
|
121
223
|
|
|
122
224
|
def self.get_last_error
|
|
123
225
|
Aromancer::Storage.instance.get_key(:last_error)
|
|
124
226
|
end
|
|
125
227
|
|
|
126
|
-
URI_KEYS = [
|
|
127
|
-
:scheme,
|
|
128
|
-
:host,
|
|
129
|
-
:port
|
|
130
|
-
]
|
|
131
|
-
|
|
132
228
|
def self.set_server_url(server_url)
|
|
133
229
|
uri = URI.parse(server_url)
|
|
134
230
|
if uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
|
|
135
231
|
URI_KEYS.each{|k|
|
|
136
|
-
|
|
137
|
-
Aromancer::Storage.instance.set_key("server_url_#{k}", uri.select(k).first)
|
|
232
|
+
instance.set_key("server_url_#{k}", uri.select(k).first)
|
|
138
233
|
}
|
|
139
234
|
elsif get_server_url.nil?
|
|
140
|
-
set_server_url(
|
|
235
|
+
set_server_url(DEFAULT_SERVER_URL)
|
|
141
236
|
end
|
|
142
237
|
end
|
|
143
238
|
|
|
144
239
|
def self.get_server_url
|
|
145
|
-
set_server_url(
|
|
240
|
+
set_server_url(DEFAULT_SERVER_URL) if URI_KEYS.all?{|k| Aromancer::Storage.instance.get_key("server_url_#{k}").nil?}
|
|
146
241
|
URI.parse(URI_KEYS.map{|k|
|
|
147
242
|
c = Aromancer::Storage.instance.get_key("server_url_#{k}")
|
|
148
243
|
case k
|
|
@@ -159,12 +254,12 @@ module Aromancer
|
|
|
159
254
|
def self.get_websocket_url
|
|
160
255
|
# default scheme is ws
|
|
161
256
|
w_scheme = Aromancer::Storage.instance.get_key(:websocket_scheme)
|
|
162
|
-
|
|
257
|
+
instance.set_key(:websocket_scheme, :ws) if w_scheme.nil?
|
|
163
258
|
w_scheme = Aromancer::Storage.instance.get_key(:websocket_scheme)
|
|
164
259
|
|
|
165
260
|
# default path is broadcast
|
|
166
261
|
w_path = Aromancer::Storage.instance.get_key(:websocket_path)
|
|
167
|
-
|
|
262
|
+
instance.set_key(:websocket_path, :broadcast) if w_path.nil?
|
|
168
263
|
w_path = Aromancer::Storage.instance.get_key(:websocket_path)
|
|
169
264
|
|
|
170
265
|
# asserts host and port not nil
|
|
@@ -176,78 +271,104 @@ module Aromancer
|
|
|
176
271
|
end
|
|
177
272
|
|
|
178
273
|
def get_key(key)
|
|
179
|
-
|
|
274
|
+
Aromancer::Cli.instance.storage_mutex.synchronize do
|
|
275
|
+
key = key.to_s
|
|
180
276
|
|
|
181
|
-
|
|
182
|
-
|
|
277
|
+
# ensure default for key exists
|
|
278
|
+
@cache[key] = {value: nil, persisted: false} unless @cache.keys.include?(key)
|
|
279
|
+
if false && (@cache[:preference_debug.to_s] || {value: DEFAULT_PREFERENCES[:preference_debug]})[:value]
|
|
280
|
+
Aromancer::Prompt.say("#{__method__} > @cache[#{key}]=#{@cache[key]}")
|
|
281
|
+
end
|
|
282
|
+
# return cache value if storage open or the cache value is persisted
|
|
283
|
+
return @cache[key][:value] if @storage_open || @cache[key][:persisted]
|
|
284
|
+
|
|
285
|
+
# open storage
|
|
286
|
+
@storage_open = true
|
|
287
|
+
storage_contents = {}
|
|
288
|
+
begin
|
|
289
|
+
@parser_error = nil
|
|
290
|
+
# read storage
|
|
291
|
+
storage_contents = JSON.parse(File.read(Aromancer::Storage.storage_filepath, encoding: "UTF-8"))
|
|
292
|
+
rescue StandardError => e
|
|
293
|
+
@storage_open = false
|
|
294
|
+
if @parser_error.nil?
|
|
295
|
+
@parser_error = e
|
|
296
|
+
return get_key(key)
|
|
297
|
+
else
|
|
298
|
+
raise @parser_error
|
|
299
|
+
end
|
|
300
|
+
end
|
|
183
301
|
|
|
184
|
-
|
|
185
|
-
|
|
302
|
+
# only update the cache value if present in storage
|
|
303
|
+
if storage_contents.keys.include?(key)
|
|
304
|
+
@cache[key] = {value: storage_contents[key], persisted: true}
|
|
305
|
+
else
|
|
306
|
+
@cache[key][:persisted] = false
|
|
307
|
+
end
|
|
186
308
|
|
|
187
|
-
|
|
188
|
-
@storage_open = true
|
|
189
|
-
storage_contents = {}
|
|
190
|
-
begin
|
|
191
|
-
# read storage
|
|
192
|
-
storage_contents = JSON.parse(File.read(Aromancer::Storage.storage_filepath))
|
|
193
|
-
rescue StandardError => e
|
|
309
|
+
value = @cache[key][:value]
|
|
194
310
|
@storage_open = false
|
|
195
|
-
|
|
196
|
-
return
|
|
311
|
+
clear_cache! if @clear_flag
|
|
312
|
+
return value
|
|
197
313
|
end
|
|
314
|
+
end
|
|
198
315
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
316
|
+
def set_key(key, value)
|
|
317
|
+
Aromancer::Cli.instance.storage_mutex.synchronize do
|
|
318
|
+
key = key.to_s
|
|
319
|
+
|
|
320
|
+
# ensure default for key exists
|
|
321
|
+
@cache[key] = {value: value, persisted: false} unless @cache.keys.include?(key)
|
|
322
|
+
|
|
323
|
+
# assign new cache value and set persisted to false
|
|
324
|
+
@cache[key][:value] = value
|
|
203
325
|
@cache[key][:persisted] = false
|
|
204
|
-
end
|
|
205
326
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
327
|
+
if @storage_open && (@cache[:preference_debug.to_s] || {value: DEFAULT_PREFERENCES[:preference_debug]})[:value]
|
|
328
|
+
Aromancer::Prompt.say("#{__method__} > @cache[#{key}]=#{@cache[key]}")
|
|
329
|
+
end
|
|
330
|
+
# return if storage open
|
|
331
|
+
# non-persisted cache values update next cycle
|
|
332
|
+
return if @storage_open
|
|
333
|
+
|
|
334
|
+
# open storage
|
|
335
|
+
@storage_open = true
|
|
336
|
+
storage_contents = {}
|
|
337
|
+
begin
|
|
338
|
+
@parser_error = nil
|
|
339
|
+
# read storage
|
|
340
|
+
storage_contents = JSON.parse(File.read(Aromancer::Storage.storage_filepath, encoding: "UTF-8"))
|
|
341
|
+
rescue StandardError => e
|
|
342
|
+
@storage_open = false
|
|
343
|
+
if @parser_error.nil?
|
|
344
|
+
@parser_error = e
|
|
345
|
+
return get_key(key)
|
|
346
|
+
else
|
|
347
|
+
raise @parser_error
|
|
348
|
+
end
|
|
349
|
+
end
|
|
209
350
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
@cache[key][:value] = value
|
|
218
|
-
@cache[key][:persisted] = false
|
|
219
|
-
|
|
220
|
-
# return if storage open
|
|
221
|
-
# non-persisted cache values update next cycle
|
|
222
|
-
return if @storage_open
|
|
223
|
-
|
|
224
|
-
# open storage
|
|
225
|
-
@storage_open = true
|
|
226
|
-
storage_contents = {}
|
|
227
|
-
begin
|
|
228
|
-
# read storage
|
|
229
|
-
storage_contents = JSON.parse(File.read(Aromancer::Storage.storage_filepath))
|
|
230
|
-
rescue StandardError => e
|
|
231
|
-
@storage_open = false
|
|
232
|
-
FileUtils.rm(Aromancer::Storage.storage_filepath)
|
|
233
|
-
return
|
|
234
|
-
end
|
|
351
|
+
# update storage and cache
|
|
352
|
+
([key] + @cache.keys.select{|k|
|
|
353
|
+
!@cache[k][:persisted]
|
|
354
|
+
}).each{|k|
|
|
355
|
+
storage_contents[k] = @cache[k][:value]
|
|
356
|
+
@cache[k][:persisted] = true
|
|
357
|
+
}
|
|
235
358
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
storage_contents[k] = @cache[k][:value]
|
|
241
|
-
@cache[k][:persisted] = true
|
|
242
|
-
}
|
|
359
|
+
# write storage
|
|
360
|
+
File.open(Aromancer::Storage.storage_filepath, "w+") do |f|
|
|
361
|
+
f.write(storage_contents.to_json)
|
|
362
|
+
end
|
|
243
363
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
end
|
|
364
|
+
if (@cache[:preference_debug.to_s] || {value: DEFAULT_PREFERENCES[:preference_debug]})[:value]
|
|
365
|
+
Aromancer::Prompt.say("#{__method__} > @cache[#{key}]=#{@cache[key]}")
|
|
366
|
+
end
|
|
248
367
|
|
|
249
|
-
|
|
250
|
-
|
|
368
|
+
# close storage
|
|
369
|
+
@storage_open = false
|
|
370
|
+
clear_cache! if @clear_flag
|
|
371
|
+
end
|
|
251
372
|
end
|
|
252
373
|
end
|
|
253
374
|
end
|
data/lib/aromancer/version.rb
CHANGED
data/lib/aromancer/websocket.rb
CHANGED
|
@@ -22,9 +22,18 @@ module Aromancer
|
|
|
22
22
|
|
|
23
23
|
attr_accessor :socket
|
|
24
24
|
|
|
25
|
+
def self.channel_identifier
|
|
26
|
+
{identifier: {channel: :PlayerChannel.to_s, id: Aromancer::Storage.get_player["id"]}.to_json}
|
|
27
|
+
end
|
|
28
|
+
|
|
25
29
|
def connect
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
if !self.socket.nil? && self.socket.closed?
|
|
31
|
+
disconnect
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
return if !self.socket.nil? ||
|
|
35
|
+
Aromancer::Storage.get_player["api_key"].nil? ||
|
|
36
|
+
Aromancer::Storage.get_player["active_legend_id"].nil?
|
|
28
37
|
|
|
29
38
|
begin
|
|
30
39
|
self.socket = WebSocket::Client::Simple.connect(Aromancer::Storage.get_websocket_url, {headers: Aromancer::Server.auth_header})
|
|
@@ -45,8 +54,10 @@ module Aromancer
|
|
|
45
54
|
legend_id = payload["message"]["id"]
|
|
46
55
|
lid = Aromancer::Storage.get_player&.symbolize_keys[:active_legend_id]
|
|
47
56
|
if !lid.nil? && lid == legend_id.to_i
|
|
57
|
+
Aromancer::Cli.instance.should_clear_cache = true
|
|
58
|
+
Aromancer::Api.get_legends
|
|
48
59
|
Aromancer::Api.load_arena
|
|
49
|
-
sleep(
|
|
60
|
+
sleep(1)
|
|
50
61
|
Aromancer::Cli.instance.start_ui_thread
|
|
51
62
|
end
|
|
52
63
|
when :legends
|
|
@@ -57,10 +68,7 @@ module Aromancer
|
|
|
57
68
|
end
|
|
58
69
|
|
|
59
70
|
self.socket.on :open do
|
|
60
|
-
r = {
|
|
61
|
-
command: "subscribe",
|
|
62
|
-
identifier: {channel: "PlayerChannel"}.to_json
|
|
63
|
-
}.to_json
|
|
71
|
+
r = {"command": :subscribe.to_s}.merge(Aromancer::Websocket.channel_identifier).to_json
|
|
64
72
|
Aromancer::Websocket.instance.socket.send(r)
|
|
65
73
|
end
|
|
66
74
|
|
|
@@ -69,7 +77,10 @@ module Aromancer
|
|
|
69
77
|
end
|
|
70
78
|
|
|
71
79
|
self.socket.on :error do |e|
|
|
72
|
-
|
|
80
|
+
if Aromancer::Storage.get_preference(:debug)
|
|
81
|
+
Aromancer::Prompt.say("#{self.class.name} socket.on :error")
|
|
82
|
+
Aromancer::Prompt.say(e.inspect)
|
|
83
|
+
end
|
|
73
84
|
Aromancer::Websocket.instance.disconnect
|
|
74
85
|
end
|
|
75
86
|
end
|
|
@@ -78,5 +89,15 @@ module Aromancer
|
|
|
78
89
|
self.socket&.close
|
|
79
90
|
self.socket = nil
|
|
80
91
|
end
|
|
92
|
+
|
|
93
|
+
# todo: websockets only in-game
|
|
94
|
+
# https://docs.anycable.io/misc/action_cable_protocol#perform-actions
|
|
95
|
+
# def self.set_active_legend_id(id)
|
|
96
|
+
# return if self.instance.socket.nil?
|
|
97
|
+
# r = {"command": :message.to_s}.merge(Aromancer::Websocket.channel_identifier).merge({
|
|
98
|
+
# data: {action: :player.to_s, active_legend_id: id}.to_json
|
|
99
|
+
# }).to_json
|
|
100
|
+
# self.instance.socket.send(r)
|
|
101
|
+
# end
|
|
81
102
|
end
|
|
82
103
|
end
|