cakedb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []