Added code to parse command-line flags, to determine whether the game was started in client or server mode, and call relevant functions to encode or decode address / key

master
Aadhavan Srinivasan 8 months ago
parent bad8d4a7cc
commit cb958d2749

@ -5,7 +5,9 @@
#include "paddle.hpp"
#include "ball.hpp"
#include "math-helpers.hpp"
#include "connect-helpers.hpp"
#include "client.hpp"
#include "server.hpp"
/* Global variables used to instantiate structs */
const int WIDTH = 1500;
@ -39,6 +41,33 @@ raylib::Vector2 changeVelocityAfterCollision(Paddle paddle, Ball ball) {
return raylib::Vector2(new_x_vel, new_y_vel);
}
/* This function checks the command-line arguments passed to the program.
It then decides whether the game is in Server or Client mode (or neither), and
instantiates the appropriate object. The (uninitialized) objects are passed to the
function as pointers. */
void check_server_client(int argc, char** argv, Server* server, Client* client) {
std::string connect_code;
std::vector<std::string> addr_port; /* Vector to store (IPv4) address and port */
if (argc < 2) { /* Game was not started in client or server mode */
return;
}
/* GAME STARTED IN CLIENT MODE */
if (strcmp(argv[1],"-C") == 0) {
if (argc < 3) { /* No address was provided */
throw EXCEPT_TOOFEWARGS;
}
connect_code = std::string(argv[2]); /* The connect code is a special string, that contains the server address and port. It is given by the server. */
addr_port = code::decode(connect_code);
client = new Client(4, 'T', addr_port[0].data(), std::stoi(addr_port[1]));
}
return;
}
int main(int argc, char** argv) {
/* Initialize window and other variables */
SetTraceLogLevel(LOG_NONE);
@ -50,17 +79,18 @@ int main(int argc, char** argv) {
bool game_started = false;
srand(std::time(NULL));
bool in_server_mode = false;
Server server;
Client client;
if (argc > 1 && strcmp(argv[1],"server") == 0) {
try {
client = Client(4,'T',"127.0.0.1",6500);
in_server_mode = true;
}
catch (int e) {
std::cout << "Unable to connect to the given address." << std::endl;
try {
check_server_client(argc, argv, &server, &client);
} catch(int e) {
if (e == EXCEPT_TOOFEWARGS) {
std::cout << "Started in client mode, but no address was specified." << std::endl;
return -1;
}
}
/* Instantiate Paddle and Ball objects */
Paddle pad1 = Paddle(10, (HEIGHT / 2) - (RECT_H / 2), RECT_W, RECT_H);
Paddle pad2 = Paddle(window.GetWidth() - RECT_W - 10, (HEIGHT / 2) - (RECT_H / 2), RECT_W, RECT_H);

Loading…
Cancel
Save