El protocolo de comunicaciones

KDE utiliza un protocolo de comunicaciones, DCOP (Desktop COmmunication Protocol), que ya tiene 2 años de antigüedad y permite a unas aplicaciones comunicarse con otras de forma rápida y sencilla.

Por una parte, se puede usar DCOP para comunicarse con una aplicación conocida y acceder a funcionalidad conocida por el programador, como por ejemplo, para hacer que Konqueror abra una página web. Por otra parte, se puede usar DCOP para inspeccionar la funcionalidad que ofrece una aplicación y conocer los objetos que ha creado e incluso interaccionar con ellos !

DCOP es un protocolo inventado por Matthias Ettrich (fundador de KDE) y Preston Brown (Director del RedHat Labs) como sustituto de CORBA, que se usaba anteriormente pero que daba muchos problemas, mayoritariamente que era demasiado complejo y pesado para que la mayoría de los programadores lo usaran.

Actualmente se pueden hacer llamadas DCOP usando C++, Python, C, e incluso desde el propio shell. Por ejemplo, para hacer que Konqueror abra una ventana con una página web, basta ejecutar:


	dcop konqueror default openBrowserWindow http://www.kde.org
	

La misma llamada desde C++ se haría usando :


	DCOPClient *dcop=kapp->dcopClient();
	QByteArray params;
	QDataStream stream(params, IO_WriteOnly);
	stream << QString::fromLatin1("http://www.kde.org");
	dcop->send( "konqueror", "default", "openBrowserWindow(QString)", params);
	

Y desde Python, el código relevante es :


	server = Server("http://localhost:" + port +"/konqueror")
	server.default.openBrowserWindow(auth, "http://www.kde.org")
	

Además, hay otros métodos de usar DCOP que permiten hacer llamadas a funciones que devuelven un resultado de forma que no sólo se pueda pedir a otros procesos que realicen alguna acción, sino que también se puede obtener el resultado de la acción cometida por la otra aplicación.

Pero DCOP no sólo se puede usar para hacer llamadas y recibir un valor de resultado, también puede usarse para extender los mecanismos de señales-slots que implementa Qt al entorno de escritorio completo.

El mecanismo de señal-slot de Qt es muy sencillo y se basa en que cuando un objeto cambia su estado, emite una señal para dar a conocer "a quién le interese" que ha sucedido algo. Por otra parte, los objetos tienen slots que son funciones miembro a las que se conectan las señales de otros objetos. Así, cuando un objeto emite una señal, los slots de otros objetos que están conectados a esa señal son llamados automaticamente . Observemos que la relación señal-slot puede ser uno a uno, uno a muchos, muchos a uno, uno a ninguno , etc. Es decir, puede que tengamos una misma señal conectada a varios slots, muchas señales conectadas a un mismo slot, o puede que no haya ningún slot conectado a una señal o ninguna señal conectada a un slot.

DCOP extiende este mecanismo a todo el escritorio en el sentido en que implementa las "señales DCOP" que son emitidas cuando una aplicación quiere dar a conocer que ha ocurrido algo. Por medio de DCOP, se pueden conectar estas señales (emitidas por otras aplicaciones) a slots usuales, de forma totalmente transparente para el slot receptor de la señal ( a quién no le importa si ha sido llamado a través de una señal de Qt, de DCOP, o simplemente ha sido llamado como una función normal).