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

Reply via email to