Basic usage of Ecore_Con_Client

Connecting to the server

On the client side, we need to connect to the previously created server.

Ecore_Con_Server *svr;
svr = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL);
Here we consider that the client and the server are running on the same host.

Registering callbacks

Like for the server, we then need to register callbacks on server events:

  • ECORE_CON_EVENT_SERVER_ADD: to be notified when the server answers the connection request;
  • ECORE_CON_EVENT_SERVER_DEL: when the server disconnects;
  • ECORE_CON_EVENT_SERVER_ERROR: an error occurred when trying to reach the server;
  • ECORE_CON_EVENT_SERVER_DATA: a connected server has sent data.

The _add_cb() calllback prints the name, IP address and port of the server. It also prints if the client is well connected to the server. _del_cb() prints the IP address of the server and closes the connection on the client side. _data_cb() prints the IP address of the server and the length of the received data. The data is available to use thanks to the ev->data structure.

Here follow the callbacks definitions:

Eina_Bool
_add_cb(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Add *ev)
{
   printf("Server connection: ip %s, name %s port %d, connected = %d\n",
           ecore_con_server_ip_get(ev->server),
           ecore_con_server_name_get(ev->server),
           ecore_con_server_port_get(ev->server),
           ecore_con_server_connected_get(ev->server));
   return ECORE_CALLBACK_RENEW;
}
 
Eina_Bool
_del_cb(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Del *ev)
{
   printf("Server disconnected: ip %s\n",
           ecore_con_server_ip_get(ev->server));
   // Close the connection with the server.
   ecore_con_server_del(ev->server);
   return ECORE_CALLBACK_RENEW;
}
 
Eina_Bool
_data_cb(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   printf("Received data from server: ip %s port %d size %i bytes\n",
           ecore_con_server_ip_get(ev->server),
           ecore_con_server_port_get(ev->server),
           ev->size);
   // ev->data holds the data sent by the server.
   printf("%s\n",ev->data);
 
   return ECORE_CALLBACK_RENEW;
}

and the registration for the server events:

/* set event handler for server connect */
ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, (Ecore_Event_Handler_Cb)_add_cb, NULL);
/* set event handler for server disconnect */
ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, (Ecore_Event_Handler_Cb)_del_cb, NULL);
/* set event handler for receiving server data */
ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, (Ecore_Event_Handler_Cb)_data_cb, NULL);

Sending data to the server

Once connected, we can send data to the server.

char hello[] = "hello Server ! I am the client.";
ecore_con_server_send(ev->server, hello, sizeof(hello));
ecore_con_server_flush(ev->server);

The ecore_con_server_send() function is used to send the data, and the ecore_con_server_flush() function is to avoid buffering and send this data immediately to the server.