lumi-practica-xarxes-udg/nodelumi2/MIp2-agelumi.c

116 lines
3.9 KiB
C

/**************************************************************************/
/* */
/* P1 - MI amb sockets TCP/IP - Part I */
/* Fitxer p2p.c que implementa la interfície aplicació-usuari de */
/* l'aplicació de MI, sobre la capa d'aplicació de MI (fent crides a la */
/* interfície de la capa MI -fitxers mi.c i mi.h-). */
/* */
/* Autors: Marc Cané Salamià, Enric Rodríguez Galán */
/* */
/**************************************************************************/
/* Inclusió de llibreries, p.e. #include <stdio.h> o #include "meu.h" */
/* Incloem "MIp1v4-mi.h" per poder fer crides a la interfície de MI */
//#include "MIp2-mi.h"
#include "MIp2-lumi.h"
#include "stdio.h"
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
/* Definició de constants, p.e., #define MAX_LINIA 150 */
#define MAX_MISSATGE 300
#define IP_LENGTH 16
#define TECLAT 0
#define MARCA_FI "/end"
int main(int argc,char *argv[])
{
/* Declaració de variables, p.e., int n; */
int sesc, scon, slumi; //socket descriptor dels sockets
int port=0, port_loc, port_rem; //port: farà de port local o remot segons la situació. Les variables port_loc i port_rem son per claretat de codi.
char IPloc[IP_LENGTH], IPrem[IP_LENGTH], IPnode[IP_LENGTH]; //IPs local i remota i del node
char adrLUMIloc[MAX_LEN_DOMINI+MAX_USER_NICK+1], adrLUMIrem[MAX_LEN_DOMINI+MAX_USER_NICK+1];
char nickname_l[MAX_MISSATGE], nickname_r[MAX_MISSATGE]; //Nicknames local i remot
//char vols_continuar; //Eleccio de l'usuari
int fitxer_log;
int usuari_vol_conversa=1, connectat = 0, res; //Boolea per saber si l'usuari vol seguir parlant
/* Expressions, estructures de control, crides a funcions, etc. */
printf("Entra la teva @MI: ");
scanf("%s", adrLUMIloc);
//strcpy(adrLUMIloc,"Enric@localhost");
if ((slumi = LUMI_InicialitzarAgent("0.0.0.0",0, &fitxer_log, adrLUMIloc, IPnode)) < 0){
//Apagar tot
close(slumi);
//close(sesc);
return 1;
}
//printf("Landmark");
res = LUMI_EnviaPeticioRegistre(slumi, adrLUMIloc);
if (res == -5) printf("El node esta 7at");
else if(res < 0){
close(slumi);
printf("FAIL%i\n",res);
//close(sesc);
return 1;
} else printf("Registrat correctament\n");
if (strcmp(adrLUMIloc,"Enric@localhost") != 0){
int llista[] = {slumi};
HaArribatAlgunaCosaEnTemps(llista, 1, 0);
char resposta[MAX_MISSATGE_PLUMI];
LUMI_RepLiniaDe(slumi, NULL, NULL, resposta, sizeof(resposta));
LUMI_DescodificarMissatge(resposta[0], resposta, adrLUMIrem, NULL, NULL);
printf("%s ens vol localitzar\n", adrLUMIrem);
int res2 = LUMI_EnviaRespostaServeiLocalitzacio(slumi, adrLUMIrem, "10.0.0.13", 1337);
printf("Localitzacio: %i\n", res2);
}
else{
//scanf("%s", adrLUMIrem);
strcpy(adrLUMIrem,"Marc@localhost");
res = LUMI_EnviaPeticioLocalitzacio(slumi, adrLUMIloc, adrLUMIrem, IPrem, &port_rem, adrLUMIrem);
printf("Hola!\n");
if (res == -5) printf("El node esta 7at");
else if(res < 0){
close(slumi);
//close(sesc);
return 1;
}
else printf("Localitzat correctament\n");
}
res = LUMI_EnviaPeticioDesregistre(slumi);
if (res == -5) printf("El node esta 7at");
else if(res < 0){
close(slumi);
//close(sesc);
return 1;
}
else printf("Desregistrat correctament\n");
/*Localitzar();
Desregistrar();*/
return 0;
}