\hypertarget{ecore_con_server_simple_example_8c-example}{\section{ecore\+\_\+con\+\_\+server\+\_\+simple\+\_\+example.\+c}
}
Shows how to setup a simple server that accepts client connections and sends a \char`\"{}hello\char`\"{} string to them. See the complete example description at \hyperlink{ecore_con_server_simple_example_c}{Ecore\+\_\+\+Con -\/ Creating a server}


\begin{DoxyCodeInclude}
\textcolor{comment}{//Compile with:}
\textcolor{comment}{// gcc -o ecore\_con\_server\_simple\_example ecore\_con\_server\_simple\_example.c `pkg-config --libs --cflags
       ecore ecore-con eina`}

\textcolor{preprocessor}{#include <stdio.h>}
\textcolor{preprocessor}{#include <Ecore.h>}
\textcolor{preprocessor}{#include <Ecore\_Con.h>}

\textcolor{preprocessor}{#ifdef HAVE\_CONFIG\_H}
\textcolor{preprocessor}{# include "config.h"}
\textcolor{preprocessor}{#else}
\textcolor{preprocessor}{# define EINA\_UNUSED}
\textcolor{preprocessor}{#endif}

\textcolor{keyword}{struct }\_Client
\{
   \textcolor{keywordtype}{int} sdata;
\};

\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}
\_add(\textcolor{keywordtype}{void} *data EINA\_UNUSED, \textcolor{keywordtype}{int} type EINA\_UNUSED, \hyperlink{struct__Ecore__Con__Event__Client__Add}{Ecore\_Con\_Event\_Client\_Add} *ev
      )
\{
   \textcolor{keywordtype}{char} welcome[] = \textcolor{stringliteral}{"hello! - sent from the server"};
   Ecore\_Con\_Server *srv;
   Ecore\_Con\_Client *cl;
   \textcolor{keyword}{const} \hyperlink{struct__Eina__List}{Eina\_List} *clients, *l;

   \textcolor{keyword}{struct }\_Client *client = malloc(\textcolor{keyword}{sizeof}(*client));
   client->sdata = 0;

   printf(\textcolor{stringliteral}{"Client with ip %s, port %d, connected = %d!\(\backslash\)n"},
          \hyperlink{group__Ecore__Con__Client__Group_ga86b3797ad455971d370c0486e5b59854}{ecore\_con\_client\_ip\_get}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}),
          \hyperlink{group__Ecore__Con__Client__Group_ga555c9fd886a4833006888e685565ad03}{ecore\_con\_client\_port\_get}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}),
          \hyperlink{group__Ecore__Con__Client__Group_gaade0309ee7c315f7e54bc902078791e8}{ecore\_con\_client\_connected\_get}(ev->
      \hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}));

   \hyperlink{group__Ecore__Con__Client__Group_ga166fd469acaa809faa4247b12d79278f}{ecore\_con\_client\_send}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}, welcome, \textcolor{keyword}{sizeof}(welcome));
   \hyperlink{group__Ecore__Con__Client__Group_gaccf37688bb1ecbedc8791b5b43c1595c}{ecore\_con\_client\_flush}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client});

   \hyperlink{group__Ecore__Con__Client__Group_gac96c76af4f6c9d842e52ea38312c73dd}{ecore\_con\_client\_timeout\_set}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}, 6);

   \hyperlink{group__Ecore__Con__Client__Group_ga0c81c3b201d7fa6d48b6f5e99a651edc}{ecore\_con\_client\_data\_set}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client}, client);

   srv = ecore\_con\_client\_server\_get(ev->\hyperlink{struct__Ecore__Con__Event__Client__Add_a9877727e79213077e8592dfca5895cbe}{client});
   printf(\textcolor{stringliteral}{"Clients connected to this server:\(\backslash\)n"});
   clients = ecore\_con\_server\_clients\_get(srv);
   \hyperlink{group__Eina__List__Group_gad02f746a08ee0b12b7ed66d4bc0d71d8}{EINA\_LIST\_FOREACH}(clients, l, cl)
     printf("%s\(\backslash\)n", \hyperlink{group__Ecore__Con__Client__Group_ga86b3797ad455971d370c0486e5b59854}{ecore\_con\_client\_ip\_get}(cl));

   return ECORE\_CALLBACK\_RENEW;
\}

\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}
\_del(\textcolor{keywordtype}{void} *data EINA\_UNUSED, \textcolor{keywordtype}{int} type EINA\_UNUSED, \hyperlink{struct__Ecore__Con__Event__Client__Del}{Ecore\_Con\_Event\_Client\_Del} *ev
      )
\{
   \textcolor{keyword}{struct }\_Client *client;

   \textcolor{keywordflow}{if} (!ev->client)
     \textcolor{keywordflow}{return} \hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW};

   client = \hyperlink{group__Ecore__Con__Client__Group_ga34e96711b04adecc9ade2b1f3408c390}{ecore\_con\_client\_data\_get}(ev->client);

   printf(\textcolor{stringliteral}{"Lost client with ip %s!\(\backslash\)n"}, \hyperlink{group__Ecore__Con__Client__Group_ga86b3797ad455971d370c0486e5b59854}{ecore\_con\_client\_ip\_get}(ev->client));
   printf(\textcolor{stringliteral}{"Total data received from this client: %d\(\backslash\)n"}, client->sdata);
   printf(\textcolor{stringliteral}{"Client was connected for %0.3f seconds.\(\backslash\)n"},
          \hyperlink{group__Ecore__Con__Client__Group_ga6ce6fef375f4d5a0d28a513f2fc40023}{ecore\_con\_client\_uptime\_get}(ev->client));

   \textcolor{keywordflow}{if} (client)
     free(client);

   \hyperlink{group__Ecore__Con__Client__Group_gaddd302cb689b5040363246a58f20a680}{ecore\_con\_client\_del}(ev->client);

   \textcolor{keywordflow}{return} \hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW};
\}

\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}
\_data(\textcolor{keywordtype}{void} *data EINA\_UNUSED, \textcolor{keywordtype}{int} type EINA\_UNUSED, \hyperlink{struct__Ecore__Con__Event__Client__Data}{Ecore\_Con\_Event\_Client\_Data} 
      *ev)
\{
   \textcolor{keywordtype}{char} fmt[128];
   \textcolor{keyword}{struct }\_Client *client = \hyperlink{group__Ecore__Con__Client__Group_ga34e96711b04adecc9ade2b1f3408c390}{ecore\_con\_client\_data\_get}(ev->
      \hyperlink{struct__Ecore__Con__Event__Client__Data_a2c3e5b340b67fde235d2da9814f3d413}{client});

   snprintf(fmt, \textcolor{keyword}{sizeof}(fmt),
            \textcolor{stringliteral}{"Received %i bytes from client %s port %d:\(\backslash\)n"}
            \textcolor{stringliteral}{">>>>>\(\backslash\)n"}
            \textcolor{stringliteral}{"%%.%is\(\backslash\)n"}
            \textcolor{stringliteral}{">>>>>\(\backslash\)n"},
            ev->\hyperlink{struct__Ecore__Con__Event__Client__Data_a6e87f88d094ec774fb22133a0632d8b3}{size}, \hyperlink{group__Ecore__Con__Client__Group_ga86b3797ad455971d370c0486e5b59854}{ecore\_con\_client\_ip\_get}(ev->
      \hyperlink{struct__Ecore__Con__Event__Client__Data_a2c3e5b340b67fde235d2da9814f3d413}{client}),
            \hyperlink{group__Ecore__Con__Client__Group_ga555c9fd886a4833006888e685565ad03}{ecore\_con\_client\_port\_get}(ev->\hyperlink{struct__Ecore__Con__Event__Client__Data_a2c3e5b340b67fde235d2da9814f3d413}{client}), ev->
      \hyperlink{struct__Ecore__Con__Event__Client__Data_a6e87f88d094ec774fb22133a0632d8b3}{size});

   printf(fmt, ev->\hyperlink{struct__Ecore__Con__Event__Client__Data_a1e2cdb017a18b0515d2102edc016b4c5}{data});

   client->sdata += ev->\hyperlink{struct__Ecore__Con__Event__Client__Data_a6e87f88d094ec774fb22133a0632d8b3}{size};

   \textcolor{keywordflow}{return} \hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW};
\}

\textcolor{keywordtype}{int}
main(\textcolor{keywordtype}{void})
\{
   Ecore\_Con\_Server *svr;
   Ecore\_Con\_Client *cl;
   \textcolor{keyword}{const} \hyperlink{struct__Eina__List}{Eina\_List} *clients, *l;

   \hyperlink{group__Eina__Main__Group_gabf448ada5bc81a07342b66c6f818ee5e}{eina\_init}();
   \hyperlink{group__Ecore__Init__Group_ga77757609684a2c922dc5ec398274751b}{ecore\_init}();
   \hyperlink{group__Ecore__Con__Events__Group_gacf5ecf42c516bb9c8b6759721e9559bd}{ecore\_con\_init}();

   \textcolor{keywordflow}{if} (!(svr = \hyperlink{group__Ecore__Con__Server__Group_gaf450c4039d5e61d4f7a58d7b67efc1e8}{ecore\_con\_server\_add}(\hyperlink{group__Ecore__Con__Lib__Group_gga4862bfa05383e6e16a1dfc6eafc90564ab02a4b8522d1ed409cfb24131b24c4ed}{ECORE\_CON\_REMOTE\_TCP}, \textcolor{stringliteral}{"
      127.0.0.1"}, 8080, NULL)))
     exit(1);

   \hyperlink{group__Ecore__Event__Group_gae75b0b1b2c50e73b8e42afc628b00a62}{ecore\_event\_handler\_add}(\hyperlink{group__Ecore__Con__Events__Group_ga2ccb9d84c4e5480a787e4672af3e353f}{ECORE\_CON\_EVENT\_CLIENT\_ADD}, (
      \hyperlink{group__Ecore__Event__Group_ga64b4df04cbafda481593d0bc29617c6d}{Ecore\_Event\_Handler\_Cb})\_add, NULL);
   \hyperlink{group__Ecore__Event__Group_gae75b0b1b2c50e73b8e42afc628b00a62}{ecore\_event\_handler\_add}(\hyperlink{group__Ecore__Con__Events__Group_ga0daddd73ab2ab92cbfd91f50ea344e12}{ECORE\_CON\_EVENT\_CLIENT\_DEL}, (
      \hyperlink{group__Ecore__Event__Group_ga64b4df04cbafda481593d0bc29617c6d}{Ecore\_Event\_Handler\_Cb})\_del, NULL);
   \hyperlink{group__Ecore__Event__Group_gae75b0b1b2c50e73b8e42afc628b00a62}{ecore\_event\_handler\_add}(\hyperlink{group__Ecore__Con__Events__Group_gafb9ce301001338915a45969e4d11d016}{ECORE\_CON\_EVENT\_CLIENT\_DATA}, (
      \hyperlink{group__Ecore__Event__Group_ga64b4df04cbafda481593d0bc29617c6d}{Ecore\_Event\_Handler\_Cb})\_data, NULL);

   \hyperlink{group__Ecore__Con__Server__Group_ga468eec82ada0234b6ea2b5b8d6e25407}{ecore\_con\_server\_timeout\_set}(svr, 10);
   \hyperlink{group__Ecore__Con__Server__Group_gabaef36c991be8922766611c75372ced4}{ecore\_con\_server\_client\_limit\_set}(svr, 3, 0);

   \hyperlink{group__Ecore__Main__Loop__Group_gaf103b9f668bb3e4fed12e52c6180132d}{ecore\_main\_loop\_begin}();

   clients = ecore\_con\_server\_clients\_get(svr);
   printf(\textcolor{stringliteral}{"Clients connected to this server when exiting: %d\(\backslash\)n"},
          \hyperlink{group__Eina__List__Group_ga301729054a498a2df09a5f1dd760697e}{eina\_list\_count}(clients));
   \hyperlink{group__Eina__List__Group_gad02f746a08ee0b12b7ed66d4bc0d71d8}{EINA\_LIST\_FOREACH}(clients, l, cl)
     \{
        printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, \hyperlink{group__Ecore__Con__Client__Group_ga86b3797ad455971d370c0486e5b59854}{ecore\_con\_client\_ip\_get}(cl));
        free(\hyperlink{group__Ecore__Con__Client__Group_ga34e96711b04adecc9ade2b1f3408c390}{ecore\_con\_client\_data\_get}(cl));
     \}

   printf(\textcolor{stringliteral}{"Server was up for %0.3f seconds\(\backslash\)n"},
          \hyperlink{group__Ecore__Con__Server__Group_ga1f7c1040e60e9e9a53a9a01f70aa52b3}{ecore\_con\_server\_uptime\_get}(svr));

   \hyperlink{group__Ecore__Con__Events__Group_gaccfd8dd2a1187b71339b5cc39dc83938}{ecore\_con\_shutdown}();
   \hyperlink{group__Ecore__Init__Group_ga768298b932f18d7e7593a447493e5cde}{ecore\_shutdown}();
   \hyperlink{group__Eina__Main__Group_ga6741fcaba116e31e96ce14dcfa03f568}{eina\_shutdown}();

   \textcolor{keywordflow}{return} 0;
\}

\end{DoxyCodeInclude}
 