static Eina_Bool
_ecore_con_local_win32_client_read_server_handler(void *data, Ecore_Win32_Handler *wh)
{
  Ecore_Con_Server *svr;
  void *buf;
  DWORD n;
  Eina_Bool broken_pipe = EINA_FALSE;

  svr = (Ecore_Con_Server *)data;

  if (!ResetEvent(svr->event_read))
    return ECORE_CALLBACK_RENEW;

  buf = malloc(svr->nbr_bytes);
  if (!buf)
    return ECORE_CALLBACK_RENEW;

  if (ReadFile(svr->pipe, buf, svr->nbr_bytes, &n, NULL))
    {
       if (!svr->delete_me)
         ecore_con_event_server_data(svr, buf, svr->nbr_bytes, EINA_FALSE);
       svr->want_write = 1;
    }
  else
    {
      if (GetLastError() == ERROR_BROKEN_PIPE)
        broken_pipe = EINA_TRUE;
    }

  if (broken_pipe)
    {
#if 0
       char *msg;

       msg = evil_last_error_get();
       if (msg)
         {
            ecore_con_event_server_error(svr, msg);
            free(msg);
         }
#endif
       if (!svr->delete_me)
         ecore_con_event_server_del(svr);
       svr->dead = EINA_TRUE;
       return ECORE_CALLBACK_CANCEL;
    }

  if (svr->want_write)
    ecore_con_local_win32_server_flush(svr);

   ecore_main_win32_handler_del(wh);

  return ECORE_CALLBACK_DONE;
}
Beispiel #2
0
static Eina_Bool
_ecore_con_local_win32_client_read_server_handler(void *data, Ecore_Win32_Handler *wh)
{
   Ecore_Con_Server *obj = data;
   Efl_Network_Server_Data *svr = efl_data_scope_get(obj, EFL_NETWORK_SERVER_CLASS);
   void *buf;
   DWORD n;
   Eina_Bool broken_pipe = EINA_FALSE;

   if (!ResetEvent(svr->event_read))
     return ECORE_CALLBACK_RENEW;

   buf = malloc(svr->nbr_bytes);
   if (!buf)
     return ECORE_CALLBACK_RENEW;

   if (ReadFile(svr->pipe, buf, svr->nbr_bytes, &n, NULL))
     {
        if (!svr->delete_me)
          ecore_con_event_server_data(obj, buf, svr->nbr_bytes, EINA_FALSE);
        svr->want_write = 1;
     }
   else
     {
        if (GetLastError() == ERROR_BROKEN_PIPE)
          broken_pipe = EINA_TRUE;
     }

   if (broken_pipe)
     {
#if 0
        ecore_con_event_server_error(svr, evil_last_error_get());
#endif
        _ecore_con_server_kill(obj);
        return ECORE_CALLBACK_CANCEL;
     }

   if (svr->want_write)
     ecore_con_local_win32_server_flush(obj);

   ecore_main_win32_handler_del(wh);

   return ECORE_CALLBACK_DONE;
}