working tcp comm
This commit is contained in:
parent
3ad3d73a2f
commit
3f2d84e8d4
1
.vscode/c_cpp_properties.json
vendored
1
.vscode/c_cpp_properties.json
vendored
@ -6,6 +6,7 @@
|
|||||||
"c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
|
"c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
|
||||||
"L:/SDL2-2.0.5/include",
|
"L:/SDL2-2.0.5/include",
|
||||||
"L:/SDL2-2.0.5/include/SDL2",
|
"L:/SDL2-2.0.5/include/SDL2",
|
||||||
|
"${workspaceRoot}/includes/",
|
||||||
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt",
|
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt",
|
||||||
"C:/Program Files (x86)/Windows Kits/8.1/Include/um/gl"
|
"C:/Program Files (x86)/Windows Kits/8.1/Include/um/gl"
|
||||||
],
|
],
|
||||||
|
20
.vscode/settings.json
vendored
20
.vscode/settings.json
vendored
@ -41,6 +41,24 @@
|
|||||||
"typeinfo": "cpp",
|
"typeinfo": "cpp",
|
||||||
"utility": "cpp",
|
"utility": "cpp",
|
||||||
"cstring": "cpp",
|
"cstring": "cpp",
|
||||||
"algorithm": "cpp"
|
"algorithm": "cpp",
|
||||||
|
"ios": "cpp",
|
||||||
|
"new": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"xfacet": "cpp",
|
||||||
|
"xfunctional": "cpp",
|
||||||
|
"xiosbase": "cpp",
|
||||||
|
"xlocale": "cpp",
|
||||||
|
"xlocinfo": "cpp",
|
||||||
|
"xlocnum": "cpp",
|
||||||
|
"xmemory": "cpp",
|
||||||
|
"xmemory0": "cpp",
|
||||||
|
"xstddef": "cpp",
|
||||||
|
"xstring": "cpp",
|
||||||
|
"xtr1common": "cpp",
|
||||||
|
"xutility": "cpp",
|
||||||
|
"xthread": "cpp",
|
||||||
|
"map": "cpp",
|
||||||
|
"xtree": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,59 +5,60 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <thread>
|
||||||
|
#include <map>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace betacore{
|
namespace betacore
|
||||||
|
{
|
||||||
|
|
||||||
|
class Client
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
bool _online = false;
|
||||||
|
bool _running = false;
|
||||||
|
char key = 'Z';
|
||||||
|
int _port;
|
||||||
|
std::string _url;
|
||||||
|
MODE _mode;
|
||||||
|
int _client_socket;
|
||||||
|
std::function<void(SHAPE &S)> _update;
|
||||||
|
struct sockaddr_in _server_address;
|
||||||
|
struct hostent *_server;
|
||||||
|
std::map<std::string, std::string> lookup;
|
||||||
|
std::string encode(const SHAPE &shape);
|
||||||
|
std::string crypt(const std::string &shape);
|
||||||
|
|
||||||
class Client{
|
std::string raw(const SHAPE &shape);
|
||||||
private:
|
SHAPE parse(const std::string &message);
|
||||||
bool _online = false;
|
|
||||||
bool _running= false;
|
|
||||||
char key = 'Z';
|
|
||||||
int _port;
|
|
||||||
std::string _address;
|
|
||||||
MODE _mode;
|
|
||||||
int _client_socket;
|
|
||||||
std::function<void(SHAPE &S)> _update;
|
|
||||||
struct sockaddr_in _server_address;
|
|
||||||
struct hostent * _server;
|
|
||||||
|
|
||||||
|
|
||||||
std::string encode(const SHAPE &shape);
|
SHAPE decode(const std::string &message);
|
||||||
std::string crypt(const std::string &shape);
|
/**
|
||||||
|
|
||||||
|
|
||||||
std::string raw(const SHAPE &shape);
|
|
||||||
SHAPE parse(const std::string &message);
|
|
||||||
|
|
||||||
SHAPE decode(const std::string &message);
|
|
||||||
/**
|
|
||||||
* Function for Thread for getting information from server
|
* Function for Thread for getting information from server
|
||||||
*/
|
*/
|
||||||
void listener();
|
void listener();
|
||||||
/**
|
/**
|
||||||
* Function for Thread for sending to server
|
* Function for Thread for sending to server
|
||||||
*/
|
*/
|
||||||
void sender();
|
void sender();
|
||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
public:
|
|
||||||
Client(MODE mode, int port, std::string address, std::function<void(SHAPE &S)> &update);
|
|
||||||
void kill();
|
|
||||||
bool running();
|
|
||||||
void send(bool encrypt, SHAPE shape);
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
Client(MODE mode, int port, std::string url, std::function<void(SHAPE &S)> &update);
|
||||||
|
void kill();
|
||||||
|
bool running();
|
||||||
|
void send(bool encrypt, SHAPE shape);
|
||||||
};
|
};
|
||||||
}
|
} // namespace betacore
|
||||||
#endif
|
#endif
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef __BETACORE_COMMON_HPP__
|
#ifndef __BETACORE_COMMON_HPP__
|
||||||
#define __BETACORE_COMMON_HPP__
|
#define __BETACORE_COMMON_HPP__
|
||||||
|
|
||||||
#define BUFFER_SIZE 1024
|
|
||||||
namespace betacore
|
namespace betacore
|
||||||
{
|
{
|
||||||
enum SHAPE{
|
enum SHAPE{
|
||||||
|
@ -1,14 +1,26 @@
|
|||||||
#ifndef __BETACORE_SERVER_HPP__
|
#ifndef __BETACORE_SERVER_HPP__
|
||||||
#define __BETACORE_SERVER_HPP__
|
#define __BETACORE_SERVER_HPP__
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/poll.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace betacore
|
namespace betacore
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -16,14 +28,13 @@ namespace betacore
|
|||||||
class Server
|
class Server
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
fd_set rset;
|
||||||
bool online = false;
|
bool online = false;
|
||||||
bool server_running= false;
|
bool server_running= false;
|
||||||
int port;
|
int port;
|
||||||
int server_socket;
|
int server_socket;
|
||||||
std::vector<int> clients;
|
std::vector<int> clients;
|
||||||
char buffer[1024];
|
|
||||||
struct sockaddr_in server_address;
|
struct sockaddr_in server_address;
|
||||||
std::vector<sockaddr_in> client_socket_collection;
|
|
||||||
void start();
|
void start();
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void listener();
|
void listener();
|
||||||
@ -32,6 +43,7 @@ public:
|
|||||||
Server(int port);
|
Server(int port);
|
||||||
void off();
|
void off();
|
||||||
bool running();
|
bool running();
|
||||||
|
|
||||||
};
|
};
|
||||||
} // namespace betacore
|
} // namespace betacore
|
||||||
|
|
||||||
|
6
makefile
6
makefile
@ -1,13 +1,15 @@
|
|||||||
OUTPUT_DIR= bin
|
OUTPUT_DIR= bin
|
||||||
COMPILER = g++
|
COMPILER = g++
|
||||||
COMPILER_FLAGS=-w
|
COMPILER_FLAGS=-w -std=c++11
|
||||||
SOURCE_DIR = source/
|
SOURCE_DIR = source/
|
||||||
INCLUDES_DIR =-I includes/
|
INCLUDES_DIR =-I includes/
|
||||||
LINKER_FLAGS =-lSDL2 -lGL -lGLU -lpthread
|
LINKER_FLAGS =-lSDL2 -lGL -lGLU -lpthread
|
||||||
LIBRARY_FLAGS= -std=c++11 -c -fPIC -shared
|
LIBRARY_FLAGS= -std=c++11 -c -fPIC -shared
|
||||||
SERVER_LIB=$(OUTPUT_DIR)/server.so
|
SERVER_LIB=$(OUTPUT_DIR)/server.so
|
||||||
CLIENT_LIB=$(OUTPUT_DIR)/client.so
|
CLIENT_LIB=$(OUTPUT_DIR)/client.so
|
||||||
all: game | client_driver | server_driver
|
all: game | driver
|
||||||
|
|
||||||
|
driver: client_driver | server_driver
|
||||||
|
|
||||||
game: $(SOURCE_DIR)game.cpp | make_dir
|
game: $(SOURCE_DIR)game.cpp | make_dir
|
||||||
$(COMPILER) $(INCLUDES_DIR) $(SOURCE_DIR)game.cpp $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OUTPUT_DIR)/game.out
|
$(COMPILER) $(INCLUDES_DIR) $(SOURCE_DIR)game.cpp $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OUTPUT_DIR)/game.out
|
||||||
|
@ -2,22 +2,32 @@
|
|||||||
|
|
||||||
namespace betacore
|
namespace betacore
|
||||||
{
|
{
|
||||||
Client::Client(MODE mode, int port, std::string address, std::function<void(SHAPE &S)> &update) : _mode(mode),
|
Client::Client(MODE mode, int port, std::string url, std::function<void(SHAPE &S)> &update) : _mode(mode),
|
||||||
_port(port),
|
_port(port),
|
||||||
_address(address),
|
_url(url),
|
||||||
_update(update)
|
_update(update)
|
||||||
{
|
{
|
||||||
this->start();
|
this->start();
|
||||||
|
lookup["TRIANGLE"]="APPLE";
|
||||||
|
lookup["CIRCLE"]="ORANGE";
|
||||||
|
lookup["SQUARE"]="BANANA";
|
||||||
|
lookup["PENTAGON"]="PINEAPPLE";
|
||||||
|
|
||||||
|
lookup["APPLE"]="TRIANGLE";
|
||||||
|
lookup["ORANGE"]="CIRCLE";
|
||||||
|
lookup["BANANA"]="SQUARE";
|
||||||
|
lookup["PINEAPPLE"]="PENTAGON";
|
||||||
|
|
||||||
}
|
}
|
||||||
void Client::start()
|
void Client::start()
|
||||||
{
|
{
|
||||||
std::cout
|
std::cout
|
||||||
<< "Start"
|
<< "Start"
|
||||||
<< "\nConnecting to: " << _address << ":" <<_port
|
<< "\nConnecting to: " << _url << ":" <<_port
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
//Create a socket point
|
//Create a socket point
|
||||||
_client_socket = socket(AF_INET, SOCK_STREAM, 0);
|
this->_client_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
_server = gethostbyname(_address.c_str());
|
_server = gethostbyname(_url.c_str());
|
||||||
if (_client_socket < 0)
|
if (_client_socket < 0)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR opening socket" << std::endl;
|
std::cout << "ERROR opening socket" << std::endl;
|
||||||
@ -28,21 +38,26 @@ void Client::start()
|
|||||||
<< std::endl;
|
<< std::endl;
|
||||||
bzero((char *)&_server_address, sizeof(_server_address));
|
bzero((char *)&_server_address, sizeof(_server_address));
|
||||||
_server_address.sin_family = AF_INET;
|
_server_address.sin_family = AF_INET;
|
||||||
std::cout
|
|
||||||
<< "AF_INT SET"
|
|
||||||
<< std::endl;
|
|
||||||
bcopy((char *)_server->h_addr, (char *)&_server_address.sin_addr.s_addr, _server->h_length);
|
bcopy((char *)_server->h_addr, (char *)&_server_address.sin_addr.s_addr, _server->h_length);
|
||||||
_server_address.sin_port = htons(_port);
|
_server_address.sin_port = htons(_port);
|
||||||
|
|
||||||
|
|
||||||
// Now connect to the server
|
// Now connect to the server
|
||||||
if (connect(_client_socket, (struct sockaddr *)&_server_address, sizeof(_server_address)) < 0)
|
if (connect(_client_socket, (struct sockaddr *)&_server_address, sizeof(_server_address)) < 0)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR connecting" << std::endl;
|
std::cout << "ERROR connecting" << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this->_online = true;
|
||||||
|
this->_running = true;
|
||||||
|
std::thread listen_thread([this] { this->listener(); } );
|
||||||
|
listen_thread.detach();
|
||||||
|
|
||||||
std::cout
|
std::cout
|
||||||
<< "Client Connected"
|
<< "Client Connected"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
void Client::stop()
|
void Client::stop()
|
||||||
{
|
{
|
||||||
@ -97,10 +112,13 @@ SHAPE Client::decode(const std::string &shape)
|
|||||||
std::string Client::crypt(const std::string &message)
|
std::string Client::crypt(const std::string &message)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::string output = message;
|
|
||||||
for (int i = 0; i < message.size(); i++)
|
// std::string output = std::string(message);
|
||||||
output[i] = message[i] ^ key;
|
|
||||||
return output;
|
// for (int i = 0; i < message.size(); i++)
|
||||||
|
// output.at(i) = message[i] ^ key;
|
||||||
|
std::cout << "Crypt::" << message << " : " << lookup[message] << std::endl;
|
||||||
|
return lookup[message];
|
||||||
}
|
}
|
||||||
std::string Client::encode(const SHAPE &shape)
|
std::string Client::encode(const SHAPE &shape)
|
||||||
{
|
{
|
||||||
@ -128,30 +146,43 @@ std::string Client::encode(const SHAPE &shape)
|
|||||||
void Client::send(bool encrypt, SHAPE shape)
|
void Client::send(bool encrypt, SHAPE shape)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::string message = "SHAPE:" + encrypt ? crypt(encode(shape)) : encode(shape) + ":END";
|
std::string message = "SHAPE:" ;
|
||||||
std::cout << "Sending Message: " << message << std::endl;
|
message += encrypt ? crypt(encode(shape)) : encode(shape) ;
|
||||||
char buffer[BUFFER_SIZE];
|
message += ":END";
|
||||||
bzero(buffer, BUFFER_SIZE);
|
std::cout << "Sending Message: " << message << "\n" << std::endl;
|
||||||
strcpy(buffer, message.c_str());
|
char buffer[1024];
|
||||||
if (write(_client_socket, buffer, strlen(buffer) < 0))
|
bzero(buffer,1024);
|
||||||
|
// for(int i=0; i<1024-1 && i < message.length(); i++){
|
||||||
|
// buffer[i]= message.at(i);
|
||||||
|
// }
|
||||||
|
strcpy(buffer,message.c_str());
|
||||||
|
buffer[1024-1]='\0';
|
||||||
|
int x =write(this->_client_socket, buffer, strlen(buffer));
|
||||||
|
if (x < 0)
|
||||||
{
|
{
|
||||||
std::cout << "Failed send to server" << std::endl;
|
std::cout << "Failed send to server" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::listener()
|
void Client::listener()
|
||||||
{
|
{
|
||||||
|
std::cout << "listener" << std::endl;
|
||||||
|
char buffer[1024];
|
||||||
while (_online)
|
while (_online)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Now read server response
|
// Now read server response
|
||||||
char buffer[BUFFER_SIZE];
|
|
||||||
bzero(buffer, BUFFER_SIZE);
|
|
||||||
|
|
||||||
if (read(_client_socket, buffer, BUFFER_SIZE-1) < 0)
|
bzero(buffer, 1024);
|
||||||
|
std::cout << "Wating For message" << std::endl;
|
||||||
|
if (read(_client_socket, buffer, 1024-1) < 0)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR reading from socket" << std::endl;
|
std::cout << "ERROR reading from socket" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string message(buffer);
|
std::string message(buffer);
|
||||||
|
std::cout << "Got Message: " << message << std::endl;
|
||||||
SHAPE shape = parse(buffer);
|
SHAPE shape = parse(buffer);
|
||||||
_update(shape);
|
_update(shape);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
void test(betacore::SHAPE &s){
|
void test(betacore::SHAPE &s){
|
||||||
std::cout << "It worked" << std::endl;
|
std::cout << "It worked\n" << std::endl;
|
||||||
}
|
}
|
||||||
int main(int argc, char * argv[]){
|
int main(int argc, char * argv[]){
|
||||||
std::function<void(betacore::SHAPE &S)> fn= test;
|
std::function<void(betacore::SHAPE &S)> fn= test;
|
||||||
@ -11,5 +11,12 @@ int main(int argc, char * argv[]){
|
|||||||
client.send(true, betacore::TRIANGLE);
|
client.send(true, betacore::TRIANGLE);
|
||||||
//s.off();
|
//s.off();
|
||||||
//while(client.running()){}
|
//while(client.running()){}
|
||||||
|
std::string a;
|
||||||
|
while(client.running()){
|
||||||
|
std::cin >> a;
|
||||||
|
client.send(false, betacore::TRIANGLE);
|
||||||
|
if (a == "q") client.kill();
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ int Game::initGL()
|
|||||||
|
|
||||||
if (error != GL_NO_ERROR)
|
if (error != GL_NO_ERROR)
|
||||||
{
|
{
|
||||||
printf("OpenGL Error %s\n", gluErrorString(error));
|
printf("OpenGL Error %s\n");
|
||||||
result = -1;
|
result = -1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -123,11 +123,6 @@ int Game::initGL()
|
|||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
gluPerspective(
|
|
||||||
45.0f,
|
|
||||||
(GLfloat)this->SCREEN_WIDTH / (GLfloat)this->SCREEN_HEIGHT,
|
|
||||||
0.1f,
|
|
||||||
100.0f);
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -487,7 +482,6 @@ void Game::resize(int width, int height)
|
|||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,5 @@
|
|||||||
#include "../includes/server.hpp"
|
#include "../includes/server.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
namespace betacore
|
namespace betacore
|
||||||
{
|
{
|
||||||
@ -41,21 +35,27 @@ void Server::start()
|
|||||||
online = true;
|
online = true;
|
||||||
server_running=true;
|
server_running=true;
|
||||||
std::cout << "Server is online"<< std::endl;
|
std::cout << "Server is online"<< std::endl;
|
||||||
|
signal(SIGPIPE,SIG_IGN);
|
||||||
std::thread listen_thread([this] { this->listener(); } );
|
std::thread listen_thread([this] { this->listener(); } );
|
||||||
listen_thread.detach();
|
listen_thread.detach();
|
||||||
}
|
}
|
||||||
void Server::listener()
|
void Server::listener()
|
||||||
{
|
{
|
||||||
std::cout << "Listener "<< online << std::endl;
|
std::cout << "Listener "<< online << std::endl;
|
||||||
|
struct sockaddr_in client_address;
|
||||||
|
listen(this->server_socket, 10);
|
||||||
while (online) {
|
while (online) {
|
||||||
struct sockaddr_in client_address;
|
|
||||||
listen(this->server_socket, 5);
|
|
||||||
socklen_t client_socket_length = sizeof(client_address);
|
socklen_t client_socket_length = sizeof(client_address);
|
||||||
int client_number =
|
int client_number =
|
||||||
accept(server_socket, (struct sockaddr *)&client_address, &client_socket_length);
|
accept(server_socket, (struct sockaddr *)&client_address, &client_socket_length);
|
||||||
this->client_socket_collection.push_back(client_address);
|
|
||||||
this->clients.push_back(client_number);
|
this->clients.push_back(client_number);
|
||||||
std::cout << "New Conenction"<< std::endl;
|
std::cout << "New Conenction"<< std::endl;
|
||||||
|
if (client_number < 0)
|
||||||
|
{
|
||||||
|
std::cout << "ERROR on accept"<< std::endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
std::thread socket_thread([this,client_number]{this->read_socket(client_number);});
|
std::thread socket_thread([this,client_number]{this->read_socket(client_number);});
|
||||||
socket_thread.detach();
|
socket_thread.detach();
|
||||||
}
|
}
|
||||||
@ -68,40 +68,40 @@ void Server::read_socket(int client)
|
|||||||
<< client
|
<< client
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
int n;
|
int n;
|
||||||
while (online)
|
char buffer[1024];
|
||||||
{
|
while (online &&
|
||||||
if (client < 0)
|
std::find(clients.begin(), clients.end(), client) != clients.end())
|
||||||
{
|
{
|
||||||
std::cout << "ERROR on accept"<< std::endl;
|
|
||||||
}
|
|
||||||
bzero(buffer, 256);
|
bzero(buffer, 1024);
|
||||||
n = read(client, buffer, 1024);
|
|
||||||
|
n = read(client, buffer, 1024-1);
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR reading from socket"<< std::endl;
|
std::cout << "ERROR reading from socket"<< std::endl;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
printf("Here is the message: %s\n", buffer);
|
printf("Here is the message: %s\n", buffer);
|
||||||
n = write(client, "I got your mesage\n", 18);
|
n = write(client, "I got your mesage\n", 18);
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR Writing socket"<< std::endl;
|
std::cout << "ERROR Writing socket"<< std::endl;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clients.erase(
|
||||||
|
std::remove(clients.begin(), clients.end(), client), clients.end());
|
||||||
|
close(client);
|
||||||
}
|
}
|
||||||
void Server::shutdown()
|
void Server::shutdown()
|
||||||
{
|
{
|
||||||
std::cout << "Server is shuting down"<< std::endl;
|
std::cout << "Server is shuting down"<< std::endl;
|
||||||
|
|
||||||
for (auto socket : clients){
|
|
||||||
std::cout
|
|
||||||
<< "Closing new socket :: "
|
|
||||||
<< socket
|
|
||||||
<< std::endl;
|
|
||||||
close(socket);
|
|
||||||
}
|
|
||||||
std::cout << "Closing server socket" << std::endl;
|
std::cout << "Closing server socket" << std::endl;
|
||||||
close(this->server_socket);
|
close(this->server_socket);
|
||||||
server_running = false;
|
server_running = false;
|
||||||
@ -112,4 +112,5 @@ void Server::off(){
|
|||||||
bool Server::running(){
|
bool Server::running(){
|
||||||
return this->server_running;
|
return this->server_running;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace betacore
|
} // namespace betacore
|
Loading…
x
Reference in New Issue
Block a user