Main Page   Modules   Compound List   File List   Related Pages   Examples  

basic2.c

This is another example of how to use PDS.

#include "agent/pds.h"
#include "common/formats.h"


#include <string.h>
#include <stdlib.h>
#include <stdio.h>


pds_service directory;
pds_domain_id_t domain_id;
pds_context_id_t root_context_id;
CManager cm;

void generate_channel_events();
void create_channel_objects();
void my_connect(char * host, char * port);
void create_entity_int4();
void create_entity_int8();
void create_entity_string();
void create_entity_opaque();
void create_context();
void browse_entity();
void browse_context();
void browse_all();
void remove_entity();
void remove_context();
void remove_root_context();
void create_entity_string_2();
void register_domain();
void register_entity();
void register_context();

int main(int argc, char* argv[])
{
    if (argc < 2) {
        printf("Usage: %s <pds host> <pds port>\n", argv[0]);
        return -1;
    }
    cm = CManager_create();
    my_connect(argv[1], argv[2]);
    create_context();
/*
    create_entity_int4();
    create_entity_int8();
*/
    create_entity_string();
    create_entity_string_2();
    create_entity_opaque();
/*    browse_context();*/
/*    browse_entity();*/
/*    browse_all();*/
/*    remove_entity();*/
/*    remove_context();*/
/*    remove_root_context();*/
    create_channel_objects();
    register_domain();
/*    register_context(); */
/*    register_entity();*/

    generate_channel_events();
        
    while (1)
    {
      CMpoll_network (cm);
    }
    return pds_service_close (directory);
}
/***********************************************/
void my_connect(char * host, char * port)
{
    attr_list contact_attrs;

    contact_attrs = create_attr_list();
    set_attr (contact_attrs, PDS_IP_HOST, Attr_String, strdup (host) );
    set_attr (contact_attrs, PDS_IP_PORT, Attr_Int4, (attr_value*)atol(port));

    dump_attr_list(contact_attrs);

    directory = pds_service_open (contact_attrs);
    printf("opened directory service\n");



    domain_id = pds_open_domain (directory,
                                 "ECHO",
                                 "test",
                                 1,
                                 "GroupServer");
    printf("opened domain\n");

    root_context_id = pds_get_root_context (domain_id);
    printf("Got root context.\n");

}
/*********************************************/
void create_entity_opaque()
{

    pds_entity_data_t e_data;

    attr_list attrs;
    char * buffer;
    long size;
    FILE *file =fopen("basic2", "rb");

    attrs = create_attr_list();
    
    (void) pds_create_entity (domain_id,
                  "/opaque_entity",
                  null_pds_context_id,
                  0,
                  attrs);
                  
    /* set the opaque value to a REALLY long string*/

    if (file) {
        fseek(file, 0L, SEEK_END);
        size = ftell(file);
        rewind(file);
    }
    else {
        printf("Could not open file\n");
        return;
    }

    buffer = (char*)malloc(size);
    read(file, buffer, size);
    fclose(file);
 
    e_data.data = (unsigned char*)buffer;
    e_data.data_size = size;
    e_data.data_type = Attr_Opaque;
    
    
    pds_set_entity_data(domain_id, "/opaque_entity", null_pds_context_id, &e_data, 0);
    printf("created opaque entity, size %lu\n", size);
}

/*********************************************/
void create_entity_int8()
{

    pds_entity_data_t e_data;

    attr_list attrs;



    e_data.data = (unsigned char *)(attr_value*)5678;
    e_data.data_size = 0;    
    e_data.data_type = Attr_Int8;
    
    attrs = create_attr_list();
    
    (void) pds_create_entity (domain_id,
                  "/int8_entity",
                  null_pds_context_id,
                  0,
                  attrs);

    pds_set_entity_data(domain_id, "/int8_entity", null_pds_context_id, &e_data, 0);
    printf("created int8 entity\n");
}
/*********************************************/
void create_entity_int4()
{

    pds_entity_data_t e_data;

    attr_list attrs;



    e_data.data = (unsigned char *)(attr_value*)1234;
    e_data.data_size = 0;    
    e_data.data_type = Attr_Int4;
    
    attrs = create_attr_list();
    
    (void) pds_create_entity (domain_id,
                  "/int4_entity",
                  null_pds_context_id,
                  0,
                  attrs);
    pds_set_entity_data(domain_id, "/int4_entity", null_pds_context_id, &e_data, 0);
    printf("created int4 entity\n");
}
/*********************************************/
void create_entity_string()
{

    pds_entity_data_t e_data;

    attr_list attrs;
    char* str = "A test string";


    e_data.data = (unsigned char*)str;
    e_data.data_size = strlen(str);    
    e_data.data_type = Attr_String;
    
    attrs = create_attr_list();
    
    (void) pds_create_entity (domain_id,
                  "/string_entity_1",
                  null_pds_context_id,
                  0,
                  attrs);
    pds_set_entity_data(domain_id, "/string_entity_1", null_pds_context_id, &e_data, 0);
    printf("created string entity\n");

}
/*********************************************/
void create_entity_string_2()
{

    pds_entity_data_t e_data;

    attr_list attrs;
    char* str = "A test string";


    e_data.data = (unsigned char*)str;
    e_data.data_size = strlen(str);
    e_data.data_type = Attr_String;

    attrs = create_attr_list();

    (void) pds_create_entity (domain_id,
                  "/string_entity_2",
                  null_pds_context_id,
                  &e_data,
                  attrs);
}

/*********************************************/
void create_context()
{
#if 0
    (void) pds_create_context (domain_id, 
                                           "child_context",
                                            root_context_id);

    (void) pds_create_context (domain_id, 
                                           "child_context2",
                                            root_context_id);
#endif
    (void) pds_create_context (domain_id, 
                                           "mansour/mohamed",
                                            root_context_id);
    (void) pds_create_context (domain_id, 
                                           "/gatech/coc",
                                            null_pds_context_id);
    printf("created child context\n");
}
/*********************************************/
void dump_bindings(char** bindings)
{
  int i;
  for (i=0; bindings[i] !=0; i++) { 
    printf("\t%s\n", bindings[i]);
    free(bindings[i]);
  }

  free(bindings);
}
/*********************************************/
void browse_context_path(char*path)
{
  char** bindings;
  int i;

  printf("browsing context %s\n", path);
  bindings = pds_get_binding_list(domain_id, path, OnlyContextBindings);

  for (i=0; bindings[i] !=0; i++) { 
    char buffer[1000];
    strcpy(buffer, path);
    strcat(buffer, "/");
    strcat(buffer, bindings[i]);
    browse_context_path(buffer);
    free(bindings[i]);
  }
  free (bindings);
}
/*********************************************/
void browse_context()
{
  char** bindings;
  int i;

  printf("browsing contexts\n");
  bindings = pds_get_binding_list(domain_id, "/", OnlyContextBindings);

  for (i=0; bindings[i] !=0; i++) { 
    char buffer[1000];
    strcpy(buffer, "/");
    strcat(buffer, bindings[i]);
    browse_context_path(buffer);
    free(bindings[i]);
  }

  free(bindings);
}
/*********************************************/
void browse_entity()
{
  char** bindings;

 printf("browsing entities\n");
  bindings = pds_get_binding_list_id(domain_id, root_context_id, OnlyEntityBindings);

   dump_bindings(bindings);
}
/*********************************************/
void browse_all()
{
  char** bindings;

  printf("browsing contexts and entities\n");
  bindings = pds_get_binding_list_id(domain_id, root_context_id, 0);

   dump_bindings(bindings);

}
/*********************************************/
void remove_entity()
{
    attr_list attrs;
    pds_entity_id_t e_id;

    printf("removing entity\n");
    pds_remove_entity(domain_id, "/opaque_entity", null_pds_context_id);
    pds_remove_entity(domain_id, "string_entity_1", root_context_id);
   
    attrs = create_attr_list();
    e_id = pds_create_entity(domain_id, "/test_entity", null_pds_context_id, 0, attrs);
    pds_remove_entity_by_id(domain_id, e_id);
}
/*********************************************/
void remove_context()
{
    pds_context_id_t c_id;
    printf("removing context\n");
    pds_remove_context(domain_id, "/mansour", null_pds_context_id);
    c_id = pds_create_context(domain_id, "/l1/l2/l3", null_pds_context_id);
    pds_remove_context_by_id(domain_id, c_id);
}
/*********************************************/
void remove_root_context()
{
    printf("remove root context\n");
    pds_remove_context(domain_id, "/", null_pds_context_id);
    pds_create_context(domain_id, "/", null_pds_context_id);
}
/*********************************************/
void
domain_event_handler (void* event, void* client_data, attr_list event_list)
{
  pds_domain_change_event* evt = 0;


  evt = (pds_domain_change_event*) event;
  printf("--------------------------\n");
  printf("domain event handler called\n");  
  printf("%d\n", evt->type);
  printf("[%d][%s][%s]\n", evt->event_type, 
         evt->event_desc ? evt->event_desc:"", 
         evt->event_fullname ? evt->event_fullname : "" );
}
/*********************************************/
void
entity_event_handler (void* event, void* client_data, attr_list event_list)
{
  pds_entity_change_event* evt = 0;


  evt = (pds_entity_change_event*) event;
  printf("--------------------------\n");
  printf("entity event handler called\n");  
  printf("%d\n", evt->type);
  printf("[%s][%s]\n", evt->desc, evt->fullname);
}
/*********************************************/
void
context_event_handler (void* event, void* client_data, attr_list event_list)
{
  pds_context_change_event* evt = 0;


  evt = (pds_context_change_event*) event;
  printf("--------------------------\n");  
  printf("context event handler called\n");  
  printf("%d\n", evt->type);
  printf("[%s][%s]\n", evt->desc, evt->fullname);
}
/*********************************************/
void register_domain()
{
 
    printf("registering for domain changes\n");

    pds_register_for_domain_changes(cm, domain_id, domain_event_handler, 0);
}
/*********************************************/
void register_entity()
{

    printf("registering for entity changes\n");

    pds_register_for_entity_changes(cm, domain_id, "/test_events/register_entity_1", null_pds_context_id, entity_event_handler, 0);

/****** cases that migh cause the server to crash*/
/*    pds_register_for_entity_changes(cm, domain_id, "/test_change/register_entity_2", null_pds_context_id, event_handler, 0);*/
/*    pds_register_for_entity_changes(cm, domain_id, "/test_change/level2/register_entity_2", null_pds_context_id, event_handler, 0);*/
}
/*********************************************/
void register_context()
{
    printf("registering for context changes\n");
    pds_register_for_context_changes(cm, domain_id, "/", null_pds_context_id, context_event_handler, 0);
    pds_register_for_context_changes(cm, domain_id, "/test_events", null_pds_context_id, context_event_handler, 0);
    pds_register_for_context_changes(cm, domain_id, "/test_events/newContext", null_pds_context_id, context_event_handler, 0);
    pds_register_for_context_changes(cm, domain_id, "/test_events/test_new_context", null_pds_context_id, context_event_handler, 0);
/****** cases that migh cause the server to crash*/
/*    pds_register_for_context_changes(cm, domain_id, "/", null_pds_context_id, event_handler, 0);*/
/*    pds_register_for_context_changes(cm, domain_id, "/gatech1", null_pds_context_id, event_handler, 0);*/
/*    pds_register_for_context_changes(cm, domain_id, "/gatech2/coc1", null_pds_context_id, event_handler, 0);*/
}
/*********************************************/
void create_channel_objects() 
{
    attr_list  attrs = create_attr_list();

    pds_create_context (domain_id,
                        "/test_events",
                         null_pds_context_id);
    pds_create_entity (domain_id,
                  "/test_events/register_entity_1",
                  null_pds_context_id,
                  0,
                  attrs);
}
/*********************************************/
void generate_channel_events()
{
    attr_list  attrs = create_attr_list();

    printf("generating channel events\n");

    /* create a new context from root */
    pds_create_context (domain_id, "/test_new_context", null_pds_context_id);
    pds_create_entity (domain_id, "/test_new_entity", null_pds_context_id, 0, attrs);
    pds_remove_entity (domain_id, "/test_new_entity", null_pds_context_id);
    pds_remove_context(domain_id, "/test_new_context", null_pds_context_id);    

    pds_create_context(domain_id, "/test_events/newContext", null_pds_context_id);
    pds_create_entity (domain_id, "/test_events/newContext/test_new_entity", null_pds_context_id, 0, attrs);
    pds_remove_entity (domain_id, "/test_events/newContext/test_new_entity", null_pds_context_id);
    pds_remove_context(domain_id, "/test_events/newContext", null_pds_context_id);    
    pds_remove_context(domain_id, "/test_events", null_pds_context_id);    
}


Generated on Mon Oct 20 14:46:45 2003 for Proactive Directory Service by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002