Advertisement
Guest User

Untitled

a guest
Jan 8th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. //CLIENTE
  2. #include "util.h"
  3.  
  4. void campo(){
  5.  
  6. int i=0, k, ch;
  7. char c;
  8. initscr();
  9. keypad(stdscr, TRUE);
  10. raw();
  11. noecho();
  12. curs_set(0);
  13. //start_color();
  14. init_color(COLOR_BLACK, 500, 0, 0);
  15.  
  16. init_pair(1, COLOR_GREEN, COLOR_GREEN);
  17. init_pair(2, COLOR_BLACK, COLOR_BLACK);
  18. init_pair(3, COLOR_WHITE, COLOR_GREEN);
  19. init_pair(4, COLOR_YELLOW, COLOR_GREEN);
  20. init_pair(5, COLOR_BLUE, COLOR_GREEN);
  21. for(i=0;i<22;i++){
  22. attron(COLOR_PAIR(1));
  23. move(i,0);
  24. //printw("012345678901234567890123456789012345678901234567890");
  25. printw(" ");
  26. attroff(COLOR_PAIR(1));
  27. }
  28. for(i=6;i<15;i++){
  29. attron(COLOR_PAIR(2));
  30. move(i,0);
  31. printw(" ");
  32. move(i,50);
  33. printw(" ");
  34. attroff(COLOR_PAIR(2));
  35. }
  36. attron(COLOR_PAIR(3));
  37. mvaddch(10,25, 'o');
  38. attroff(COLOR_PAIR(3));
  39. for(k=0;k<10;k++){
  40. if(k>=0 && k<=4)
  41. attron(COLOR_PAIR(4));
  42. else if(k>=5 && k<=9)
  43. attron(COLOR_PAIR(5));
  44. c = k +'0';
  45. mvaddch(pj[k].y,pj[k].x, c);
  46. }
  47. attroff(COLOR_PAIR(4));
  48. attroff(COLOR_PAIR(5));
  49. refresh();
  50. }
  51.  
  52. int main(){
  53.  
  54. char opcao[100], opcao2[100], fifo_cliente[20], c;
  55. int lines=0, i=0, fd, fd_resposta, num_jogador, flag, k=0, ch = 0;
  56. login l;//estrutura iniciada
  57. l.success=0;
  58. if(access(FIFO_SERV,F_OK)!=0){//verifica se o servidor ou pipe existem
  59. printf("O servidor nao estar a correr\n");
  60. exit(1);
  61. }
  62. l.pid = getpid(); //guarda o pid do cliente
  63. sprintf(fifo_cliente, "ccc%d", l.pid);
  64. mkfifo(fifo_cliente, 0600);//cria fifo para o cliente
  65. fd=open(FIFO_SERV,O_RDWR); //abre o pipe do servidor em modo de leitura
  66.  
  67. do{
  68.  
  69. printf("\n\n\n\n\n\n\tJogar\n");
  70. printf("\tSair\n");
  71. scanf("%s", opcao);
  72. system("clear");
  73.  
  74. }while(strcmp(opcao,"Jogar")!=0 && strcmp(opcao,"Sair")!=0);
  75.  
  76. if(strcmp(opcao,"Sair")==0)
  77. exit(0);
  78. else if(strcmp(opcao,"Jogar")==0)
  79. {
  80. do{
  81. system("clear");
  82. printf("\n\n-Login-\n");
  83. printf("Username: ");
  84. scanf("%s", l.username);
  85. printf("Password: ");
  86. scanf("%s", l.password);
  87.  
  88. //enviar dados para o servidor
  89. i = write(fd, &l, sizeof(l));
  90. printf("Enviei um pedido...(%d bytes)\n", i);
  91.  
  92. //receber a verificar se foi efetuado com sucesso
  93. fd_resposta = open(fifo_cliente, O_RDWR);
  94. printf("%s\n", fifo_cliente);
  95. printf("%d\n", l.success);
  96. i = read(fd_resposta, &l, sizeof(l));
  97. printf("%d\n", l.success);
  98. printf("Recebi a resposta=%d (%d bytes)\n", l.success, i);
  99. printf("%d\n", l.success);
  100. //guardar dados dentro da estrutura de login
  101.  
  102. }while(l.success!=1);//verificacao de valor correcto de login, ou o utilizador decide sair | returnlogin
  103. }
  104.  
  105. do{
  106. flag = 0;
  107. printf("Escolha um jogador da lista de disponiveis: \n");
  108. scanf("%d", &num_jogador);
  109. i = write(fd, &num_jogador, sizeof(num_jogador));
  110. printf("Enviei um pedido %d bytes\n", i);
  111. if(pj[num_jogador].pid==0 && (num_jogador>=0 && num_jogador<=9))
  112. flag = 1;
  113. else
  114. flag = 0;
  115. }while(flag==0);
  116. printf("1");
  117. k = num_jogador;
  118. campo();
  119. do{
  120. clear();
  121. campo();
  122. ch = getch();
  123. i = write(fd, &ch, sizeof(ch));
  124. i = read(fd_resposta, pj, sizeof(JOGADOR)*10);
  125. i = read(fd_resposta, &k, sizeof(k));
  126.  
  127. }while(ch!='x');
  128. endwin();
  129. close(fd);
  130. close(fd_resposta);
  131.  
  132. }
  133.  
  134. //SERVIDOR
  135.  
  136. #include "util.h"
  137.  
  138. void atualiza_jogadores(){
  139. int z;
  140. z = 0;
  141.  
  142. system("clear");
  143. printf("Jogadores disponiveis:\n");
  144. for(z=0;z<10;z++){
  145. if(pj[z].pid==0)
  146. printf("-> %d\n", z);
  147. }
  148. }
  149.  
  150. void main(void){
  151.  
  152. int fd, i, fd_resposta, lines = 0,j=0, z, num_jogador=0, flag,k=0,p=0;
  153. char fifo_cliente[100], ch;
  154. login l;
  155. FILE *f;
  156. f = fopen("login.txt", "r+t");
  157. while(!feof(f))
  158. {
  159. ch = fgetc(f);
  160. if(ch == '\n')
  161. {
  162. lines++;
  163. }
  164. }
  165. lines = lines + 1;
  166. mkfifo(FIFO_SERV, 0600);// Cria fifo do servidor
  167. fd = open(FIFO_SERV, O_RDWR);//Abre o fifo do servidor para leitura
  168. l.success = 0;
  169. do{
  170. fseek(f, 0, SEEK_SET);
  171. i = read(fd, &l, sizeof(l));
  172.  
  173.  
  174. printf("Recebi um pedido... (%d bytes)\n", i);
  175. printf("username: %s password: %s (%d)\n", l.username, l.password, l.pid);
  176.  
  177. for(j=0;j<lines;j++){
  178. fscanf(f,"%s %s", l.usernametmp, l.passwordtmp);
  179. printf("%s %s\n", l.usernametmp, l.passwordtmp);
  180. if(strcmp(l.username,l.usernametmp)==0 && strcmp(l.password, l.passwordtmp)==0){
  181. l.success = 1;
  182. j=j+lines;
  183. }
  184. }
  185. sprintf(fifo_cliente,"ccc%d", l.pid);
  186. fd_resposta = open(fifo_cliente, O_RDWR);
  187. i = write(fd_resposta, &l, sizeof(l));
  188. printf("Enviei a resposta=%d (%d bytes)\n", l.success, i);
  189. }while(l.success!=1);
  190. printf("1\n\n");
  191. //Enviar a resposta ao cliente
  192. sprintf(fifo_cliente,"ccc%d", l.pid);
  193. printf("%d\n", l.pid);
  194. fd_resposta = open(fifo_cliente, O_RDWR);//abre o pipe do cliente em modo de escrita e leitura pois o pipe bloqueava na escrita
  195. i = write(fd_resposta, &l, sizeof(l)); //escreve para o pipe do cliente a resposta
  196. printf("Enviei a resposta=%d (%d bytes)\n", l.success, i);
  197. fclose(f);
  198. do{
  199. atualiza_jogadores();
  200. flag = 0;
  201. i = read(fd, &num_jogador, sizeof(num_jogador));
  202. //printf("Recebi um pedido %d\n", num_jogador);
  203. if(pj[num_jogador].pid==0 && (num_jogador>=0 && num_jogador<=9))
  204. flag = 1;
  205. else
  206. flag = 0;
  207. }while(flag==0);
  208. pj[num_jogador].pid = getpid();
  209. k = num_jogador;
  210.  
  211. do{
  212.  
  213. i = read(fd, &ch, sizeof(ch));
  214.  
  215. if(pj[k].y < 21 && pj[k].x < 51){
  216. if(ch == KEY_UP)
  217. pj[k].y=pj[k].y-1;
  218. else if(ch == KEY_DOWN)
  219. pj[k].y=pj[k].y+1;
  220. else if(ch == KEY_LEFT)
  221. pj[k].x=pj[k].x-1;
  222. else if(ch == KEY_RIGHT)
  223. pj[k].x=pj[k].x+1;
  224. else if(ch == '0'){
  225. if(pj[0].pid==0){
  226. attron(COLOR_PAIR(4));
  227. k=0;}}
  228. else if(ch == '1'){
  229. if(pj[1].pid==0){
  230. attron(COLOR_PAIR(4));
  231. k=1;}}
  232. else if(ch == '2'){
  233. if(pj[2].pid==0){
  234. attron(COLOR_PAIR(4));
  235. k=2;}}
  236. else if(ch == '3'){
  237. if(pj[3].pid==0){
  238. attron(COLOR_PAIR(4));
  239. k=3;}}
  240. else if(ch == '4'){
  241. if(pj[4].pid==0){
  242. attron(COLOR_PAIR(4));
  243. k=4;}}
  244. else if(ch == '5'){
  245. if(pj[5].pid==0){
  246. attron(COLOR_PAIR(5));
  247. k=5;}}
  248. else if(ch == '6'){
  249. if(pj[6].pid==0){
  250. attron(COLOR_PAIR(5));
  251. k=6;}}
  252. else if(ch == '7'){
  253. if(pj[7].pid==0){
  254. attron(COLOR_PAIR(5));
  255. k=7;}}
  256. else if(ch == '8'){
  257. if(pj[8].pid==0){
  258. attron(COLOR_PAIR(5));
  259. k=8;}}
  260. else if(ch == '9'){
  261. if(pj[9].pid==0){
  262. attron(COLOR_PAIR(5));
  263. k=9;
  264. }}
  265. }
  266. for(p = 0;p<10;p++){
  267. if(pj[p].pid != 0){
  268. sprintf(fifo_cliente,"ccc%d", pj[p].pid);
  269. i = write(fd_resposta, pj, sizeof(JOGADOR)*10);
  270. i = write(fd_resposta, &k, sizeof(k));
  271. }
  272. }
  273. }while(ch!='x');
  274.  
  275.  
  276.  
  277. close(fd);
  278. close(fd_resposta);
  279.  
  280. }
  281.  
  282. //UTIL.H
  283.  
  284. #include <stdio.h>
  285. #include <stdlib.h>
  286. #include <string.h>
  287. #include <unistd.h>
  288. #include <sys/stat.h>
  289. #include <sys/types.h>
  290. #include <fcntl.h>
  291. #include <ncurses.h>
  292. #define TAM 100
  293. #define FIFO_SERV "fifoSERV"
  294.  
  295. typedef struct {
  296.  
  297. char username[TAM], password[TAM], usernametmp[TAM], passwordtmp[TAM];
  298. int pid, success;
  299.  
  300. }registo;
  301.  
  302. typedef struct {
  303.  
  304. char username[TAM], password[TAM], usernametmp[TAM], passwordtmp[TAM];
  305. int pid, success;
  306. //success = 1 (sucesso), = 0 (user/pass errada)
  307.  
  308. }login;
  309.  
  310. typedef struct {
  311.  
  312. int pid;
  313.  
  314. } PEDIDO;
  315.  
  316. typedef struct {
  317.  
  318. int pid, y, x, posse;
  319.  
  320. }JOGADOR;
  321.  
  322. JOGADOR pj[10] = { {0,10,1,0} , {0,7,10,0}, {0,15,10,0}, {0,6,22,0} , {0,15,22,0}, {0,10,49,0} ,{0,10,41,0}, {0,6,34,0}, {0,15,34,0}, {0,10,29,0} };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement