Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //CLIENTE
- #include "util.h"
- void campo(){
- int i=0, k, ch;
- char c;
- initscr();
- keypad(stdscr, TRUE);
- raw();
- noecho();
- curs_set(0);
- //start_color();
- init_color(COLOR_BLACK, 500, 0, 0);
- init_pair(1, COLOR_GREEN, COLOR_GREEN);
- init_pair(2, COLOR_BLACK, COLOR_BLACK);
- init_pair(3, COLOR_WHITE, COLOR_GREEN);
- init_pair(4, COLOR_YELLOW, COLOR_GREEN);
- init_pair(5, COLOR_BLUE, COLOR_GREEN);
- for(i=0;i<22;i++){
- attron(COLOR_PAIR(1));
- move(i,0);
- //printw("012345678901234567890123456789012345678901234567890");
- printw(" ");
- attroff(COLOR_PAIR(1));
- }
- for(i=6;i<15;i++){
- attron(COLOR_PAIR(2));
- move(i,0);
- printw(" ");
- move(i,50);
- printw(" ");
- attroff(COLOR_PAIR(2));
- }
- attron(COLOR_PAIR(3));
- mvaddch(10,25, 'o');
- attroff(COLOR_PAIR(3));
- for(k=0;k<10;k++){
- if(k>=0 && k<=4)
- attron(COLOR_PAIR(4));
- else if(k>=5 && k<=9)
- attron(COLOR_PAIR(5));
- c = k +'0';
- mvaddch(pj[k].y,pj[k].x, c);
- }
- attroff(COLOR_PAIR(4));
- attroff(COLOR_PAIR(5));
- refresh();
- }
- int main(){
- char opcao[100], opcao2[100], fifo_cliente[20], c;
- int lines=0, i=0, fd, fd_resposta, num_jogador, flag, k=0, ch = 0;
- login l;//estrutura iniciada
- l.success=0;
- if(access(FIFO_SERV,F_OK)!=0){//verifica se o servidor ou pipe existem
- printf("O servidor nao estar a correr\n");
- exit(1);
- }
- l.pid = getpid(); //guarda o pid do cliente
- sprintf(fifo_cliente, "ccc%d", l.pid);
- mkfifo(fifo_cliente, 0600);//cria fifo para o cliente
- fd=open(FIFO_SERV,O_RDWR); //abre o pipe do servidor em modo de leitura
- do{
- printf("\n\n\n\n\n\n\tJogar\n");
- printf("\tSair\n");
- scanf("%s", opcao);
- system("clear");
- }while(strcmp(opcao,"Jogar")!=0 && strcmp(opcao,"Sair")!=0);
- if(strcmp(opcao,"Sair")==0)
- exit(0);
- else if(strcmp(opcao,"Jogar")==0)
- {
- do{
- system("clear");
- printf("\n\n-Login-\n");
- printf("Username: ");
- scanf("%s", l.username);
- printf("Password: ");
- scanf("%s", l.password);
- //enviar dados para o servidor
- i = write(fd, &l, sizeof(l));
- printf("Enviei um pedido...(%d bytes)\n", i);
- //receber a verificar se foi efetuado com sucesso
- fd_resposta = open(fifo_cliente, O_RDWR);
- printf("%s\n", fifo_cliente);
- printf("%d\n", l.success);
- i = read(fd_resposta, &l, sizeof(l));
- printf("%d\n", l.success);
- printf("Recebi a resposta=%d (%d bytes)\n", l.success, i);
- printf("%d\n", l.success);
- //guardar dados dentro da estrutura de login
- }while(l.success!=1);//verificacao de valor correcto de login, ou o utilizador decide sair | returnlogin
- }
- do{
- flag = 0;
- printf("Escolha um jogador da lista de disponiveis: \n");
- scanf("%d", &num_jogador);
- i = write(fd, &num_jogador, sizeof(num_jogador));
- printf("Enviei um pedido %d bytes\n", i);
- if(pj[num_jogador].pid==0 && (num_jogador>=0 && num_jogador<=9))
- flag = 1;
- else
- flag = 0;
- }while(flag==0);
- printf("1");
- k = num_jogador;
- campo();
- do{
- clear();
- campo();
- ch = getch();
- i = write(fd, &ch, sizeof(ch));
- i = read(fd_resposta, pj, sizeof(JOGADOR)*10);
- i = read(fd_resposta, &k, sizeof(k));
- }while(ch!='x');
- endwin();
- close(fd);
- close(fd_resposta);
- }
- //SERVIDOR
- #include "util.h"
- void atualiza_jogadores(){
- int z;
- z = 0;
- system("clear");
- printf("Jogadores disponiveis:\n");
- for(z=0;z<10;z++){
- if(pj[z].pid==0)
- printf("-> %d\n", z);
- }
- }
- void main(void){
- int fd, i, fd_resposta, lines = 0,j=0, z, num_jogador=0, flag,k=0,p=0;
- char fifo_cliente[100], ch;
- login l;
- FILE *f;
- f = fopen("login.txt", "r+t");
- while(!feof(f))
- {
- ch = fgetc(f);
- if(ch == '\n')
- {
- lines++;
- }
- }
- lines = lines + 1;
- mkfifo(FIFO_SERV, 0600);// Cria fifo do servidor
- fd = open(FIFO_SERV, O_RDWR);//Abre o fifo do servidor para leitura
- l.success = 0;
- do{
- fseek(f, 0, SEEK_SET);
- i = read(fd, &l, sizeof(l));
- printf("Recebi um pedido... (%d bytes)\n", i);
- printf("username: %s password: %s (%d)\n", l.username, l.password, l.pid);
- for(j=0;j<lines;j++){
- fscanf(f,"%s %s", l.usernametmp, l.passwordtmp);
- printf("%s %s\n", l.usernametmp, l.passwordtmp);
- if(strcmp(l.username,l.usernametmp)==0 && strcmp(l.password, l.passwordtmp)==0){
- l.success = 1;
- j=j+lines;
- }
- }
- sprintf(fifo_cliente,"ccc%d", l.pid);
- fd_resposta = open(fifo_cliente, O_RDWR);
- i = write(fd_resposta, &l, sizeof(l));
- printf("Enviei a resposta=%d (%d bytes)\n", l.success, i);
- }while(l.success!=1);
- printf("1\n\n");
- //Enviar a resposta ao cliente
- sprintf(fifo_cliente,"ccc%d", l.pid);
- printf("%d\n", l.pid);
- fd_resposta = open(fifo_cliente, O_RDWR);//abre o pipe do cliente em modo de escrita e leitura pois o pipe bloqueava na escrita
- i = write(fd_resposta, &l, sizeof(l)); //escreve para o pipe do cliente a resposta
- printf("Enviei a resposta=%d (%d bytes)\n", l.success, i);
- fclose(f);
- do{
- atualiza_jogadores();
- flag = 0;
- i = read(fd, &num_jogador, sizeof(num_jogador));
- //printf("Recebi um pedido %d\n", num_jogador);
- if(pj[num_jogador].pid==0 && (num_jogador>=0 && num_jogador<=9))
- flag = 1;
- else
- flag = 0;
- }while(flag==0);
- pj[num_jogador].pid = getpid();
- k = num_jogador;
- do{
- i = read(fd, &ch, sizeof(ch));
- if(pj[k].y < 21 && pj[k].x < 51){
- if(ch == KEY_UP)
- pj[k].y=pj[k].y-1;
- else if(ch == KEY_DOWN)
- pj[k].y=pj[k].y+1;
- else if(ch == KEY_LEFT)
- pj[k].x=pj[k].x-1;
- else if(ch == KEY_RIGHT)
- pj[k].x=pj[k].x+1;
- else if(ch == '0'){
- if(pj[0].pid==0){
- attron(COLOR_PAIR(4));
- k=0;}}
- else if(ch == '1'){
- if(pj[1].pid==0){
- attron(COLOR_PAIR(4));
- k=1;}}
- else if(ch == '2'){
- if(pj[2].pid==0){
- attron(COLOR_PAIR(4));
- k=2;}}
- else if(ch == '3'){
- if(pj[3].pid==0){
- attron(COLOR_PAIR(4));
- k=3;}}
- else if(ch == '4'){
- if(pj[4].pid==0){
- attron(COLOR_PAIR(4));
- k=4;}}
- else if(ch == '5'){
- if(pj[5].pid==0){
- attron(COLOR_PAIR(5));
- k=5;}}
- else if(ch == '6'){
- if(pj[6].pid==0){
- attron(COLOR_PAIR(5));
- k=6;}}
- else if(ch == '7'){
- if(pj[7].pid==0){
- attron(COLOR_PAIR(5));
- k=7;}}
- else if(ch == '8'){
- if(pj[8].pid==0){
- attron(COLOR_PAIR(5));
- k=8;}}
- else if(ch == '9'){
- if(pj[9].pid==0){
- attron(COLOR_PAIR(5));
- k=9;
- }}
- }
- for(p = 0;p<10;p++){
- if(pj[p].pid != 0){
- sprintf(fifo_cliente,"ccc%d", pj[p].pid);
- i = write(fd_resposta, pj, sizeof(JOGADOR)*10);
- i = write(fd_resposta, &k, sizeof(k));
- }
- }
- }while(ch!='x');
- close(fd);
- close(fd_resposta);
- }
- //UTIL.H
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <ncurses.h>
- #define TAM 100
- #define FIFO_SERV "fifoSERV"
- typedef struct {
- char username[TAM], password[TAM], usernametmp[TAM], passwordtmp[TAM];
- int pid, success;
- }registo;
- typedef struct {
- char username[TAM], password[TAM], usernametmp[TAM], passwordtmp[TAM];
- int pid, success;
- //success = 1 (sucesso), = 0 (user/pass errada)
- }login;
- typedef struct {
- int pid;
- } PEDIDO;
- typedef struct {
- int pid, y, x, posse;
- }JOGADOR;
- 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