Added P1/P2 functionality
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
Compiler: g++
|
Compiler: MinGW g++ 6.3.0
|
||||||
Flags: -std=c++11 -static-libgcc -static-libstdc++ -lws2_32
|
Flags: -std=c++11 -static-libgcc -static-libstdc++ -lws2_32
|
||||||
|
Run ex: cardnet.exe -c1="G:\card0.txt" -c2="H:\card0.txt" -l1="G:\check.txt" -l2="H:\check.txt" -p="4500"
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
Fix regex validation, should be 16 character hexadecimal starting with e004
|
|
||||||
Fix validation for file checker file
|
Fix validation for file checker file
|
||||||
Change card0.txt file based on information given by client
|
Change card0.txt file based on information given by client (p1/p2)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -21,11 +21,12 @@ void exampleMessage();
|
|||||||
|
|
||||||
int main (int argc, char* argv[])
|
int main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
std::string file, check; // file = card0.txt ; check = check.txt
|
std::string card_p1, card_p2, check_p1, check_p2; // file = card0.txt ; check = check.txt
|
||||||
int port = 0; // port number to listen
|
int port = 0; // port number to listen
|
||||||
|
|
||||||
argh::parser cmdl; // command line parser
|
argh::parser cmdl; // command line parser
|
||||||
cmdl.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION);
|
cmdl.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION);
|
||||||
|
std::cout << std::endl; // space out for formatting
|
||||||
|
|
||||||
if(cmdl["-h"]) // help
|
if(cmdl["-h"]) // help
|
||||||
{
|
{
|
||||||
@@ -34,13 +35,21 @@ int main (int argc, char* argv[])
|
|||||||
|
|
||||||
for(auto& param: cmdl.params())
|
for(auto& param: cmdl.params())
|
||||||
{
|
{
|
||||||
if(!param.first.compare("f")) // card0 file
|
if(!param.first.compare("c1")) // card0 p1
|
||||||
{
|
{
|
||||||
file = param.second;
|
card_p1 = param.second;
|
||||||
}
|
}
|
||||||
if(!param.first.compare("c")) // checker file
|
if(!param.first.compare("c2")) // card0 p2
|
||||||
{
|
{
|
||||||
check = param.second;
|
card_p2 = param.second;
|
||||||
|
}
|
||||||
|
if(!param.first.compare("l1")) // checker p1
|
||||||
|
{
|
||||||
|
check_p1 = param.second;
|
||||||
|
}
|
||||||
|
if(!param.first.compare("l2")) // checker p2
|
||||||
|
{
|
||||||
|
check_p2 = param.second;
|
||||||
}
|
}
|
||||||
if(!param.first.compare("p")) // port
|
if(!param.first.compare("p")) // port
|
||||||
{
|
{
|
||||||
@@ -57,12 +66,14 @@ int main (int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(file == "" || check == "" || port == 0) // failed validation
|
if(card_p1 == "" || check_p1 == "" || port == 0) // failed validation
|
||||||
exampleMessage();
|
exampleMessage();
|
||||||
|
|
||||||
std::cout << "File:\t" << file << std::endl;
|
std::cout << "Card P1:\t" << card_p1 << std::endl;
|
||||||
std::cout << "Check:\t" << check << std::endl;
|
std::cout << "Card P2:\t" << card_p2 << std::endl;
|
||||||
std::cout << "Port:\t" << port << std::endl;
|
std::cout << "Check P1:\t" << check_p1 << std::endl;
|
||||||
|
std::cout << "Check P2:\t" << check_p2 << std::endl;
|
||||||
|
std::cout << "Port:\t\t" << port << std::endl;
|
||||||
|
|
||||||
// begin socket work - copy and pasted below (http://www.binarytides.com/code-tcp-socket-server-winsock/)
|
// begin socket work - copy and pasted below (http://www.binarytides.com/code-tcp-socket-server-winsock/)
|
||||||
WSADATA wsa;
|
WSADATA wsa;
|
||||||
@@ -71,7 +82,7 @@ int main (int argc, char* argv[])
|
|||||||
int max_clients = 30 , activity, addrlen, i, valread;
|
int max_clients = 30 , activity, addrlen, i, valread;
|
||||||
|
|
||||||
//size of our receive buffer, this is string length.
|
//size of our receive buffer, this is string length.
|
||||||
int MAXRECV = 16;
|
int MAXRECV = 19;
|
||||||
//set of socket descriptors
|
//set of socket descriptors
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
//1 extra for null character, string termination
|
//1 extra for null character, string termination
|
||||||
@@ -160,7 +171,7 @@ int main (int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
//inform user of socket number - used in send and receive commands
|
//inform user of socket number - used in send and receive commands
|
||||||
printf("New connection , socket fd is %d , ip is : %s , port : %d \n" , new_socket , inet_ntoa(address.sin_addr) , ntohs(address.sin_port));
|
printf("New connection - socket fd: %d , ip: %s , port: %d \n" , new_socket , inet_ntoa(address.sin_addr) , ntohs(address.sin_port));
|
||||||
|
|
||||||
/*//send new connection greeting message
|
/*//send new connection greeting message
|
||||||
if( send(new_socket, message, strlen(message), 0) != strlen(message) )
|
if( send(new_socket, message, strlen(message), 0) != strlen(message) )
|
||||||
@@ -230,7 +241,7 @@ int main (int argc, char* argv[])
|
|||||||
buffer[valread] = '\0';
|
buffer[valread] = '\0';
|
||||||
|
|
||||||
// the 'buffer' is the string to use to edit our card0.txt file
|
// the 'buffer' is the string to use to edit our card0.txt file
|
||||||
std::regex cardRegex("[e,E]004[(0-9)(a-f)(A-F)]{12}"); // 16 digit hexadecimal starting with e004
|
std::regex cardRegex("[p,P][1,2]:[e,E]004[(0-9)(a-f)(A-F)]{12}"); // 16 digit hexadecimal starting with e004; ex: p1:e004abcdef123456
|
||||||
if(std::regex_match(buffer, cardRegex))
|
if(std::regex_match(buffer, cardRegex))
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -239,7 +250,8 @@ int main (int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
else // don't do anything if not valid
|
else // don't do anything if not valid
|
||||||
{
|
{
|
||||||
std::cout << "Data recieved is not a valid game card" << std::endl;
|
// this needs work, it may get an extra character in the buffer and goes in here
|
||||||
|
//std::cout << "Data recieved is not a valid game card" << std::endl;
|
||||||
}
|
}
|
||||||
// check if the check file exists
|
// check if the check file exists
|
||||||
//if(std::ifstream(check))
|
//if(std::ifstream(check))
|
||||||
@@ -269,10 +281,13 @@ int main (int argc, char* argv[])
|
|||||||
void exampleMessage() // help menu
|
void exampleMessage() // help menu
|
||||||
{
|
{
|
||||||
std::cout << "Availble options:" << std::endl;
|
std::cout << "Availble options:" << std::endl;
|
||||||
std::cout << " -f\tLocation of card0.txt file" << std::endl;
|
std::cout << " -c1\tLocation of player 1's card0.txt file" << std::endl;
|
||||||
std::cout << " -c\tLocation of check file" << std::endl;
|
std::cout << " -c2\tLocation of player 2's card0.txt file" << std::endl;
|
||||||
|
std::cout << " -l1\tLocation of player 1's check file" << std::endl;
|
||||||
|
std::cout << " -l2\tLocation of player 2's check file" << std::endl;
|
||||||
std::cout << " -p\tPort number to listen on (1-65535)" << std::endl;
|
std::cout << " -p\tPort number to listen on (1-65535)" << std::endl;
|
||||||
std::cout << std::endl << "Example usage: cardnet.exe -f G:\\card0.txt -c G:\\check.txt -p 4500" << std::endl;
|
std::cout << std::endl << "Ex (1P): cardnet.exe -c1=\"G:\\card0.txt\" -l1=\"G:\\check.txt\" -p=\"4500\"" << std::endl;
|
||||||
|
std::cout << "Ex (2P): cardnet.exe -c1=\"G:\\card0.txt\" -c2=\"H:\\card0.txt\" -l1=\"G:\\check.txt\" -l2=\"H:\\check.txt\" -p=\"4500\"" << std::endl;
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
}
|
}
|
Binary file not shown.
Reference in New Issue
Block a user