]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/practica3/parte2/set_client.cpp
Cosas de Distribuidos I.
[z.facultad/75.74/practicos.git] / practicas / practica3 / parte2 / set_client.cpp
1 /*
2  * This is sample code generated by rpcgen.
3  * These are only templates and you can use them
4  * as a guideline for developing your own functions.
5  */
6
7 #include "set.h"
8 #include "common.h"
9 #include <string>
10 #include <sstream>
11 #include <iostream>
12
13 enum { OK, NOT_FOUND, EXISTS };
14
15 int
16 main(int argc, char *argv[])
17 {
18     int client_id;
19     char *server_name;
20     char *localhost = "localhost";
21     pid_t pid;
22     CLIENT* cl;
23     const char *pname = argv[0];
24
25     // mostrar el pid del cliente
26     pid = getpid();
27     print_msg(stdout, "%s Cliente con pid = %d\n", pname, pid);
28
29     if (argc > 1)
30         server_name = argv[1];
31     else
32         server_name = localhost;
33
34     // id del cliente, por default calculado en base al pid
35     if (argc > 2)
36         client_id = atoi(argv[2]);
37     else
38         client_id = pid % 32;
39
40
41     /* Crear el "handle" del cliente para llamar MESSAGEPROG en el 
42      * server. Usamos  "udp" para la  comunicacion. */
43     cl = clnt_create(server_name, SETPRG, SETVERS, "udp");
44     if (cl == NULL)
45     {
46         /* No se pudo hacer contacto error y adios. */
47         clnt_pcreateerror(server_name);
48         exit(1);
49     }
50
51     std::string line;
52     int* (*rem_proc)(char*, int, int, CLIENT*);
53     while (std::getline(std::cin, line))
54     {
55         std::istringstream iss(line);
56         std::string token;
57         if (!(iss >> token)) return 0;
58         if (token == "put")
59         {
60             rem_proc = put_1;
61             print_msg(stdout, "%s (%d): llamando a PUT:", pname, pid);
62         }
63         else if (token == "find")
64         {
65             rem_proc = find_1;
66             print_msg(stdout, "%s (%d): llamando a FIND:", pname, pid);
67         }
68         else if (token == "del")
69         {
70             rem_proc = del_1;
71             print_msg(stdout, "%s (%d): llamando a DEL:", pname, pid);
72         }
73         else
74         {
75             print_msg(stderr, "%s (%d): Invalid token %s!\n", pname, pid, token.c_str());
76             exit(1);
77         }
78         while (iss >> token)
79         {
80             /* llamar al procedure en el server */
81             int* r = rem_proc((char*)token.c_str(), client_id, 0, cl);
82             if (r == NULL)
83             {
84                 /* error durante la comunicacion. */
85                 clnt_perror(cl, server_name);
86                 exit(1);
87             }
88             print_msg(stdout, " %s", token.c_str());
89         }
90         print_msg(stdout, "\n");
91         int* r = rem_proc("", client_id, 1, cl);
92         if (r == NULL)
93         {
94             /* error durante la comunicacion. */
95             clnt_perror(cl, server_name);
96             exit(1);
97         }
98         print_msg(stdout, "%s (%d): el server responde %d\n", pname, pid, *r);
99     }
100
101     int* r = quit_1(client_id, cl);
102     if (r == NULL)
103     {
104         /* error durante la comunicacion. */
105         clnt_perror(cl, server_name);
106         exit(1);
107     }
108
109     exit (0);
110 }
111
112 // vim: set et sw=4 sts=4 :