Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk_server/src/bin


Modified Files:
        Makefile.am etk_server.c etk_server.h 
Removed Files:
        etk_server_valid_funcs.c etk_server_valid_signals.c 


Log Message:
- remove fifo model, now we use ecore_con
- add async communication mode, this requires a bit more work on the client 
side but it sure beats the hell out of having sync communication all over
- add perl code that parses etk's header files and source so it can gather 
information about types, protypes, signals, callbacks, and (soon) structs. 
parsed code is placed in .c files and compiled with etk_server
- deprecate examples for now except for etk.php

===================================================================
RCS file: /cvs/e/e17/proto/etk_server/src/bin/Makefile.am,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- Makefile.am 28 Mar 2006 07:40:53 -0000      1.2
+++ Makefile.am 31 Mar 2006 10:34:16 -0000      1.3
@@ -1,5 +1,8 @@
 ## Process this file with automake to produce Makefile.in
 
+MAINTAINERCLEANFILES = Makefile.in etk_server_valid_funcs.c \
+                       etk_server_valid_signals.c
+
 INCLUDES = \
 -Wall -export-dynamic \
 -I/usr/local/include \
===================================================================
RCS file: /cvs/e/e17/proto/etk_server/src/bin/etk_server.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_server.c        28 Mar 2006 07:40:53 -0000      1.5
+++ etk_server.c        31 Mar 2006 10:34:16 -0000      1.6
@@ -4,307 +4,349 @@
 static void *etk_server_function_exists(char *func_name, char **args, int 
arg_num);
 static int _etk_server_signal_exit_cb(void *data, int type, void *event);
 static int is_number(char *buffer);
+static char *etk_server_iterate();
+
 
 Evas_Hash *_etk_server_valid_funcs = NULL;
 Evas_Hash *_etk_server_valid_signals = NULL;
 static Evas_Hash *_etk_server_vars = NULL;
 static Ecore_Hash *_etk_server_rev_vars = NULL;
 static Evas_Hash *_etk_server_callbacks = NULL;
-static int _etk_server_var_num = 0;
-static int _etk_server_continue = 1;
+static int _etk_server_continue = 0;
 static char *_etk_server_callback_id = NULL;
 static char *_etk_server_callback_data = NULL;
 static int _etk_server_main_loop = 1;
 
-int main(int argc, char **argv)
+#define DELIM_CHR '|'
+#define BUF_SIZE 512
+
+static Ecore_Con_Event_Client_Data *e;
+static Ecore_Con_Server *server;
+char buf[BUF_SIZE];
+int pos = 0;
+char *args[64];
+
+int
+e_client_add(void *data, int type, void *ev)
 {
-   char *fifo_path = NULL;
-   int i, pid = 0;
-       
-   if(argc <= 1)
-     {
-       printf(_("etk_server error: no fifo file provided\n"));
-       return -1;
-     }
+   Ecore_Con_Event_Client_Add *e;
+   Ecore_Con_Server *server;
    
-   for(i = 1; i < argc; i++)
-     {
-        if(!strcmp(argv[i], "-d"))
-          pid = 1;
-       else fifo_path = argv[i];
-     } 
+   e = ev;
+   server = data;
    
-   if(pid == 1)        
-     {
-        pid = fork();
-        if(pid)
-           exit(EXIT_SUCCESS);
-     } 
-       
-   if(fifo_path == NULL)
-     {
-       printf(_("etk_server error: no fifo file provided\n"));
-       return -1;
-     }
-       
-   if(ecore_file_exists(fifo_path))
-     if(!ecore_file_unlink(fifo_path))
-       {
-         fprintf(stderr, "etk_server error: cant remove old fifo %s! (error 
%d)", fifo_path, errno);
-         return 1;       
-       }
+   printf("new client added!\n");
    
-   if(mkfifo(fifo_path, 0644))
-     {
-       fprintf(stderr, "etk_server error: cant create fifo %s! (error %d)", 
fifo_path, errno);
-       return 1;
-     }     
+   return 1;
+}
+
+int
+e_client_del(void *data, int type, void *ev)
+{
+   Ecore_Con_Event_Client_Del *e;
+   Ecore_Con_Server *server;
    
-   ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, 
_etk_server_signal_exit_cb, NULL);
+   e = ev;
+   server = data;
+   
+   printf("client deleted!\n");
+   
+   return 1;
+}
 
-   _etk_server_valid_funcs_populate();
-   _etk_server_valid_signals_populate();   
-   _etk_server_rev_vars = ecore_hash_new(ecore_direct_hash, 
ecore_direct_compare);
-   while(_etk_server_main_loop)
+void process_cmd(char *cmd);
+
+void etk_server_job_cb2(void *data)
+{
+   process_cmd((char*)data);
+   free(data);
+}
+
+int etk_server_timer_cb(void *data)
+{
+   ecore_job_add(etk_server_job_cb2, data);
+   return 0;
+}
+
+int
+e_client_data(void *data, int type, void *ev)
+{
+   Ecore_Con_Server *server;
+   int i;
+   char *d;
+   char *last_d;
+   
+   e = ev;
+   server = data;
+   d = e->data;
+   
+   last_d = d;      
+   
+   if(_etk_server_continue == 1)
+     return 1;   
+   
+   for(i = 0; i < e->size; i++)
      {
-       FILE *fifo;
-       int len;
-       char input[256];
+       if(d[i] == '\0')
+         {
+            char cmd[1024];
+            
+            memset(cmd, '\0', 1024);
+            memcpy(cmd, buf, pos);
+            process_cmd(cmd);
+            pos = 0;
+            memset(buf, '\0', BUF_SIZE);
+         }
+       else
+         buf[pos++] = d[i];
+     }
+   
+   return 1;         
+}
+
+void etk_server_object_destroyed_cb(Etk_Object *object, void *data)
+{
+   //char *varname = NULL;
+   
+   //varname = etk_object_data_get(object, "varname");
+   //if(!varname)
+   //  return;
+   
+   //_etk_server_vars = evas_hash_del(_etk_server_vars, varname, object);
+   ecore_hash_remove(_etk_server_rev_vars, object);
+}
 
-       if((fifo = fopen(fifo_path, "r")) == NULL)
+void process_cmd(char *cmd)
+{  
+   int len;
+   char input[256];
+   int i;
+
+   len = 256;
+   snprintf(input, sizeof(input), "%s", cmd);
+   if(len > 0)
+     {
+       int cur;
+       int spaces = 0;
+       int laststate;
+       int state;
+       char *start;
+       char *end;      
+       void *(*func)(void *, ...);     
+            
+       for(i = 0; input[i] != '\0'; i++)
          {
-            fprintf(stderr, "etk_server error: cant open fifo %s! (error 
%d)\n", fifo_path, errno);
-            return 1;
+            if(input[i] == ' ')
+              ++spaces;
+            if(input[i] == '\n')
+              input[i] = '\0';
+            if(input[i] == '\0' && i < len - 1)
+              input[i] = ' ';
          }
-               
-       if((len = fread(&input, sizeof(char), 255, fifo)) > 0)
+       
+       for(i = 0; i < sizeof(args) / sizeof(char*); i++)
+         args[i] = NULL;
+       
+#define out 0
+#define in 1
+
+       cur = 0;
+       state = laststate = out;
+       start = end = &input[0];
+       
+       for(i = 0; i <= len; i++)
          {
-            int cur;
-            int spaces = 0;
-            int laststate;
-            int state;
-            char *start;
-            char *end;
-            char *args[64];
-            void *(*func)(void *, ...);
-                                            
-            //if(input[len - 1] == '\n')
-            //  input[len - 1] = '\0';
-            
-            for(i = 0; i < len; i++)
-              {
-                 if(input[i] == ' ')
-                   ++spaces;
-                 if(input[i] == '\n')
-                   input[i] = '\0';
-                 if(input[i] == '\0' && i < len - 1)
-                   input[i] = ' ';
+            if(input[i] == '\0')
+              {
+                 args[cur] = calloc(end - start + 1, sizeof(char));
+                 snprintf(args[cur], (end - start + 1) * sizeof(char), "%s", 
start);
+                 ++cur;
+                 break;
               }
             
-            if(spaces == 0)
+            if(input[i] != ' ' && input[i] != '"')
               {
-                 if((func = etk_server_function_exists(input, NULL, 0)) != 
NULL)
-                   {
-                      void *ret = NULL;
-                      char varname[32];                       
-                      
-                      ret = func(NULL);
-                      
-                      if(ret != NULL && strncmp(input, "etk_server", 10))
-                        {
-                           char *name = NULL;
-
-                           snprintf(varname, sizeof(varname), "var%d", 
_etk_server_var_num);
-                           
-                           if((name = ecore_hash_get(_etk_server_rev_vars, 
ret)) != NULL)
-                             {
-                                printf("DEBUG: variable already found: %s\n", 
name);
-                             }
-                           else
-                             {
-                                ecore_hash_set(_etk_server_rev_vars, ret, 
varname);
-                           
-                                printf("%p (%s)\n", ret, varname);             
            
-                                ++_etk_server_var_num;
-                                _etk_server_vars = 
evas_hash_add(_etk_server_vars, varname, ret);
-                             }
-                        }
-                      else if(ret != NULL)
-                        {
-                           snprintf(varname, sizeof(varname), "%s", 
(char*)ret);
-                        }
-
-                      fclose(fifo);
-
-                      if((fifo = fopen(fifo_path, "w")) == NULL)
-                        {
-                           fprintf(stderr, "etk_server error: cant open fifo 
%s! (error %d)\n", fifo_path, errno);
-                           return 1;
-                        }
-
-                      if(ret != NULL)
-                        fwrite(varname, sizeof(char), strlen(varname), fifo);
-                      else
-                        fwrite("\0", sizeof(char), strlen("\0"), fifo);
-
-                      fclose(fifo);
-                   }
-                 else
-                   {
-                      fprintf(stderr, "etk_server warning: can't find function 
%s\n", input);
-                      fclose(fifo);
-                   }
+                 ++end;
                  continue;
               }
-
-            for(i = 0; i < sizeof(args) / sizeof(char*); i++)
-              args[i] = NULL;
-
-#define out 0
-#define in 1
-
-            cur = 0;
-            state = laststate = out;
-            start = end = &input[0];
-
-            for(i = 0; i <= len; i++)
+            
+            if(input[i] == ' ' && state == out)
               {
-                 if(input[i] == '\0')
-                   {
-                      args[cur] = calloc(end - start + 1, sizeof(char));
-                      snprintf(args[cur], (end - start + 1) * sizeof(char), 
"%s", start);
-                      ++cur;
-                      break;
-                   }
-
-                 if(input[i] != ' ' && input[i] != '"')
+                 args[cur] = calloc(end - start + 1, sizeof(char));
+                 snprintf(args[cur], (end - start + 1) * sizeof(char), "%s", 
start);
+                 ++cur;
+                 if(i + 1 < strlen(input))
                    {
-                      ++end;
-                      continue;
-                   }
-
-                 if(input[i] == ' ' && state == out)
-                   {
-                      args[cur] = calloc(end - start + 1, sizeof(char));
-                      snprintf(args[cur], (end - start + 1) * sizeof(char), 
"%s", start);
-                      ++cur;
-                      if(i + 1 < strlen(input))
-                        {
-                           start = &input[i + 1];
-                           end = start;
-                        }
-                      else
-                        break;
-                      continue;
-                   }
-
-                 if(input[i] == '"' && state == out)
-                   {
-                      if(i + 1 >= strlen(input))
-                        break;
-
                       start = &input[i + 1];
                       end = start;
-                      laststate = out;
-                      state = in;
-                      continue;
-                   }
-
-                 if(input[i] == ' ' && state == in)
-                   {
-                      ++end;
-                      continue;
                    }
-
-                 if(input[i] == '"' && state == in && input[i - 1] != '\\')
-                   {
+                 else
+                   break;
+                 continue;
+              }
+            
+            if(input[i] == '"' && state == out)
+              {
+                 if(i + 1 >= strlen(input))
+                   break;
+                 
+                 start = &input[i + 1];
+                 end = start;
+                 laststate = out;
+                 state = in;
+                 continue;
+              }
+            
+            if(input[i] == ' ' && state == in)
+              {
+                 ++end;
+                 continue;
+              }
+            
+            if(input[i] == '"' && state == in && input[i - 1] != '\\')
+              {
                       args[cur] = calloc(end - start + 1, sizeof(char));
-                      snprintf(args[cur], (end - start + 1) * sizeof(char), 
"%s", start);
-                      ++cur;
-                      if(i + 2 < strlen(input))
-                        {
-                           start = &input[i + 2];
-                           ++i;
-                           laststate = in;
-                           state = out;
-                           end = start;
-                        }
-                      else
-                        break;
-                      continue;
-                   }
-
-                 if(input[i] == '"' && state == in && input[i - 1] == '\\')
-                   {
-                      ++end;
-                      continue;
+                 snprintf(args[cur], (end - start + 1) * sizeof(char), "%s", 
start);
+                 ++cur;
+                 if(i + 2 < strlen(input))
+                   {
+                      start = &input[i + 2];
+                      ++i;
+                      laststate = in;
+                      state = out;
+                      end = start;
                    }
+                 else
+                   break;
+                 continue;
+              }
+            
+            if(input[i] == '"' && state == in && input[i - 1] == '\\')
+              {
+                 ++end;
+                 continue;
               }
-                   
+         }
+       
 #undef out
-#undef in
-            if((func = etk_server_function_exists(args[0], args + 1, cur - 1)) 
!= NULL)
+#undef in      
+       
+       if((func = etk_server_function_exists(args[2], args + 3, cur - 3)) != 
NULL)
+         {
+            void *ret;
+            char varname[32];
+            
+            /* special case where we dont want to convert args */
+            if(!strcmp(args[2], "etk_server_var_get"))
               {
-                 void *ret;
-                 char varname[32];
-                 
-                 /* special case where we dont want to convert args */
-                 if(!strcmp(args[0], "etk_server_var_get"))
-                   {
-                      ret = func(args[1]);
-                      snprintf(varname, sizeof(varname), "%s", (char*)ret);
-                   }
+                 ret = func(args[3]);
+                 snprintf(varname, sizeof(varname), "%s", (char*)ret);
+              }
+            else
+              {
+                 if(args[3] != NULL)
+                   ret = 
func(etk_server_arg_convert(args[3]),etk_server_arg_convert(args[4]),etk_server_arg_convert(args[5]),etk_server_arg_convert(args[6]),etk_server_arg_convert(args[7]),etk_server_arg_convert(args[8]),etk_server_arg_convert(args[9]),etk_server_arg_convert(args[10]),etk_server_arg_convert(args[11]),etk_server_arg_convert(args[12]),etk_server_arg_convert(args[13]),etk_server_arg_convert(args[14]),etk_server_arg_convert(args[15]),etk_server_arg_convert(args[16]),etk_server_arg_convert(args[17]),etk_server_arg_convert(args[18]),etk_server_arg_convert(args[19]),etk_server_arg_convert(args[20]),etk_server_arg_convert(args[21]),etk_server_arg_convert(args[22]),etk_server_arg_convert(args[23]),etk_server_arg_convert(args[24]),etk_server_arg_convert(args[25]),etk_server_arg_convert(args[26]),etk_server_arg_convert(args[27]),etk_server_arg_convert(args[28]),etk_server_arg_convert(args[29]),etk_server_arg_convert(args[30]),etk_server_arg_convert(args[31]),etk_server_arg_convert
 
(args[32]),etk_server_arg_convert(args[33]),etk_server_arg_convert(args[34]),etk_server_arg_convert(args[35]),etk_server_arg_convert(args[36]),etk_server_arg_convert(args[37]),etk_server_arg_convert(args[38]),etk_server_arg_convert(args[39]),etk_server_arg_convert(args[40]),etk_server_arg_convert(args[41]),etk_server_arg_convert(args[42]),etk_server_arg_convert(args[43]),etk_server_arg_convert(args[44]),etk_server_arg_convert(args[45]),etk_server_arg_convert(args[46]),etk_server_arg_convert(args[47]),etk_server_arg_convert(args[48]),etk_server_arg_convert(args[49]),etk_server_arg_convert(args[50]),etk_server_arg_convert(args[51]),etk_server_arg_convert(args[52]),etk_server_arg_convert(args[53]),etk_server_arg_convert(args[54]),etk_server_arg_convert(args[55]),etk_server_arg_convert(args[56]),etk_server_arg_convert(args[57]),etk_server_arg_convert(args[58]),etk_server_arg_convert(args[59]),etk_server_arg_convert(args[60]),etk_server_arg_convert(args[61]),etk_server_arg_conver
 t(args[62]),etk_server_arg_convert(args[63]));
                  else
+                   ret = func(NULL);
+                 
+                 if(!strcmp(args[2], "etk_server_callback"))               
+                   return;                 
+                 
+                 /* todo: fixme, length of args[0] */
+                 if(ret != NULL && strncmp(args[2], "etk_server", 10))
                    {
+                      char *name = NULL;
                       
-                      ret = 
func(etk_server_arg_convert(args[1]),etk_server_arg_convert(args[2]),etk_server_arg_convert(args[3]),etk_server_arg_convert(args[4]),etk_server_arg_convert(args[5]),etk_server_arg_convert(args[6]),etk_server_arg_convert(args[7]),etk_server_arg_convert(args[8]),etk_server_arg_convert(args[9]),etk_server_arg_convert(args[10]),etk_server_arg_convert(args[11]),etk_server_arg_convert(args[12]),etk_server_arg_convert(args[13]),etk_server_arg_convert(args[14]),etk_server_arg_convert(args[15]),etk_server_arg_convert(args[16]),etk_server_arg_convert(args[17]),etk_server_arg_convert(args[18]),etk_server_arg_convert(args[19]),etk_server_arg_convert(args[20]),etk_server_arg_convert(args[21]),etk_server_arg_convert(args[22]),etk_server_arg_convert(args[23]),etk_server_arg_convert(args[24]),etk_server_arg_convert(args[25]),etk_server_arg_convert(args[26]),etk_server_arg_convert(args[27]),etk_server_arg_convert(args[28]),etk_server_arg_convert(args[29]),etk_server_arg_conver
 
t(args[30]),etk_server_arg_convert(args[31]),etk_server_arg_convert(args[32]),etk_server_arg_convert(args[33]),etk_server_arg_convert(args[34]),etk_server_arg_convert(args[35]),etk_server_arg_convert(args[36]),etk_server_arg_convert(args[37]),etk_server_arg_convert(args[38]),etk_server_arg_convert(args[39]),etk_server_arg_convert(args[40]),etk_server_arg_convert(args[41]),etk_server_arg_convert(args[42]),etk_server_arg_convert(args[43]),etk_server_arg_convert(args[44]),etk_server_arg_convert(args[45]),etk_server_arg_convert(args[46]),etk_server_arg_convert(args[47]),etk_server_arg_convert(args[48]),etk_server_arg_convert(args[49]),etk_server_arg_convert(args[50]),etk_server_arg_convert(args[51]),etk_server_arg_convert(args[52]),etk_server_arg_convert(args[53]),etk_server_arg_convert(args[54]),etk_server_arg_convert(args[55]),etk_server_arg_convert(args[56]),etk_server_arg_convert(args[57]),etk_server_arg_convert(args[58]),etk_server_arg_convert(args[59]),etk_server_arg_conve
 
rt(args[60]),etk_server_arg_convert(args[61]),etk_server_arg_convert(args[62]),etk_server_arg_convert(args[63]));
+                      snprintf(varname, sizeof(varname), "%s", args[1]);
                       
-                      /* todo: fixme, length of args[0] */
-                      if(ret != NULL && strncmp(args[0], "etk_server", 10))
+                      //if((name = ecore_hash_get(_etk_server_rev_vars, ret)) 
!= NULL)
+                       // {
+                         //  printf("DEBUG: variable already found: %s in 
(%s)\n", name, args[2]);
+                       // }                        
+                      //else
                         {
-                           char *name = NULL;
-
-                           snprintf(varname, sizeof(varname), "var%d", 
_etk_server_var_num);
-                           
-                           if((name = ecore_hash_get(_etk_server_rev_vars, 
ret)) != NULL)
-                             {
-                                printf("DEBUG: variable already found: %s\n", 
name);
-                             }                     
-                           else
+                           if(!strncmp("etk_", args[2], 4) && strstr(args[2], 
"_new\0"))
                              {
-                                ecore_hash_set(_etk_server_rev_vars, ret, 
varname);
-                           
-                                printf("%p (%s)\n", ret, varname);
-                                ++_etk_server_var_num;
-                                _etk_server_vars = 
evas_hash_add(_etk_server_vars, varname, ret);
+                                if(ETK_IS_OBJECT(ret))
+                                  {
+                                     //etk_signal_connect("destroyed", 
ETK_OBJECT(ret), ETK_CALLBACK(etk_server_object_destroyed_cb), NULL);
+                                     //etk_object_data_set(ETK_OBJECT(ret), 
"varname", strdup(varname));
+                                  }                             
                              }
+                           ecore_hash_set(_etk_server_rev_vars, ret, 
strdup(varname));
+                           _etk_server_vars = evas_hash_add(_etk_server_vars, 
varname, ret);
                         }
-                      else if(ret != NULL)                      
-                        snprintf(varname, sizeof(varname), "%s", (char*)ret);
                    }
+                 else if(ret != NULL)                   
+                   snprintf(varname, sizeof(varname), "%s", (char*)ret);
+              }                  
+            
+            if(ret != NULL && !strcmp(args[0], "s"))
+              {                  
+                 /* attach app_id to client */           
+                 if(!strcmp(args[2], "etk_server_init"))                   
+                   ecore_con_client_data_set(e->client, strdup(varname));
                  
-                 fclose(fifo);
-
-                 if((fifo = fopen(fifo_path, "w")) == NULL)
-                   {
-                      fprintf(stderr, "etk_server error: cant open fifo %s! 
(error %d)\n", fifo_path, errno);
-                      return 1;
-                   }
-
-                 if(ret != NULL)
-                   fwrite(varname, sizeof(char), strlen(varname), fifo);
-                 else
-                   fwrite("\0", sizeof(char), strlen("\0"), fifo);
-
-                 fclose(fifo);
+                 ecore_con_client_send(e->client, varname, strlen(varname));
               }
-            else              
-              fclose(fifo);           
          }
-       else
-         fprintf(stderr, "etk_server error: cant read from fifo!\n");
      }
+   else
+     {
+       fprintf(stderr, "etk_server error: cant read from fifo!\n");
+     }
+}      
+
+int main(int argc, char **argv)
+{   
+   char *fifo_path = NULL;
+   int i, pid = 0;
+
+   ecore_init();
+   ecore_con_init();   
+   evas_init();   
+   
+//   if(argc <= 1)
+//     {
+//     printf(_("etk_server error: no fifo file provided\n"));
+//     return -1;
+//     }
+   
+   for(i = 1; i < argc; i++)
+     {
+        if(!strcmp(argv[i], "-d"))
+          pid = 1;
+       else fifo_path = argv[i];
+     } 
+   
+   if(pid == 1)        
+     {
+        pid = fork();
+        if(pid)
+           exit(EXIT_SUCCESS);
+     }            
+   
+   server = ecore_con_server_add(ECORE_CON_REMOTE_SYSTEM,
+                                "webserver", 8080, NULL);
+   
+   ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD,
+                          e_client_add, server);
+   ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL,
+                          e_client_del,  server);
+   ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA,
+                          e_client_data, server);
+   
+   ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, 
_etk_server_signal_exit_cb, NULL);
 
+   _etk_server_valid_funcs_populate();
+   _etk_server_valid_signals_populate();   
+   _etk_server_rev_vars = ecore_hash_new(ecore_direct_hash, 
ecore_direct_compare);
+   
+   etk_init();
+
+   ecore_main_loop_begin();
+   ecore_con_shutdown();
+   ecore_shutdown();
    return 0;
 }
 
@@ -441,11 +483,29 @@
    return func;
 }
 
+static void etk_server_server_foreach(void *value, void *user_data)
+{
+   Ecore_Con_Client *client;
+   char *app_id;
+   
+   client = value;
+
+   app_id = ecore_con_client_data_get(client);
+   if(!strncmp(app_id, user_data, strlen(app_id)))
+     {
+       char *ret;
+       
+       ret = etk_server_iterate();
+       ecore_con_client_send(client, ret, strlen(ret));
+     }
+}
+
 static void _etk_server_internal_callback(Etk_Object *object, ...)
 {
    Etk_Type *type;
    Evas_List *sigs = NULL;   
    char *sig = NULL;
+   char *app_id = NULL;
    va_list args;   
 
    va_start(args, object);   
@@ -453,6 +513,7 @@
    _etk_server_continue = 0;
    E_FREE(_etk_server_callback_data);   
    sig = etk_object_data_get(object, "signal");
+   app_id = etk_object_data_get(object, "app_id");
    if(!sig) return;             
        
    if((sigs = evas_hash_find(_etk_server_valid_signals, sig)) != NULL)
@@ -489,14 +550,40 @@
      }
    
    va_end(args);   
