Class: Ignite::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/ignite/request.rb

Constant Summary collapse

MIN_LONG =

-2**63

-9223372036854775808 # -2**63
MAX_LONG =

2**63-1

9223372036854775807

Instance Method Summary collapse

Constructor Details

#initialize(op_code) ⇒ Request

Returns a new instance of Request.



6
7
8
9
10
11
12
13
14
# File 'lib/ignite/request.rb', line 6

def initialize(op_code)
  @buffer = String.new
  int 0 # length placeholder

  if op_code != OP_HANDSHAKE
    short op_code
    long rand(MIN_LONG..MAX_LONG) # request id
  end
end

Instance Method Details

#bool(value) ⇒ Object



22
23
24
# File 'lib/ignite/request.rb', line 22

def bool(value)
  byte(value ? 1 : 0)
end

#byte(value) ⇒ Object



26
27
28
# File 'lib/ignite/request.rb', line 26

def byte(value)
  [value].pack("C", buffer: @buffer)
end

#data_object(value) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/ignite/request.rb', line 56

def data_object(value)
  case value
  when Integer
    byte 4
    long value
  when Float
    byte 6
    double value
  when TrueClass, FalseClass
    byte 8
    bool value
  when String
    string value
  when Date
    byte 11
    time = value.to_time
    long(time.to_i * 1000 + (time.nsec / 1000000))
  when Time
    byte 33
    long(value.to_i * 1000 + (value.nsec / 1000000))
    int value.nsec % 1000000
  when NilClass
    byte 101
  else
    raise "Unknown type: #{value.class.name}"
  end
end

#double(value) ⇒ Object



46
47
48
# File 'lib/ignite/request.rb', line 46

def double(value)
  [value].pack("E", buffer: @buffer)
end

#float(value) ⇒ Object



42
43
44
# File 'lib/ignite/request.rb', line 42

def float(value)
  [value].pack("e", buffer: @buffer)
end

#int(value) ⇒ Object



34
35
36
# File 'lib/ignite/request.rb', line 34

def int(value)
  [value].pack("i!<", buffer: @buffer)
end

#long(value) ⇒ Object



38
39
40
# File 'lib/ignite/request.rb', line 38

def long(value)
  [value].pack("l!<", buffer: @buffer)
end

#short(value) ⇒ Object



30
31
32
# File 'lib/ignite/request.rb', line 30

def short(value)
  [value].pack("s!<", buffer: @buffer)
end

#string(value) ⇒ Object



50
51
52
53
54
# File 'lib/ignite/request.rb', line 50

def string(value)
  byte 9
  int value.bytesize
  @buffer << value
end

#to_bytesObject



16
17
18
19
20
# File 'lib/ignite/request.rb', line 16

def to_bytes
  # update length
  @buffer[0..3] = [@buffer.bytesize - 4].pack("i!<")
  @buffer
end