buttplugrb 1.0.0 → 1.1.2

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
  SHA1:
3
- metadata.gz: 7c5d05ba327fa3c5eec041b8115fde4dbfd7ff0b
4
- data.tar.gz: be8dec539e6079430e47ed6f0514ea74c65b13ed
3
+ metadata.gz: 2140196b9069aa198ba78fb631e4e55fc1516083
4
+ data.tar.gz: d553e4ae2610b35679e87460dcc9dbfaf851b816
5
5
  SHA512:
6
- metadata.gz: 986d6327dcb9614b469715eabb5216db660c6f71cf4e2d4afa990465d47ac241d72b72ce74da2fe3ffcb995bcda5b5e5a36b1e0f635bf938e398128f075ff6b2
7
- data.tar.gz: f19225ad6ac973613fa066b08ff4860b08c79a8c75999fc786f2227c6006539b842e9111f6ad1971d0c2c08e9dfc1a18fd635577b8011b33790825d58e74660d
6
+ metadata.gz: 955d2c2f5966edf8dbab3659eb4f6d8728087025189767987b0169ee7aeac3ba316cc7bd7abdd1446109b92f0cf8b628a74a5db3ceddc190c364ce1d62d5c6ae
7
+ data.tar.gz: 0c375682d60e93f4eb84f386e0118868546b251fa7d9e75034a8fbc749447feeda53a8105dff1b842e85a1c65db9efd8bf405eaa3170d1281632b00167260399
data/Rakefile CHANGED
@@ -1,2 +1,29 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
1
+ #require "bundler/gem_tasks"
2
+ desc "Our Default Task"
3
+ task :default do
4
+ Rake::Task[:buildDevVersion].invoke
5
+ end
6
+ desc "Build the gem, and install it (primairly for testing)"
7
+ task :buildDevVersion do
8
+ sh %{gem uninstall buttplugrb}
9
+ sh %{gem build buttplugrb.gemspec}
10
+ sh %{gem install buttplugrb*.gem}
11
+ sh %{rm buttplugrb*.gem}
12
+ end
13
+ task :getCurrentRelease do
14
+ sh %{gem uninstall buttplugrb}
15
+ sh %{gem install buttplugrb}
16
+ end
17
+ task :console do
18
+ sh %{ruby bin/console}
19
+ end
20
+ task :buildDevandRun do
21
+ Rake::Task[:buildDevVersion].invoke
22
+ Rake::Task[:console].invoke
23
+ end
24
+ task :buildReleaseVersionAndPush do
25
+ sh %{gem uninstall buttplugrb}
26
+ sh %{gem build buttplugrb.gemspec}
27
+ sh %{gem push buttplugrb*.gem}
28
+ sh %{rm buttplugrb*.gem}
29
+ end
@@ -6,6 +6,18 @@ require 'json'
6
6
  Our Module for containg the functions and classes relating to the Buttplugrb gem
7
7
  =end
8
8
  module Buttplug
9
+ =begin rdoc
10
+ The module holding all of our various log levels that our client can set our server to
11
+ =end
12
+ module LogLevel
13
+ Off = 0
14
+ Fatal = 1
15
+ Error = 2
16
+ Warn = 3
17
+ Info = 4
18
+ Debug = 5
19
+ Trace = 6
20
+ end
9
21
  =begin rdoc
10
22
  Our Client for a buttplug.io server
11
23
  =end
@@ -19,57 +31,30 @@ Arguments:
19
31
  Returns:
20
32
  * A shiney new buttplug client ready for some action
21
33
  =end
22
- def initialize(serverLocation)
34
+ def initialize(serverLocation, clientName="buttplugrb")
35
+ @messageID=1
23
36
  @location=serverLocation
24
37
  #Ok Explanation time!
25
38
  # * @EventQueue - The events we are triggering on the server, Expected to be an array, with the first element being the message Id, and the second being the message itself!
26
39
  @eventQueue=EM::Queue.new
27
- @eventMachine=Thread.new{EM.run{
28
- eventQueue=@eventQueue
29
- messageWatch={}
30
- ws = Faye::WebSocket::Client.new(@location)
31
- tickLoop=EM.tick_loop do #Should improve response times~
32
- eventQueue.pop{|msg|
33
- ws.send msg[1]
34
- messageWatch[msg[0]]=msg
35
- p [Time.now, :message_send, msg[1]]
36
- }
37
- end
38
- ws.on :open do |event|
39
- p [Time.now, :open]
40
- ws.send '[{"RequestServerInfo": {"Id": 1, "ClientName": "roboMegumin", "MessageVersion": 1}}]'
41
- end
42
- ws.on :message do |event|
43
- message=JSON::parse(event.data)[0]
44
- message.each{|key,value|
45
- #We don't really care about the key just yet ... We are going to just care about finding our ID
46
- if(messageWatch.keys.include?(value["Id"]))
47
- messageWatch[value["Id"]]<<{key => value}#And now we care about our key!
48
- puts messageWatch[value["Id"]].object_id
49
- messageWatch.delete(value["Id"])
50
- p [Time.now, :message_recieved, [{key => value}]]
51
- next
52
- elsif(key=="ServerInfo")
53
- p [Time.now, :server_info, value]
54
- end
55
- }
56
- end
57
- ws.on :close do |event|
58
- p [Time.now, :close, event.code, event.reason]
59
- ws = nil
60
- end
61
- EM.add_periodic_timer(0.5){
62
- ws.send "[{\"Ping\": {\"Id\": #{generateID()}}}]"
63
- }
64
- }}
40
+ @logLevel=Buttplug::LogLevel::Off
41
+ @scanning=false
42
+ @currentDevices=[];
43
+ startEventMachine()
65
44
  @eventMachine.run
66
45
  end
