#include "e.h" /* local subsystem functions */ static int _e_ipc_cb_client_add(void *data, int type, void *event); static int _e_ipc_cb_client_del(void *data, int type, void *event); static int _e_ipc_cb_client_data(void *data, int type, void *event); /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; /* externally accessible functions */ int e_ipc_init(void) { char buf[1024]; char *disp; disp = getenv("DISPLAY"); if (!disp) disp = ":0"; snprintf(buf, sizeof(buf), "enlightenment-(%s)", disp); _e_ipc_server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, buf, 0, NULL); if (!_e_ipc_server) return 0; ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, _e_ipc_cb_client_add, NULL); ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, _e_ipc_cb_client_del, NULL); ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, _e_ipc_cb_client_data, NULL); e_ipc_codec_init(); return 1; } void e_ipc_shutdown(void) { e_ipc_codec_shutdown(); if (_e_ipc_server) { ecore_ipc_server_del(_e_ipc_server); _e_ipc_server = NULL; } } /* local subsystem globals */ static int _e_ipc_cb_client_add(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Add *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; printf("E-IPC: client %p connected to server!\n", e->client); return 1; } static int _e_ipc_cb_client_del(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Del *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; printf("E-IPC: client %p disconnected from server!\n", e->client); /* delete client sruct */ ecore_ipc_client_del(e->client); return 1; } static int _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Data *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; switch (e->minor) { #define TYPE E_WM_IN #include "e_ipc_handlers.h" #undef TYPE default: break; } printf("E-IPC: client sent: [%i] [%i] (%i) \"%p\"\n", e->major, e->minor, e->size, e->data); /* ecore_ipc_client_send(e->client, 1, 2, 7, 77, 0, "ABC", 4); */ /* we can disconnect a client like this: */ /* ecore_ipc_client_del(e->client); */ /* or we can end a server by: */ /* ecore_ipc_server_del(ecore_ipc_client_server_get(e->client)); */ return 1; }