int algo(t_data *data) { if (data->key_func[data->index]) data->key_func[data->index](data->key); if (play(data->grid, data->key) == 0) { data->key = -1; return (0); } del_rest_of_the_list(data); if (add_list(&data->list, data->grid)) return (1); data->current = data->current->next; add_random(data->grid); blit_this(data); if (is_win(data->grid)) { data->play = 0; return (0); } else if (is_lost(data->grid)) { data->play = 0; return (0); } data->key = -1; return (0); }
bool read_pkt(buf_ptr &buf) { if (!super::read_pkt(buf)) return false; if (super::is_helper(buf) && is_lost(e2)) { ++m_e2_lost; return false; } else if (super::is_neighbor(buf) && is_lost(e3)) { ++m_e3_lost; return false; } else if (super::is_two_hop(buf) && is_lost(e4)) { ++m_e4_lost; return false; } ++m_not_lost; return true; }
bool read_pkt(buf_ptr &buf) { if (!super::read_pkt(buf)) return false; if (super::is_source(buf) && is_lost(e1)) return false; return true; }
void ConnectFour::update_game_state() { //check if the last move won the game if(is_won()) { if(human == current) printf("You win!\n"); else printf("You lose.\n"); state = GAMEOVER; } else if(is_lost()) { printf("No more possible moves\n"); state = GAMEOVER; } else { //next turn current = Tile::opposite(current); } }
int main(int argc, char** argv) { struct sockaddr_in serverAddr; /* Local address */ struct sockaddr_in clientAddr; /* Client address */ unsigned int cliAddrLen; /* Length of incoming message */ int recvMsgSize; /* Size of received message */ struct sigaction myAction; /* For setting signal handler */ float lossRate; /* Rate of packet loss for testing. */ unsigned short serverPort; /* Port to open server. */ unsigned int chunkSize; /* Chuck size to handle packet data. */ Sender_Message rcvdMessage; Receiver_Message ackMessage; unsigned int maxMessageSize = sizeof(rcvdMessage); unsigned int recvMessageSize; unsigned int packet_rcvd = -1; /* Seed our generator for packet loss. */ srand48(DEFAULT_RAND_SEED); if(argc < 3) { fprintf(stderr, "Usage: %s port_no chunk_size [loss_rate]", argv[0]); exit(1); } /* Get the args. */ serverPort = atoi(argv[1]); chunkSize = atoi(argv[2]); /* Get the loss rate if there. */ if(argc >= 4) lossRate = atof(argv[3]); else lossRate = DEFAULT_LOSS_RATE; printf("Loss Rate: %f\n", lossRate); allocateNewBuffer(DEFAULT_BUFFER_SIZE); /* Set signal handler for alarm signal */ myAction.sa_handler = CatchAlarm; if (sigfillset(&myAction.sa_mask) < 0) /* block everything in handler */ DieWithError("sigfillset() failed"); myAction.sa_flags = 0; if (sigaction(SIGALRM, &myAction, 0) < 0) DieWithError("sigaction() failed for SIGALRM"); /* Create socket for sending/receiving datagrams */ if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) DieWithError("socket() failed"); /* Construct local address structure */ memset(&serverAddr, 0, sizeof(serverAddr)); /* Zero out structure */ serverAddr.sin_family = AF_INET; /* Internet address family */ serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ serverAddr.sin_port = htons(serverPort); /* Local port */ /* Bind to the local address */ if (bind(sock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) DieWithError("bind() failed"); for(;;) /* Run forever */ { /* Set the size of the in-out parameter */ cliAddrLen = sizeof(clientAddr); /* Drop packets at the given loss rate. */ while(is_lost(lossRate)) { if((recvMessageSize = recvfrom(sock, (char *)&rcvdMessage, maxMessageSize, 0, (struct sockaddr *) &clientAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); printf("Packet received. type: %d. seq_no: %d. length: %d.\n", rcvdMessage.type, rcvdMessage.seq_no, rcvdMessage.length); printf("Packet Tossed.\n"); } /* Now actually grab the proper packet. */ if((recvMessageSize = recvfrom(sock, (char *)&rcvdMessage, maxMessageSize, 0, (struct sockaddr *) &clientAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); if(rcvdMessage.type == PACKET_TYPE_TEAR_DOWN) { ackMessage.ack_no = 0; ackMessage.type = PACKET_TYPE_TEAR_DOWN_ACK; printf("Breaking\n"); if(sendto(sock, (char *)&ackMessage, sizeof(ackMessage), 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)) < 0) DieWithError("Send Failed"); alarm(7); break; } ackMessage.type = PACKET_TYPE_ACK; if(rcvdMessage.seq_no == packet_rcvd+1) { packet_rcvd++; /* We want this packet. Copy the data. */ while(dataInBuffer + rcvdMessage.length > currentBufferSize) allocateNewBuffer(currentBufferSize + DEFAULT_BUFFER_SIZE); memcpy(&(buffer[dataInBuffer]), rcvdMessage.data, rcvdMessage.length); dataInBuffer += rcvdMessage.length; } ackMessage.ack_no = packet_rcvd; printf("Packet received. type: %d. seq_no: %d. length: %d.\n", rcvdMessage.type, rcvdMessage.seq_no, rcvdMessage.length); if(sendto(sock, (char *)&ackMessage, sizeof(ackMessage), 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)) < 0) DieWithError("Send Failed"); printf("Ack num %d sent\n", ackMessage.ack_no); } /* We broke because we got a tear down. Now send tear down to any messaged. */ for(;;) { /* Now actually grab the proper packet. */ if((recvMessageSize = recvfrom(sock, (char *)&rcvdMessage, maxMessageSize, 0, (struct sockaddr *) &clientAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); ackMessage.ack_no = 0; ackMessage.type = PACKET_TYPE_TEAR_DOWN_ACK; printf("Tear down responded\n"); if(sendto(sock, (char *)&ackMessage, sizeof(ackMessage), 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)) < 0) DieWithError("Send Failed"); } return 0; }
int main(int argc, char** argv) { int sock; /* Socket */ struct sockaddr_in serverAddr; /* Local address */ struct sockaddr_in clientAddr; /* Client address */ unsigned int cliAddrLen; /* Length of incoming message */ int recvMsgSize; /* Size of received message */ float lossRate; /* Rate of packet loss for testing. */ unsigned short serverPort; /* Port to open server. */ unsigned int chunkSize; /* Chuck size to handle packet data. */ Sender_Message rcvdMessage; Receiver_Message ackMessage; unsigned int maxMessageSize = sizeof(rcvdMessage); unsigned int recvMessageSize; unsigned int packet_rcvd = -1; /* Seed our generator for packet loss. */ srand48(DEFAULT_RAND_SEED); if(argc < 3) { fprintf(stderr, "Usage: %s port_no chunk_size [loss_rate]", argv[0]); exit(1); } /* Get the args. */ serverPort = atoi(argv[1]); chunkSize = atoi(argv[2]); /* Get the loss rate if there. */ if(argc >= 4) lossRate = atoi(argv[3]); else lossRate = DEFAULT_LOSS_RATE; printf("Loss Rate: %f\n", lossRate); /* Create socket for sending/receiving datagrams */ if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) DieWithError("socket() failed"); /* Construct local address structure */ memset(&serverAddr, 0, sizeof(serverAddr)); /* Zero out structure */ serverAddr.sin_family = AF_INET; /* Internet address family */ serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ serverAddr.sin_port = htons(serverPort); /* Local port */ /* Bind to the local address */ if (bind(sock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) DieWithError("bind() failed"); for(;;) /* Run forever */ { /* Set the size of the in-out parameter */ cliAddrLen = sizeof(clientAddr); /* Drop packets at the given loss rate. */ while(is_lost(lossRate)) { if((recvMessageSize = recvfrom(sock, (char *)&rcvdMessage, maxMessageSize, 0, (struct sockaddr *) &clientAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); printf("Packet received. type: %d. seq_no: %d. length: %d.\n", rcvdMessage.type, rcvdMessage.seq_no, rcvdMessage.length); printf("Packet Tossed.\n"); } /* Now actually grab the proper packet. */ if((recvMessageSize = recvfrom(sock, (char *)&rcvdMessage, maxMessageSize, 0, (struct sockaddr *) &clientAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); ackMessage.type = PACKET_TYPE_ACK; if(rcvdMessage.seq_no == packet_rcvd+1) { packet_rcvd++; } ackMessage.ack_no = packet_rcvd; printf("Packet received. type: %d. seq_no: %d. length: %d.\n", rcvdMessage.type, rcvdMessage.seq_no, rcvdMessage.length); if(sendto(sock, (char *)&ackMessage, sizeof(ackMessage), 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)) < 0) DieWithError("Send Failed"); printf("Ack num %d sent\n", ackMessage.ack_no); } return 0; }