| <?xml version='1.0' encoding='utf-8' ?> |
| <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ |
| <!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent"> |
| <!ENTITY doxygen SYSTEM "ServerAPI.xml"> |
| %BOOK_ENTITIES; |
| ]> |
| <appendix id="sect-Library-Server"> |
| <title>Server API</title> |
| <section><title>Introduction</title> |
| <para> |
| The open-source reference implementation of Wayland protocol is |
| split in two C libraries, <link |
| linkend="sect-Library-Client">libwayland-client</link> and |
| libwayland-server. Their main responsibility is to handle the |
| Inter-process communication (<emphasis>IPC</emphasis>) with each |
| other, therefore guaranteeing the protocol objects marshaling and |
| messages synchronization. |
| </para> |
| <para> |
| The server library is designed to work much like libwayland-client, |
| although it is considerably complicated due to the server needing |
| to support multiple versions of the protocol. It is best to learn |
| libwayland-client first. |
| </para> |
| <para> |
| Each open socket to a client is represented by a <link |
| linkend="Server-structwl__client">wl_client</link>. The equvalent |
| of the <link linkend="Client-classwl__proxy">wl_proxy</link> that |
| libwayland-client uses to represent an object is <link |
| linkend="Server-structwl__resource">wl_resource</link> for |
| client-created objects, and <link |
| linkend="Server-structwl__global">wl_global</link> for objects |
| created by the server. |
| </para> |
| <para> |
| Often a server is also a client for another Wayland server, and |
| thus must link with both libwayland-client and libwayland-server. |
| This produces some type name conflicts (such as the <link |
| linkend="Client-classwl__display">client wl_display</link> and |
| <link linkend="Server-structwl__display">server wl_display</link>, |
| but the duplicate-but-not-the-same types are opaque, and accessed |
| only inside the correct library where it came from. Naturally that |
| means that the program writer needs to always know if a pointer to |
| a wl_display is for the server or client side and use the |
| corresponding functions. |
| </para> |
| </section> |
| &doxygen; |
| </appendix> |