cakedb 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.
Files changed (2) hide show
  1. data/lib/cakedb.rb +89 -0
  2. metadata +45 -0
data/lib/cakedb.rb ADDED
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'socket'
4
+
5
+ class CakeDB
6
+ def initialize( server="127.0.0.1", port=8888 )
7
+ puts "Connection Initiated"
8
+ @server = TCPSocket.new(server, port)
9
+ @sids = {}
10
+ end
11
+ def get_sid(stream)
12
+ if @sids[stream].nil?
13
+ @server.write [stream.bytesize,5].pack("L>S>")
14
+ @server.write stream
15
+ @server.flush
16
+ sid = @server.recv(2).unpack("S>")
17
+ @sids[stream] = sid[0]
18
+ return sid[0]
19
+ else
20
+ return @sids[stream]
21
+ end
22
+ end
23
+
24
+ def write(stream,payload)
25
+ sid = get_sid(stream)
26
+ puts sid
27
+ @server.write [(payload.bytesize + 2),2,sid].pack("L>S>S>")
28
+ @server.write payload
29
+ @server.flush
30
+ end
31
+
32
+ def get_tasking(msg)
33
+ details = Hash.new
34
+ details["database"] = msg["region"]
35
+ details["task"] = msg["tasking"]
36
+ details["date"] = msg["date"]
37
+ details["rediskey"] = details["database"] + "-" + details["task"]
38
+ return details
39
+ end
40
+
41
+ def read(stream, ts)
42
+ #Issue the query
43
+ sid = @sids[stream]
44
+ puts sid
45
+ @server.write [10,4,sid,ts].pack("L>S>S>Q>")
46
+ @server.flush
47
+
48
+ #How much data we gotta get?
49
+ recv_total = @server.recv(4).unpack("L>")[0]
50
+ if recv_total > 0
51
+ counter = 0
52
+ #Recive the result
53
+ while recv_total > 0
54
+ counter+=1
55
+ #Get the header - 12 bytes
56
+ header_whole = @server.recv(12)
57
+ header = header_whole.unpack("Q>L>")
58
+ if header[0] == nil || header[1] == nil
59
+ puts "You have been eaten by a Grue"
60
+ end
61
+ if header_whole.bytesize !=12
62
+ puts "Incomplete header"
63
+ puts "Length: #{header[1]}"
64
+ puts "TS: #{header[0]}"
65
+ end
66
+
67
+ #recieve the data, header says how much
68
+ result = @server.recv(header[1])
69
+
70
+ #Keep reading till we have everything we expect
71
+ while(result.bytesize < header[1])
72
+ result += @server.recv(header[1] - result.bytesize)
73
+ puts "Incomplete read: #{result.bytesize} / #{header[1]}"
74
+ end
75
+ if result.bytesize != header[1]
76
+ puts "Incomplete read on payload receive"
77
+ puts "Raw Data: #{result}"
78
+ puts "Length: #{header[1]} bytes"
79
+ puts "Raw Data length: #{result.bytesize - 12}"
80
+ puts "Total Length: #{recv_total}"
81
+ exit(1)
82
+ end
83
+ return result
84
+ end
85
+ else
86
+ # I SEE NOTHING!
87
+ end
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cakedb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Hows
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-09 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: CakeDB Ruby Driver
15
+ email: david@hows.id.au
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/cakedb.rb
21
+ homepage: http://rubygems.org/gems/cakedb
22
+ licenses: []
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 1.8.24
42
+ signing_key:
43
+ specification_version: 3
44
+ summary: CakeDB Ruby Driver
45
+ test_files: []