Class: CurlFFI::Multi

Inherits:
Object
  • Object
show all
Defined in:
lib/curl_ffi/multi.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMulti

Returns a new instance of Multi.



8
9
10
11
12
13
# File 'lib/curl_ffi/multi.rb', line 8

def initialize
  @pointer = FFI::AutoPointer.new(CurlFFI.multi_init, CurlFFI.method(:multi_cleanup))
  @running = -1
  @handles = []
  @messages_in_queue = 0
end

Instance Attribute Details

#pointerObject (readonly)

Returns the value of attribute pointer.



6
7
8
# File 'lib/curl_ffi/multi.rb', line 6

def pointer
  @pointer
end

#runningObject (readonly)

Returns the value of attribute running.



6
7
8
# File 'lib/curl_ffi/multi.rb', line 6

def running
  @running
end

Instance Method Details

#add_handle(easy) ⇒ Object

TODO:

handle return code



16
17
18
19
# File 'lib/curl_ffi/multi.rb', line 16

def add_handle(easy)
  CurlFFI.multi_add_handle(@pointer, easy.pointer)
  @handles << easy # Save the handle so it won't be gc'ed
end

#info_read_allObject



31
32
33
34
35
36
37
# File 'lib/curl_ffi/multi.rb', line 31

def info_read_all()
  messages = []
  while message = info_read_next
    messages << message
  end
  messages
end

#info_read_nextObject



39
40
41
42
43
44
# File 'lib/curl_ffi/multi.rb', line 39

def info_read_next()
  int_pointer = FFI::MemoryPointer.new(:int)
  message_pointer = CurlFFI.multi_info_read(@pointer, int_pointer)
  @messages_in_queue = int_pointer.read_int
  message_pointer.null? ? nil : CurlFFI::Message.new(message_pointer)
end

#performObject



54
55
56
57
58
59
# File 'lib/curl_ffi/multi.rb', line 54

def perform()
  int_pointer = FFI::MemoryPointer.new(:int)
  result = CurlFFI.multi_perform(@pointer, int_pointer)
  @running = int_pointer.read_int
  result
end

#remove_handle(easy) ⇒ Object

TODO:

handle return code



22
23
24
25
# File 'lib/curl_ffi/multi.rb', line 22

def remove_handle(easy)
  CurlFFI.multi_remove_handle(@pointer, easy.pointer)
  @handles.delete(easy) # Save the handle so it won't be gc'ed
end

#setopt(option, param) ⇒ Object



27
28
29
# File 'lib/curl_ffi/multi.rb', line 27

def setopt(option, param)
  CurlFFI.multi_setopt(@pointer, option, param)
end

#socket_action(sockfd, ev_bitmask = 0) ⇒ Object

TODO:

handle return code



47
48
49
50
51
52
# File 'lib/curl_ffi/multi.rb', line 47

def socket_action(sockfd, ev_bitmask = 0)
  int_pointer = FFI::MemoryPointer.new(:int)
  result = CurlFFI.multi_socket_action(@pointer, sockfd, ev_bitmask, int_pointer)
  @running = int_pointer.read_int
  result
end

#timeoutObject



61
62
63
64
65
# File 'lib/curl_ffi/multi.rb', line 61

def timeout
  long_pointer = FFI::MemoryPointer.new(:long)
  result = CurlFFI.multi_timeout(@pointer, long_pointer)
  long_pointer.read_long
end