enlightenment/src/bin/e_ipc.c

91 lines
2.5 KiB
C

#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;
}