Thank you so much Kouhei, It works. Just a little typo (@ ref object, in g_object_get(Object,...) should be refObject) if someone wants to use it.
Regards, Tanveer Ahmad ________________________________ From: Kouhei Sutou <[email protected]> Sent: Tuesday, January 8, 2019 3:33:25 AM To: [email protected] Subject: Re: c_glib API for plasma Hi, In <[email protected]> "c_glib API for plasma" on Mon, 7 Jan 2019 14:24:41 +0000, Tanveer Ahmad - EWI <[email protected]> wrote: > I'm using arrow c_glib API for plasma. > > How can I pass my data and metadata to created plasma client object and > similarly how can receive back data and metadata from referred plasma object? > Thanks. You need to set your data between gplasma_client_create() and gplasma_created_object_seal(). You can get buffer for data by g_object_get(object, "data", &data, NULL). g_object_get() is a function to get properties from an object: https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-get You can set metadata with gplasma_client_create(). You can get data and metadata from referred object by g_object_get(). Property names of them are "data" and "metadata": g_object_get(referred_object, "data", &data, "metadata", &metadata, NULL); You can get raw data and metadata as GBytes. g_bytes_get_data() will help you: https://developer.gnome.org/glib/stable/glib-Byte-Arrays.html#g-bytes-get-data The following code will work: GPlasmaClient *gPlasmaClient; GPlasmaObjectID *object_id; GPlasmaClientCreateOptions *create_options; GPlasmaCreatedObject *Object; GPlasmaReferredObject *refObject; gPlasmaClient = gplasma_client_new("/tmp/store0", &error); object_id = gplasma_object_id_new(id_arr, 20, &error); create_options = gplasma_client_create_options_new(); { /* It should be guint8 instead of gchar. We use gchar here just for convenient. */ const gchar metadata[] = "your metadata"; gplasma_client_create_options_set_metadata(create_options, (const guint8 *)metadata, sizeof(metadata)); } Object = gplasma_client_create(gPlasmaClient, object_id, 16, create_options, &error); g_object_unref(object_id); g_object_unref(create_options); { GArrowBuffer *data; g_object_get(Object, "data", &data, NULL); garrow_mutable_buffer_set_data(GARROW_MUTABLE_BUFFER(data), 0, "your data", 9, /* sizeof("your data"). */ &error); g_object_unref(data); } gplasma_created_object_seal(Object, &error); g_object_unref(Object); gplasma_client_disconnect(gPlasmaClient, &error); g_object_unref(gPlasmaClient); /////////////////////////////// gPlasmaClient = gplasma_client_new("/tmp/store0", &error); refObject = gplasma_client_refer_object(gPlasmaClient, object_id, -1, &error); { GArrowBuffer *data; GArrowBuffer *metadata; g_object_get(Object, "data", &data, "metadata", &metadata, NULL); { GBytes *data_bytes; data_bytes = garrow_buffer_get_data(data); g_print("data: <%.*s>\n", (int)g_bytes_get_size(data_bytes), g_bytes_get_data(data_bytes, NULL)); g_bytes_unref(data_bytes); } g_object_unref(data); { GBytes *metadata_bytes; metadata_bytes = garrow_buffer_get_data(metadata); g_print("metadata: <%.*s>\n", (int)g_bytes_get_size(metadata_bytes), g_bytes_get_data(metadata_bytes, NULL)); g_bytes_unref(metadata_bytes); } g_object_unref(metadata); } g_object_unref(refObject); gplasma_client_disconnect(gPlasmaClient, &error); g_object_unref(gPlasmaClient); Thanks, -- kou
