socketcake 0.1.7

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e198bfc5ed313c99d48fe5a110d29068677aae7b
4
+ data.tar.gz: 895579fd069a80c44cd1fd853b4ac8877c9eaea3
5
+ SHA512:
6
+ metadata.gz: 365f294613ab5efd976daa91c9d62b3fe70c9bf91698bccc4777ee1d913c8e76e5bab4a69a62257c081037269a28595364c56d2e453bf776c628cf77ac40f3f5
7
+ data.tar.gz: 9850f9715f19392ddf3b624ed83ff147116e08a26fb388cda10785262e39a1707af70acf33776eb44f3ba232fd2d7fe427b2e18bdffbf40d82e25e037ad4f3c4
@@ -0,0 +1,95 @@
1
+ class SocketCake::BaseSocket
2
+
3
+ attr_accessor :url, :open_message, :task_list, :cookie, :completed_tasks, :current_task, :local_storage, :verbose
4
+
5
+ def self.get_sequence
6
+ ObjectSpace.each_object(self)
7
+ end
8
+
9
+ def initialize task_list, url, open_message, cookie, verbose = false
10
+ self.url = url
11
+ self.open_message = open_message
12
+ self.task_list = task_list
13
+ self.cookie = cookie
14
+ self.completed_tasks = Array.new
15
+ self.local_storage = Hash.new
16
+ self.verbose = verbose
17
+ end
18
+
19
+ def start(arg = nil)
20
+
21
+
22
+ @socket = WebSocket::EventMachine::Client.connect(:uri => self.url,
23
+ headers: {
24
+ 'Cookie': self.cookie})
25
+
26
+
27
+ @socket.onopen do
28
+ puts "#{Time.now} Connected"
29
+ get_task
30
+
31
+ @socket.send self.open_message
32
+ end
33
+
34
+ @socket.onmessage do |msg|
35
+ puts msg if @verbose
36
+ handle(msg)
37
+ end
38
+
39
+
40
+ @socket.onerror do |error|
41
+ puts error
42
+ end
43
+
44
+ @socket.onclose do |code, reason|
45
+ puts "#{Time.now} Disconnected with status code: #{code} and reason: #{reason}"
46
+ yield(local_storage)
47
+ end
48
+
49
+ def handle msg
50
+ @message = JSON.parse(msg)
51
+ unless self.current_task[:completed]
52
+ if self.method_defined? self.current_task[:name]
53
+ self.send(self.current_task[:name], self.current_task[:args])
54
+ else
55
+ puts 'There is no method you called'
56
+ end
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+
63
+ private
64
+ def build_request(data)
65
+ [{data_type: data[:data_type],
66
+ event_name: data[:event_name],
67
+ timestamp: Time.now.to_i,
68
+ type: 'request',
69
+ uuid: SecureRandom.uuid,
70
+ data: Array.new << data[:data]}]
71
+ end
72
+
73
+ def task_completed?
74
+ self.current_task[:completed]
75
+ end
76
+
77
+ def complete_task
78
+ self.current_task[:completed] = true
79
+ self.completed_tasks << self.current_task
80
+ end
81
+
82
+ def next_task
83
+ if task_list.empty?
84
+ @socket.close
85
+ else
86
+ self.current_task = self.task_list.shift
87
+ end
88
+ end
89
+
90
+ def get_task
91
+ if self.current_task.nil?
92
+ self.current_task = self.task_list.shift
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,11 @@
1
+ class SocketCake::WsTask
2
+ attr_accessor :name, :openmessage, :url, :task_list, :verbose
3
+
4
+ def initialize(name, message, url, task_list, verbose=false)
5
+ self.name = name
6
+ self.openmessage = message
7
+ self.url = url
8
+ self.task_list = task_list
9
+ self.verbose = verbose
10
+ end
11
+ end
data/lib/socketcake.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'websocket-eventmachine-client'
2
+ require 'json'
3
+ require 'net/http'
4
+ class SocketCake
5
+ attr_accessor :task_list, :storage
6
+ def initialize cookie,task_list=[]
7
+ @cookie = cookie
8
+ @task_list = task_list
9
+ @storage = Hash.new
10
+ end
11
+
12
+ def roll
13
+ EM.run do
14
+ create_sockets @task_list
15
+ ObjectSpace.each_object(BaseSocket).each do |t|
16
+ t.start {|data| @storage[t.class.to_s]=data}
17
+ end
18
+ EM.stop
19
+ end
20
+ end
21
+
22
+
23
+ private
24
+
25
+ def create_sockets (task_list)
26
+ task_list.each do |task|
27
+ klass = Object.const_get(task.name)
28
+ if klass.superclass == BaseSocket
29
+ self.instance_variable_set(:"@#{task.name.downcase}",klass.new(task.task_list, task.url, task.openmessage, @cookie, task.verbose))
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: socketcake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.7
5
+ platform: ruby
6
+ authors:
7
+ - Timofey Poletaev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: websockets
14
+ email: xvagainstall@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/socketcake.rb
20
+ - lib/socketcake/base_socket.rb
21
+ - lib/socketcake/ws_task.rb
22
+ homepage: http://rubygems.org/gems/socket-cake
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.6.12
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: socketcake!
46
+ test_files: []