46
+ def setLogLevel(logLevel)
47
+ @logLevel=logLevel
48
+ end
67
49
  =begin rdoc
68
50
  Tells our server to start scanning for new devices
69
51
  =end
70
52
  def startScanning()
71
53
  id=generateID()
72
- @eventQueue.push([id,"[{\"StartScanning\":{\"Id\":#{id}}}]"])
54
+ response=sendMessage([id,"[{\"StartScanning\":{\"Id\":#{id}}}]"])
55
+ if(response[0].keys.include? "Error")
56
+ #TODO: Add Error Handling code
57
+ end
73
58
  end
74
59
  =begin rdoc
75
60
  Tells our server to stop scanning for new devices
@@ -78,6 +63,9 @@ Tells our server to stop scanning for new devices
78
63
  id=generateID()
79
64
  @eventQueue.push([id,"[{\"StopScanning\":{\"Id\":#{id}}}]"])
80
65
  end
66
+ def isScanning?()
67
+ return @scanning
68
+ end
81
69
  =begin rdoc
82
70
  Lists all devices available to the server
83
71
 
@@ -128,8 +116,86 @@ Returns:
128
116
  * a number between 2 and 4294967295
129
117
  =end
130
118
  def generateID()
131
- return rand(2..4294967295)
119
+ @messageID+=1
120
+ return @messageID
121
+ end
122
+ def currentDevices()
123
+ return @currentDevices
124
+ end
125
+ def deviceSusbscribe(id,&code)
126
+ #TODO: Add Code here to allow a class like Buttplug::Device to subscribe to events, annnnd realize that the device has disconnected when that does happen (like the hush has a tendeancy to do ... )
127
+ end
128
+ protected
129
+ def startEventMachine()
130
+ @eventMachine=Thread.new{EM.run{
131
+ eventQueue=@eventQueue
132
+ messageWatch={}
133
+ logLevel=@logLevel
134
+ scanning=@scanning
135
+ currentDevices=@currentDevices
136
+ ws = Faye::WebSocket::Client.new(@location)
137
+ tickLoop=EM.tick_loop do #Should improve response times~
138
+ eventQueue.pop{|msg|
139
+ ws.send msg[1]
140
+ messageWatch[msg[0]]=msg
141
+ p [Time.now, :message_send, msg[1]]
142
+ }
143
+ end
144
+ ws.on :open do |event|
145
+ p [Time.now, :open]
146
+ ws.send "[{\"RequestServerInfo\": {\"Id\": 1, \"ClientName\": \"#{clientName}\", \"MessageVersion\": 1}}]"
147
+ #TODO: Add MaxPingTime Code
148
+ end
149
+ ws.on :message do |event|
150
+ #Ok, first of all let's grab
151
+ message=JSON::parse(event.data).each{|event|
152
+ message.each{|key,value|
153
+ #We don't really care about the key just yet ... We are going to just care about finding our ID
154
+ if(messageWatch.keys.include?(value["Id"]))
155
+ messageWatch[value["Id"]]<<{key => value}#And now we care about our key!
156
+ puts messageWatch[value["Id"]].object_id
157
+ messageWatch.delete(value["Id"])
158
+ p [Time.now, :message_recieved, [{key => value}]]
159
+ next
160
+ #If we are currently scanning, we should Probably check and see if we recieved a ScanningFinished message
161
+ elsif(scanning&&key=="ScanningFinished")
162
+ p [Time.now,:ScanningFinished]
163
+ scanning=false
164
+ #If we are logging, we should probably Check and see if this is a log ...
165
+ elsif(logLevel>Buttplug::LogLevel::Off&&key=="Log")
166
+ p [Time.now,:ServerLog,value]
167
+ #and last but not least if we spot our server info we should probably log it ...
168
+ elsif(key=="DeviceAdded")
169
+ #Oh? Sweet let's go ahead and add it's information to our array!
170
+ currentDevices.push(
171
+ {"DeviceName" => value["DeviceName"], "DeviceIndex" => value["DeviceIndex"], "DeviceMessages" => value["DeviceMessages"]})
172
+ elsif(key=="DeviceRemoved")
173
+ #well darn, and to just have compatability with the current js version of buttplug.io we are gonna do this a bit diffrently than I'd like ... we are totally not doing this because I'm feeling lazy and want to push out this itteration, no sir
174
+ currentDevices.reject!{|device|
175
+ device["Id"]==value["Id"]
176
+ }
177
+ elsif(key=="ServerInfo")
178
+ p [Time.now, :server_info, value]
179
+ end
180
+ }
181
+ }
182
+ end
183
+ ws.on :close do |event|
184
+ p [Time.now, :close, event.code, event.reason]
185
+ ws = nil
186
+ #TODO: Add Nil checks for Sends, and Nil out the ping when closed
187
+ end
188
+ EM.add_periodic_timer(0.5){
189
+ ws.send "[{\"Ping\": {\"Id\": #{generateID()}}}]"
190
+ }
191
+ #TODO: Add Error code https://metafetish.github.io/buttplug/status.html#error
192
+ #So, I should probably add some basic error handling to most of the code then ...
193
+ #TODO: Add Log code https://metafetish.github.io/buttplug/status.html#requestlog
194
+ #Done, I think ... please correct me if I'm wrong
195
+ }}
132
196
  end
197
+ #TODO: Add Method to disconnect from current Server
198
+ #TODO: Add Method for reconnecting to a Server
133
199
  end
134
200
  =begin rdoc
135
201
  This class creates a Wrapper for your various devices you fetched from listDevices for your controlling pleasure!
@@ -1,3 +1,3 @@
1
1
  module Buttplug
2
- VERSION="1.0.0"
2
+ VERSION="1.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buttplugrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nora Maguire
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-14 00:00:00.000000000 Z
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket