122 lines
2.2 KiB
C++
122 lines
2.2 KiB
C++
#include <iostream>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#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;
|
|
}
|