+   
+     {      
+/*
+       Evas_List *l;
+       
+       for(l = _etk_server_clients; l; l = l->next);
+         {
+            Ecore_Con_Client *client;
+            char *c_app_id;
+            
+            client = _etk_server_clients->data;
+            c_app_id = ecore_con_client_data_get(client);
+            if(!strcmp(app_id, c_app_id))
+              {
+                 char *ret;
+                 
+                 ret = etk_server_iterate();
+                 ecore_con_client_send(client, ret, strlen(ret));
+              }
+            return;
+         }
+*/ 
+       ecore_list_for_each(ecore_con_server_clients_get(server), 
etk_server_server_foreach, app_id);
+       
+     }
+   
 }
 
 static char *etk_server_iterate()
 {
-   while (_etk_server_continue)
+//   while (_etk_server_continue)
      {
-       ecore_main_loop_iterate();
-       usleep(100);
+//     ecore_main_loop_iterate();
+//     usleep(100);
      }
    
    if(_etk_server_callback_data)
@@ -521,6 +608,11 @@
    return 0;
 }
 
+char *etk_server_init()
+{
+   return strdup("app1");   
+}
+
 void etk_server_shutdown()
 {
    _etk_server_main_loop = 0;   
@@ -547,8 +639,9 @@
    if(!object)
      return;
 
-   etk_object_data_set(object, "callback", id);
-   etk_object_data_set(object, "signal", sig);   
+   etk_object_data_set(object, "app_id", strdup(args[1]));
+   etk_object_data_set(object, "callback", strdup(id));
+   etk_object_data_set(object, "signal", strdup(sig));
    etk_signal_connect(sig, object, 
ETK_CALLBACK(_etk_server_internal_callback), NULL);
    
    if((sigs = evas_hash_find(_etk_server_valid_signals, sig)) != NULL)
===================================================================
RCS file: /cvs/e/e17/proto/etk_server/src/bin/etk_server.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- etk_server.h        28 Mar 2006 07:40:53 -0000      1.2
+++ etk_server.h        31 Mar 2006 10:34:16 -0000      1.3
@@ -16,6 +16,8 @@
 #include <Evas.h>
 #include <Ecore.h>
 #include <Ecore_File.h>
+#include <Ecore_Con.h>
+#include <Ecore_Job.h>
 #include <Ecore_Data.h>
 
 #define ETK_SERVER_LIBETK "libetk.so"




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to