Connects to a remote server offering an easy to use, buffered I/O.
The simple dialer is based on Efl.Net.Socket_Simple, which encapsulates an actual Efl.Net.Socket and uses it with an Efl.Io.Buffered_Stream. This creates an input Efl.Io.Queue, an output Efl.Io.Queue. Both of these are linked using a receiver and a sender Efl.Io.Copier.
The idea is that unlike the traditional Efl.Net.Socket which attempts to write directly to the socket and thus may take less data than requested, this one will keep the pending data in its own buffer, feeding it to the actual socket when Efl.Io.Writer.can_write occurs. This makes its operation much simpler as Efl.Io.Writer.write will always take the full data -- allows "write and forget", if unlimited (see Efl.Io.Buffered_Stream.max_queue_size_output).
Reading is also much simpler since received data is kept in an Efl.Io.Queue, thus its size can be queried with Efl.Io.Buffered_Stream.pending_read and read with Efl.Io.Reader.read or peeked with Efl.Io.Buffered_Stream.slice, then discarded with Efl.Io.Buffered_Stream.discard or Efl.Io.Buffered_Stream.clear.
When waiting for a complete message, you can then just peek at its contents. If it's incomplete do nothing, if complete then either Efl.Io.Reader.read to get a copy or manipulate a read-only reference from Efl.Io.Buffered_Stream.slice and then Efl.Io.Buffered_Stream.discard
The actual dialer is created using the class given as the constructor property Efl.Net.Dialer_Simple.inner_class and can be retrieved with Efl.Io.Buffered_Stream.inner_io. This should be used with care, like extra configuration before Efl.Net.Dialer.dial is called.
If your object class requires some constructor-only properties to be set prior to Efl.Object.finalize, then use Efl.Io.Buffered_Stream.inner_io directly providing an already created dialer.
⇒ Efl.Net.Socket_Simple (class) ⇒ Efl.Io.Buffered_Stream (class) ⇒ Efl.Loop_Consumer (class) ⇒ Efl.Object (class)
address_dial (get, set) protected set
[Overridden from Efl.Net.Dialer]
Returns the address given to Efl.Net.Dialer.dial.
const char *efl_net_dialer_address_dial_get(const Eo *obj); void efl_net_dialer_address_dial_set(Eo *obj, const char *address);
connected (get, set) protected set
[Overridden from Efl.Net.Dialer]
Returns whenever the socket is connected or not.
Eina_Bool efl_net_dialer_connected_get(const Eo *obj); void efl_net_dialer_connected_set(Eo *obj, Eina_Bool connected);
destructor [Overridden from Efl.Object]
Implement this method to provide deinitialization code for your object if you need it.
void efl_destructor(Eo *obj);
dial [Overridden from Efl.Net.Dialer]
Dials to the remote peer.
Eina_Error efl_net_dialer_dial(Eo *obj, const char *address);
finalize [Overridden from Efl.Object]
Implement this method to finish the initialization of your object after all (if any) user-provided configuration methods have been executed.
Efl_Object *efl_finalize(Eo *obj);
inner_class (get, set)
The class used to create Efl.Io.Buffered_Stream.inner_io if none was provided.
const Efl_Class *efl_net_dialer_simple_inner_class_get(const Eo *obj); void efl_net_dialer_simple_inner_class_set(Eo *obj, const Efl_Class *klass);
inner_io (get, set) [Overridden from Efl.Io.Buffered_Stream]
The inner I/O this wrapper operates on.
Efl_Object *efl_io_buffered_stream_inner_io_get(const Eo *obj); void efl_io_buffered_stream_inner_io_set(Eo *obj, Efl_Object *io);
invalidate [Overridden from Efl.Object]
Implement this method to perform special actions when your object loses its parent, if you need to.
void efl_invalidate(Eo *obj);
line_delimiter (get, set) [Overridden from Efl.Io.Buffered_Stream]
If set incoming data will be checked for the delimiter and "line" events. The line may include the delimiter, unless it's end-of-stream in Efl.Io.Buffered_Stream.max_queue_size_input has been reached.
const Eina_Slice efl_io_buffered_stream_line_delimiter_get(const Eo *obj); void efl_io_buffered_stream_line_delimiter_set(Eo *obj, const Eina_Slice slice);
max_queue_size_input (get, set) [Overridden from Efl.Io.Buffered_Stream]
Limits how big the input queue can grow, in bytes.
size_t efl_io_buffered_stream_max_queue_size_input_get(const Eo *obj); void efl_io_buffered_stream_max_queue_size_input_set(Eo *obj, size_t max_queue_size_input);
max_queue_size_output (get, set) [Overridden from Efl.Io.Buffered_Stream]
Limits how big the output queue can grow in bytes.
size_t efl_io_buffered_stream_max_queue_size_output_get(const Eo *obj); void efl_io_buffered_stream_max_queue_size_output_set(Eo *obj, size_t max_queue_size_output);
proxy (get, set) [Overridden from Efl.Net.Dialer]
Controls/retrieves if the dialer should use a proxy.
const char *efl_net_dialer_proxy_get(const Eo *obj); void efl_net_dialer_proxy_set(Eo *obj, const char *proxy_url);
read_chunk_size (get, set) [Overridden from Efl.Io.Buffered_Stream]
Reads chunk size property, in bytes.
size_t efl_io_buffered_stream_read_chunk_size_get(const Eo *obj); void efl_io_buffered_stream_read_chunk_size_set(Eo *obj, size_t size);
timeout_dial (get, set) [Overridden from Efl.Net.Dialer]
The timeout in seconds to use for dialing/connecting.
double efl_net_dialer_timeout_dial_get(const Eo *obj); void efl_net_dialer_timeout_dial_set(Eo *obj, double seconds);
timeout_inactivity (get, set) [Overridden from Efl.Io.Buffered_Stream]
Error as ETIMEDOUT if it becomes inactive for some time.
double efl_io_buffered_stream_timeout_inactivity_get(const Eo *obj); void efl_io_buffered_stream_timeout_inactivity_set(Eo *obj, double seconds);
Efl.Io.Buffered_Stream | ||
---|---|---|
protected set | can_read (get, set) | If true will notify Efl.Io.Reader.read can be called without blocking or failing. |
protected set | can_write (get, set) | If true will notify Efl.Io.Writer.write can be called without blocking or failing. |
clear | Clears the incoming queue. Same as reading all data. | |
close | Closes the Input/Output object. | |
close_on_exec (get, set) | If true will automatically close resources on exec() calls. | |
close_on_invalidate (get, set) | If true will automatically close() on object invalidate. | |
closed (get) | ||
discard | Discards the given number of bytes. | |
protected set | eos (get, set) | If true will notify end of stream. |
eos_mark | Marks the end-of-stream. Signals nothing else will be written. | |
flush | Forces writing all pending data to destination. | |
pending_read (get) | ||
pending_write (get) | ||
progress (get) | ||
read | Reads data into a pre-allocated buffer. | |
slice (get) | ||
write | Writes data from a pre-populated buffer. | |
Efl.Loop_Consumer | ||
future_rejected | Creates a new future that is already rejected to a specified error using the Efl.Loop_Consumer.loop.get. | |
future_resolved | Creates a new future that is already resolved to a value. | |
loop (get) | ||
parent (get, set) | The parent of an object. | |
promise_new | Create a new promise with the scheduler coming from the loop provided by this object. | |
Efl.Net.Socket_Simple | ||
protected set | address_local (get, set) | The local address, similar to getsockname(). |
protected set | address_remote (get, set) | The remote address, similar to getpeername(). |
Efl.Object | ||
allow_parent_unref (get, set) | Allow an object to be deleted by unref even if it has a parent. | |
children_iterator_new | Get an iterator on all children. | |
comment (get, set) | A human readable comment for the object. | |
composite_attach | Make an object a composite object of another. | |
composite_detach | Detach a composite object from another object. | |
composite_part_is | Check if an object is part of a composite object. | |
constructor | Implement this method to provide optional initialization code for your object. | |
debug_name_override | Build a read-only name for this object used for debugging. | |
event_callback_forwarder_del | Remove an event callback forwarder for a specified event and object. | |
event_callback_forwarder_priority_add | Add an event callback forwarder that will make this object emit an event whenever another object (source ) emits it. The event is said to be forwarded from source to this object. |
|
event_callback_stop | Stop the current callback call. | |
event_freeze | Freeze events of this object. | |
event_freeze_count (get) | ||
static | event_global_freeze | Globally freeze events for ALL EFL OBJECTS. |
static | event_global_freeze_count (get) | |
static | event_global_thaw | Globally thaw events for ALL EFL OBJECTS. |
event_thaw | Thaw events of object. | |
finalized (get) | ||
invalidated (get) | ||
invalidating (get) | ||
name (get, set) | The name of the object. | |
name_find | Find a child object with the given name and return it. | |
provider_find | Searches upwards in the object tree for a provider which knows the given class/interface. | |
provider_register | Will register a manager of a specific class to be answered by Efl.Object.provider_find. | |
provider_unregister | Will unregister a manager of a specific class that was previously registered and answered by Efl.Object.provider_find. |
Efl.Io.Buffered_Stream | ||
---|---|---|
error | An error has occurred and I/O has stopped | |
finished | Both read and write are finished. | |
line | If Efl.Io.Buffered_Stream.line_delimiter is set, will be emitted with current line. The memory is only valid during event callback dispatched and should not be modified. Note that the line slice may not be inside Efl.Io.Buffered_Stream.slice. | |
progress | Property Efl.Io.Buffered_Stream.progress changed | |
read,finished | Same as Efl.Io.Reader "eos", for consistency. | |
slice,changed | The read-slice returned by Efl.Io.Buffered_Stream.slice may have changed. | |
write,finished | Efl.Io.Buffered_Stream.eos_mark was called and all available data was sent to destination | |
Efl.Io.Closer | ||
closed | Notifies closed, when property is marked as true | |
Efl.Io.Reader | ||
can_read,changed | Notifies can_read property changed. | |
eos | Notifies end of stream, when property is marked as true. | |
Efl.Io.Writer | ||
can_write,changed | Notifies can_write property changed. | |
Efl.Net.Dialer | ||
dialer,connected | Notifies the socket is connected to the remote peer. | |
dialer,error | Some error happened and the socket stopped working. | |
dialer,resolved | Notifies Efl.Net.Dialer.address_dial was resolved to Efl.Net.Socket.address_remote. | |
Efl.Object | ||
del | Object is being deleted. See Efl.Object.destructor. | |
destruct | Object has been fully destroyed. It can not be used beyond this point. This event should only serve to clean up any reference you keep to the object. | |
invalidate | Object is being invalidated and losing its parent. See Efl.Object.invalidate. | |
noref | Object has lost its last reference, only parent relationship is keeping it alive. Advanced usage. | |
ownership,shared | Object has acquired a second reference. It has multiple owners now. Triggered whenever increasing the refcount from one to two, it will not trigger by further increasing the refcount beyond two. | |
ownership,unique | Object has lost a reference and only one is left. It has just one owner now. Triggered whenever the refcount goes from two to one. |