Grazie per aver risposto!
Per RPC intendo REMOTE PROCEDURE CALL (tipo Sun RPC);
Posto il main ("Client") e il file .x per generare il .h con rpcgen e per ultimo il file del server che contiene la definizione della procedura remota
codice:
#include <stdio.h>
#include <rpc/rpc.h>
#include"lista.h"
main(int argc, char *argv[])
{
CLIENT *cl;
int *result = NULL;
char ch;
NuovoCandidato nuovoCand;
Input in;
char * server;
if(argc< 2)
{
printf("\n Errore...to many parametres..");
exit(1);
}
server = argv[1];
cl = clnt_create(server, VOTAZIONIPULITE,VOTAZIONIPULITEVERS, "udp");
if(cl == NULL)
{
clnt_pcreateerror(server);
exit(1);
}
// dati input
do
{
printf("\nInserire l-operazione : A = aggiungi candidato \t B= ottieni totale voti \n\n");
ch = getchar();
fgetc(stdin); // elimino l'invio...
if( ch == 'A')
{
printf("Inserisci la lista candidato:");
scanf("%s", nuovoCand.lista);
fgetc(stdin); // elimino l'invio...
printf("\nNome candidato: ");
scanf("%s", nuovoCand.nome);
fgetc(stdin); // elimino l'invio...
printf("\ninvio dati %s e %s ", nuovoCand.nome, nuovoCand.lista);
result = inserimento_candidato_1(&nuovoCand, cl);
if(*result >= 0)
{
printf("\nOperazione completata con successo...candidato %s..aggiunto", nuovoCand.nome);
}
else
{
printf("\nErrore nella rpc...");
}
}
if( ch == 'B')
{
printf("Inserisci il nome della lista: ");
scanf("%s", in.lista);
fgetc(stdin); // elimino l'invio...
result = visualizzazzione_voti_lista_1(&in, cl);
if(result == NULL)
{
clnt_perror(cl, server);
exit(1);
}
if(*result >= 0)
{
printf("\nOperazione completata con successo..voti:%i..", *result);
}
else
{
printf("\nErrore nella rpc...");
}
}
}while(ch != EOF);
clnt_destroy(cl);
exit(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
file .x per rpcgen
[/CODE]
const DIM_NOME_LISTA= 15;
const DIM_COALIZIONE = 15;
const DIM_NOME = 15;
const N = 10;
struct Lista{ char lista[DIM_NOME_LISTA]; char coalizione[DIM_COALIZIONE];};
struct Liste{ Lista liste[N];};
struct Candidato{ char nome[DIM_NOME]; char nome_lista[DIM_NOME_LISTA]; int value;};
struct Candidati {Candidato candidato[N];};
struct NuovoCandidato{ char nome[DIM_NOME]; char lista[DIM_NOME_LISTA];};
struct Input{ char lista[DIM_NOME_LISTA];};
program VOTAZIONIPULITE {
version VOTAZIONIPULITEVERS
{
int VISUALIZZAZZIONE_VOTI_LISTA(Input) = 1;
} = 1;
} = 0x20000013;
[CODE]
file che implementa le procedure per il server remoto posto solo 1 procedura con la funzione inizializza()
codice:
#include <stdio.h>
#include <rpc/rpc.h>
#include<string.h>
#include"lista.h"
static int inizial = 0;
static Candidati candidati;
static Liste elencoliste;
void inizializza()
{
int i;
if(inizial == 1)
{
printf("\n\n\n inizializ vale %i", inizial);
return;
}
else
{
for(i = 0; i< N; i++)
{
printf("\n inizia la procedura di preparazione di candidati...");
candidati.candidato[i].nome[0] = '\0';
candidati.candidato[i].nome_lista[0] = '\0';
candidati.candidato[i].value = 0;
printf("inizializzato candidato %i", i);
}
for(i = 0; i< N; i++)
{
elencoliste.liste[i].lista[0] = '\0';
elencoliste.liste[i].coalizione[0] ='\0';
printf("\ninizializzato candidato %i", i);
}
printf("\nRiempimento struttura liste e check inizializzazzione.....");
strcpy(elencoliste.liste[0].lista,"nulla");
strcpy(elencoliste.liste[0].coalizione,"nulla");
strcpy(elencoliste.liste[1].lista,"cataldi");
strcpy(elencoliste.liste[1].coalizione,"cater bruno");
strcpy(elencoliste.liste[2].lista,"valer");
strcpy(elencoliste.liste[2].coalizione,"rita d-avorio");
strcpy(elencoliste.liste[3].lista,"aldi");
strcpy(elencoliste.liste[3].coalizione,"poiater rino");
strcpy(candidati.candidato[0].nome_lista ,"aldi");
strcpy(candidati.candidato[0].nome ,"gianluigi piero");
candidati.candidato[0].value = 3;
strcpy(candidati.candidato[3].nome_lista ,"aldi");
strcpy(candidati.candidato[3].nome ,"gianluigi piero");
candidati.candidato[3].value = 3;
for(i = 0; i< N; i++)
{
printf("elencoListe %i esimo: %s e %s", i, elencoliste.liste[i].lista, elencoliste.liste[i].coalizione);
}
inizial= 1;
printf("\nValore di inizial posto ad %i", inizial);
return;
}
}
int * visualizzazzione_voti_lista_1_svc(Input *name, struct svc_req * rqstp)
{
int i;
int valore = 0;
static int result = -1;
printf("\nSono qui....nome lista richiesta:%s", name->lista);
inizializza();
printf("\nDopo inizializza......nome lista richiesta:%s", name->lista);
for(i = 0; i<N; i++)
{
if(strcmp(name->lista, elencoliste.liste[i].lista)== 0)
{
valore = 0;
break;
}
valore = -1;
}
if(valore < 0 ) // non esiste la lista
return (&result);
for( i = 0; i<N; i++)
{
if(strcmp(name->lista, candidati.candidato[i].nome_lista)== 0)
{
result += candidati.candidato[i].value;
}
}
return (&result);
}