Tizen 2.1 base
[framework/uifw/ecore.git] / src / examples / ecore_con_client_simple_example.c
1 #include <stdio.h>
2 #include <Ecore.h>
3 #include <Ecore_Con.h>
4
5 #ifdef HAVE_CONFIG_H
6 # include "config.h"
7 #else
8 # define __UNUSED__
9 #endif
10
11 struct _Server
12 {
13    int sdata;
14 };
15
16 Eina_Bool
17 _add(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Add *ev)
18 {
19    char welcome[] = "hello! - sent from the client";
20    struct _Server *server = malloc(sizeof(*server));
21    server->sdata = 0;
22
23    ecore_con_server_data_set(ev->server, server);
24    printf("Server with ip %s, name %s, port %d, connected = %d!\n",
25           ecore_con_server_ip_get(ev->server),
26           ecore_con_server_name_get(ev->server),
27           ecore_con_server_port_get(ev->server),
28           ecore_con_server_connected_get(ev->server));
29    ecore_con_server_send(ev->server, welcome, sizeof(welcome));
30    ecore_con_server_flush(ev->server);
31
32    return ECORE_CALLBACK_RENEW;
33 }
34
35 Eina_Bool
36 _del(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Del *ev)
37 {
38    if (!ev->server)
39      {
40         printf("Failed to establish connection to the server.\nExiting.\n");
41         ecore_main_loop_quit();
42         return ECORE_CALLBACK_RENEW;
43      }
44
45    struct _Server *server = ecore_con_server_data_get(ev->server);
46
47    printf("Lost server with ip %s!\n", ecore_con_server_ip_get(ev->server));
48
49    if (server)
50      {
51         printf("Total data received from this server: %d\n", server->sdata);
52         free(server);
53      }
54
55    ecore_con_server_del(ev->server);
56
57    ecore_main_loop_quit();
58    return ECORE_CALLBACK_RENEW;
59 }
60
61 Eina_Bool
62 _data(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
63 {
64    char fmt[128];
65    struct _Server *server = ecore_con_server_data_get(ev->server);
66
67    snprintf(fmt, sizeof(fmt),
68             "Received %i bytes from server:\n"
69             ">>>>>\n"
70             "%%.%is\n"
71             ">>>>>\n",
72             ev->size, ev->size);
73
74    printf(fmt, ev->data);
75
76    server->sdata += ev->size;
77    return ECORE_CALLBACK_RENEW;
78 }
79
80 int
81 main(int argc, const char *argv[])
82 {
83    Ecore_Con_Server *svr;
84    const char *address;
85    int port = 8080;
86
87    if (argc < 2)
88      {
89         printf("wrong usage. Command syntax is:\n");
90         printf("\tecore_con_client_simple_example <address> [port]\n");
91         exit(1);
92      }
93
94    address = argv[1];
95
96    if (argc > 2)
97      port = atoi(argv[2]);
98
99    eina_init();
100    ecore_init();
101    ecore_con_init();
102
103    if (!(svr = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, address, port, NULL)))
104      {
105         printf("could not connect to the server: %s, port %d.\n",
106                address, port);
107         exit(2);
108      }
109
110    /* set event handler for server connect */
111    ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, (Ecore_Event_Handler_Cb)_add, NULL);
112    /* set event handler for server disconnect */
113    ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, (Ecore_Event_Handler_Cb)_del, NULL);
114    /* set event handler for receiving server data */
115    ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, (Ecore_Event_Handler_Cb)_data, NULL);
116
117    /* start client */
118    ecore_main_loop_begin();
119
120    ecore_con_init();
121    ecore_init();
122    eina_init();
123
124    return 0;
125 }
126