#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>



// tratador para o sinal
void trata2 (int sinal);

void trata1(int sinal);


int main(int argc, char *argv[]){
	int delay, ident1, ident2;
	pid_t fpid;
	key_t key1, key2;
	struct msgbuf *any;

	if (argc==1) { 
		printf ("\nDuh! Passe o intervalo entre os ping-pongs...\n");
		exit(1);
	} else if (argc>2) {
		printf("\nDã! Entre com somente um valor!!!\n");
		exit(1);
	}

	key1 = 10;       	
	key2 = 20;
	ident1 = msgget(key1, IPC_CREAT);
	ident2 = msgget(key2, IPC_CREAT);
	
	delay = atoi (argv[1]);
	if (((delay % 1)!= 0) ||(delay<0) ) {
		printf ("\nPoh tchê, digite um número inteiro >= 0\n");
		exit(1);
	}

	fpid = fork ();
	
	if (!fpid) {		
		//código do filho				
		fpid = getpid();
		while(1){		
		    any->mtype = 1;
		    any->mtext[1] = 'a';
		    msgsnd(ident1, any, sizeof(*any), 0);
		    printf("\n%d : Ping", fpid);
		    sleep(delay);
		    msgrcv(ident2, any, 20, 0, 0);
		    
		    sleep(delay);
		}
		exit(0);
	} else if (fpid == -1) {
		printf("\nHoly Shit... falha ao criar filho.\n");
		exit(1);
	}
	fpid = getpid();
	while(1){
	    any->mtype = 1;
	    any->mtext[1] = 'a';
	    msgsnd(ident2, any, sizeof(*any), 0);
	    printf("\n%d : Pong", fpid);
	    msgrcv(ident1, any, 20, 0, 0);
	}
	exit(0);
}

