From 6d444beb4392c2116533749fa869b6a1c4c6454a Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 28 Aug 2013 12:37:47 -0400 Subject: Flesh out service to actually do what it says on the tin --- service/CMakeLists.txt | 10 +++++++- service/service.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 3 deletions(-) (limited to 'service') diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt index ac70f23..7e336d5 100644 --- a/service/CMakeLists.txt +++ b/service/CMakeLists.txt @@ -30,11 +30,19 @@ ${GOBJECT2_LIBRARIES} # Service Executable ########################### +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) + add_executable(service-exec service.c) set_target_properties(service-exec PROPERTIES OUTPUT_NAME "unity-greeter-session-broadcast-service") -target_link_libraries(service-exec service-generated) +target_link_libraries(service-exec +service-generated +${GIO2_LIBRARIES} +) ########################### # Installation diff --git a/service/service.c b/service/service.c index 3c2f9e2..adf45b3 100644 --- a/service/service.c +++ b/service/service.c @@ -15,15 +15,81 @@ * */ +#include +#include +#include "service-iface.h" + +static gboolean +on_handle_request_application_start (ServiceIfaceComCanonicalUnityGreeterBroadcast *object, + GDBusMethodInvocation *invocation, + const gchar *arg_username, + const gchar *arg_appId) +{ + /* Simply pass the request on */ + service_iface_com_canonical_unity_greeter_broadcast_emit_start_application (object, + arg_username, + arg_appId); + service_iface_com_canonical_unity_greeter_broadcast_complete_request_application_start (object, + invocation); + return TRUE; +} + +static void +on_bus_acquired (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + GError *error = NULL; + ServiceIfaceComCanonicalUnityGreeterBroadcast *interface; + + interface = (ServiceIfaceComCanonicalUnityGreeterBroadcast *)user_data; + + if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (interface), + connection, + "/com/canonical/Unity/Greeter/Broadcast", + &error)) + { + g_error ("Unable to export interface: %s, exiting", error->message); + } +} + +static void +on_name_lost (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + g_error ("Lost bus name, exiting"); +} + int main (int argc, char * argv[]) { + guint owner_id; + GMainLoop *loop; + ServiceIfaceComCanonicalUnityGreeterBroadcast *interface; + interface = service_iface_com_canonical_unity_greeter_broadcast_skeleton_new (); + g_signal_connect (interface, + "handle-request-application-start", + G_CALLBACK (on_handle_request_application_start), + NULL); + owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM, + "com.canonical.Unity.Greeter.Broadcast", + G_BUS_NAME_OWNER_FLAGS_NONE, + on_bus_acquired, + NULL, + on_name_lost, + g_object_ref (interface), + g_object_unref); + loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (loop); + g_bus_unown_name (owner_id); + g_object_unref (interface); + g_object_unref (loop); - - return 0; + return 0; } -- cgit v1.2.3