pubsubd: print all structures
This commit is contained in:
parent
80c5201b04
commit
f26406f32f
@ -8,12 +8,17 @@
|
||||
void pubsubd_channels_init (struct channels *chans) { LIST_INIT(chans); }
|
||||
|
||||
struct channel *
|
||||
pubsubd_channels_add (struct channels *chans, struct channel *c)
|
||||
pubsubd_channels_add (struct channels *chans, const char *chan)
|
||||
{
|
||||
if(!chans || !c)
|
||||
if(chans == NULL || chan == NULL) {
|
||||
printf ("pubsubd_channels_add: chans == NULL or chan == NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct channel *n = malloc (sizeof (struct channel));;
|
||||
memset (n, 0, sizeof (struct channel));
|
||||
pubsubd_channel_new (n, chan);
|
||||
|
||||
struct channel *n = pubsubd_channel_copy (c);
|
||||
LIST_INSERT_HEAD(chans, n, entries);
|
||||
|
||||
return n;
|
||||
@ -64,6 +69,9 @@ struct channel * pubsubd_channel_copy (struct channel *c)
|
||||
memcpy (copy->chan, c->chan, c->chanlen);
|
||||
copy->chanlen = c->chanlen;
|
||||
}
|
||||
else {
|
||||
printf ("pubsubd_channel_copy: c->chan == NULL\n");
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
@ -102,6 +110,17 @@ void pubsubd_channel_free (struct channel * c)
|
||||
}
|
||||
}
|
||||
|
||||
struct channel * pubsubd_channel_search (struct channels *chans, char *chan)
|
||||
{
|
||||
struct channel * np = NULL;
|
||||
LIST_FOREACH(np, chans, entries) {
|
||||
if (np->chanlen == strlen (chan) + 1
|
||||
&& strncmp (np->chan, chan, np->chanlen))
|
||||
return np;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct channel * pubsubd_channel_get (struct channels *chans, struct channel *c)
|
||||
{
|
||||
struct channel * np = NULL;
|
||||
@ -136,8 +155,11 @@ void pubsubd_channels_print (const struct channels *chans)
|
||||
{
|
||||
printf ("\033[36mmchannels\033[00m\n");
|
||||
|
||||
if (chans == NULL)
|
||||
if (chans == NULL) {
|
||||
// TODO debug
|
||||
printf ("pubsubd_channels_print: chans == NULL\n");
|
||||
return ;
|
||||
}
|
||||
|
||||
struct channel *chan = NULL;
|
||||
LIST_FOREACH(chan, chans, entries) {
|
||||
@ -147,19 +169,19 @@ void pubsubd_channels_print (const struct channels *chans)
|
||||
|
||||
void pubsubd_channel_print (const struct channel *c)
|
||||
{
|
||||
if (c == NULL || c->chan == NULL)
|
||||
if (c == NULL || c->chan == NULL) {
|
||||
printf ("pubsubd_channel_print: c == NULL or c->chan == NULL\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf ( "\033[32mchan %s\033[00m\n", c->chan);
|
||||
|
||||
if (c->alh == NULL)
|
||||
if (c->alh == NULL) {
|
||||
printf ("pubsubd_channel_print: c->alh == NULL\n");
|
||||
return;
|
||||
|
||||
struct app_list_elm *ale = NULL;
|
||||
LIST_FOREACH(ale, c->alh, entries) {
|
||||
printf ("\t");
|
||||
srv_process_print (ale->p);
|
||||
}
|
||||
|
||||
pubsubd_subscriber_print (c->alh);
|
||||
}
|
||||
|
||||
struct app_list_elm * pubsubd_app_list_elm_copy (const struct app_list_elm *ale)
|
||||
@ -189,8 +211,10 @@ pubsubd_subscriber_eq (const struct app_list_elm *ale1, const struct app_list_el
|
||||
void
|
||||
pubsubd_subscriber_add (struct app_list_head *alh, const struct app_list_elm *ale)
|
||||
{
|
||||
if(!alh || !ale)
|
||||
if(alh == NULL || ale == NULL) {
|
||||
fprintf (stderr, "err alh or ale is NULL\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct app_list_elm *n = pubsubd_app_list_elm_copy (ale);
|
||||
LIST_INSERT_HEAD(alh, n, entries);
|
||||
@ -208,6 +232,15 @@ pubsubd_subscriber_get (const struct app_list_head *alh, const struct app_list_e
|
||||
return res;
|
||||
}
|
||||
|
||||
void pubsubd_subscriber_print (struct app_list_head *alh)
|
||||
{
|
||||
struct app_list_elm *np = NULL;
|
||||
LIST_FOREACH(np, alh, entries) {
|
||||
printf ("\t");
|
||||
srv_process_print (np->p);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
pubsubd_subscriber_del (struct app_list_head *alh, struct app_list_elm *p)
|
||||
{
|
||||
@ -239,7 +272,6 @@ void pubsubd_subscriber_del_all (struct app_list_head *alh)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void pubsubd_app_list_elm_create (struct app_list_elm *ale, struct process *p)
|
||||
{
|
||||
if (ale == NULL)
|
||||
@ -421,15 +453,12 @@ int pubsubd_get_new_process (const char *spath, struct app_list_elm *ale
|
||||
else { // everything else is about killing the service
|
||||
ale->action = PUBSUB_QUIT;
|
||||
}
|
||||
|
||||
printf ("ACTION : %s\n", token);
|
||||
break;
|
||||
}
|
||||
case 5 : {
|
||||
// for the last element of the line
|
||||
// drop the following \n
|
||||
if (ale->action != PUBSUB_QUIT) {
|
||||
printf ("REQUESTED CHAN : %s", token);
|
||||
memcpy (chan, token, (strlen (token) < BUFSIZ) ?
|
||||
strlen (token) -1 : BUFSIZ);
|
||||
}
|
||||
@ -456,29 +485,23 @@ int pubsubd_get_new_process (const char *spath, struct app_list_elm *ale
|
||||
memset (ale->p, 0, sizeof (struct process));
|
||||
srv_process_gen (ale->p, pid, index, version);
|
||||
|
||||
if (*c == NULL) {
|
||||
*c = malloc (sizeof (struct channel));
|
||||
memset (*c, 0, sizeof (struct channel));
|
||||
}
|
||||
|
||||
chan[BUFSIZ -1] = '\0';
|
||||
printf ("AVANT\n");
|
||||
pubsubd_channel_new (*c, chan);
|
||||
printf ("APRES\n");
|
||||
|
||||
// not found = new
|
||||
struct channel *new_chan = NULL;
|
||||
new_chan = pubsubd_channel_get (chans, *c);
|
||||
new_chan = pubsubd_channel_search (chans, chan);
|
||||
if (new_chan == NULL) {
|
||||
new_chan = pubsubd_channels_add (chans, *c);
|
||||
new_chan = pubsubd_channels_add (chans, chan);
|
||||
pubsubd_subscriber_init (&new_chan->alh);
|
||||
}
|
||||
|
||||
pubsubd_channel_free (*c);
|
||||
*c = new_chan;
|
||||
|
||||
// add the subscriber
|
||||
if (ale->action == PUBSUB_SUB || ale->action == PUBSUB_BOTH)
|
||||
pubsubd_subscriber_add (new_chan->alh, ale);
|
||||
if (ale->action == PUBSUB_SUB || ale->action == PUBSUB_BOTH) {
|
||||
printf ("new process in chan %s\n", chan);
|
||||
pubsubd_subscriber_add ((*c)->alh, ale);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -70,9 +70,10 @@ void pubsubd_channel_print (const struct channel *c);
|
||||
// list of channels
|
||||
void pubsubd_channels_init (struct channels *chans);
|
||||
void pubsubd_channels_print (const struct channels *chans);
|
||||
struct channel * pubsubd_channels_add (struct channels *chans, struct channel *c);
|
||||
struct channel * pubsubd_channels_add (struct channels *chans, const char *chan);
|
||||
void pubsubd_channels_del (struct channels *chans, struct channel *c);
|
||||
void pubsubd_channels_del_all (struct channels *chans);
|
||||
struct channel * pubsubd_channel_search (struct channels *chans, char *chan);
|
||||
|
||||
// remove an app_list_elm from the list (msg type DISCONNECT received)
|
||||
int pubsubd_channels_del_subscriber (struct channels *chans
|
||||
@ -100,6 +101,7 @@ int
|
||||
pubsubd_subscriber_eq (const struct app_list_elm *, const struct app_list_elm *);
|
||||
|
||||
void pubsubd_subscriber_init (struct app_list_head **chans);
|
||||
void pubsubd_subscriber_print (struct app_list_head *alh);
|
||||
void pubsubd_subscriber_add (struct app_list_head *
|
||||
, const struct app_list_elm *);
|
||||
struct app_list_elm * pubsubd_subscriber_get (const struct app_list_head *
|
||||
|
@ -30,26 +30,17 @@ main(int argc, char **argv, char **env)
|
||||
// struct app_list_elm ale1;
|
||||
// memset (&ale1, 0, sizeof (struct app_list_elm));
|
||||
|
||||
// warning : this is a local structure, not exactly the same in the prog.
|
||||
struct channel chan;
|
||||
memset (&chan, 0, sizeof (struct channel));
|
||||
pubsubd_channel_new (&chan, "coucou");
|
||||
|
||||
// to emulate
|
||||
// pubsubd_get_new_process (&srv, &ale1, &chans, &chan);
|
||||
|
||||
// FIRST CHAN TO BE ADDED
|
||||
// search for the chan in channels, add it if not found
|
||||
struct channel *new_chan = NULL;
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
new_chan = pubsubd_channel_search (&chans, "coucou");
|
||||
if (new_chan == NULL) {
|
||||
new_chan = pubsubd_channels_add (&chans, &chan);
|
||||
new_chan = pubsubd_channels_add (&chans, "coucou");
|
||||
pubsubd_subscriber_init (&new_chan->alh);
|
||||
}
|
||||
else {
|
||||
ohshit (2, "error : new chan, can't be found in channels yet");
|
||||
}
|
||||
pubsubd_channel_free (&chan);
|
||||
|
||||
printf ("print the channels, 1 chan\n");
|
||||
printf ("--\n");
|
||||
@ -57,9 +48,8 @@ main(int argc, char **argv, char **env)
|
||||
printf ("--\n");
|
||||
|
||||
// SAME CHAN, SHOULD NOT BE ADDED
|
||||
pubsubd_channel_new (&chan, "coucou");
|
||||
// search for the chan in channels, add it if not found
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
new_chan = pubsubd_channel_search (&chans, "coucou");
|
||||
if (new_chan == NULL) {
|
||||
ohshit (3, "error : same chan, shouldn't be added in channels");
|
||||
}
|
||||
@ -73,17 +63,15 @@ main(int argc, char **argv, char **env)
|
||||
printf ("--\n");
|
||||
|
||||
// NEW CHAN, SHOULD BE ADDED
|
||||
pubsubd_channel_new (&chan, "salut");
|
||||
// search for the chan in channels, add it if not found
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
new_chan = pubsubd_channel_search (&chans, "salut");
|
||||
if (new_chan == NULL) {
|
||||
new_chan = pubsubd_channels_add (&chans, &chan);
|
||||
new_chan = pubsubd_channels_add (&chans, "salut");
|
||||
pubsubd_subscriber_init (&new_chan->alh);
|
||||
}
|
||||
else {
|
||||
ohshit (4, "error : new chan, should be added in channels");
|
||||
}
|
||||
pubsubd_channel_free (&chan);
|
||||
|
||||
printf ("print the channels, 2 chans\n");
|
||||
printf ("--\n");
|
||||
|
@ -37,7 +37,7 @@ main(int argc, char **argv)
|
||||
|
||||
pubsubd_get_new_process (spath, &ale, &chans, &c);
|
||||
|
||||
printf ("print the channels, %d chan\n", i);
|
||||
printf ("print the channels\n");
|
||||
printf ("--\n");
|
||||
pubsubd_channels_print (&chans);
|
||||
printf ("--\n");
|
||||
|
@ -2,6 +2,6 @@
|
||||
|
||||
for i in $(seq 1 10)
|
||||
do
|
||||
echo "${i} 1 1 pub chan1" > /tmp/ipc/gen
|
||||
echo "${i} 1 1 sub chan1" > /tmp/ipc/gen
|
||||
sleep 0.1
|
||||
done
|
||||
|
Reference in New Issue
Block a user