#include #include #include #include #include #include #include #include #include "CUsbRocket.h" using namespace std; bool HandleMsg(int newsockfd); CUsbRocket g_Rocket; int main(int argc, char** argv) { g_Rocket.StartMovement(); bool bRunning = true; int sockfd, newsockfd, portno; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; int n; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) cerr << "ERROR opening socket\n"; bzero((char *) &serv_addr, sizeof(serv_addr)); portno = 8088; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) cerr << "ERROR on binding\n"; n = 1; while (bRunning) { listen(sockfd, 5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) cerr << "ERROR on accept\n"; else cout << "Client connected\n"; bRunning = HandleMsg(newsockfd); cout << "Client disconnected\n"; } close(newsockfd); close(sockfd); return 0; } bool HandleMsg(int newsockfd) { bool bRunning = true; int n = 1; char buffer[2]; while (n > 0 && bRunning) { n = read(newsockfd, buffer, 1); if (n > 0) { cout << buffer[0] << endl; switch (buffer[0]) { case 'w': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_UP); break; case 's': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_DOWN); break; case 'a': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_LEFT); break; case 'd': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_RIGHT); break; case 'q': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_STOP); break; case 'x': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_EXIT); bRunning = false; break; case 'r': g_Rocket.SetMoveSpeed(CUsbRocket::SPEED_FASTEST); break; case 'f': g_Rocket.SetMoveSpeed(CUsbRocket::SPEED_MEDIUM); break; case 'v': g_Rocket.SetMoveSpeed(CUsbRocket::SPEED_SLOW); break; case ' ': g_Rocket.SetMoveDirection(CUsbRocket::MOVE_FIRE); break; } } } return bRunning; }