summaryrefslogtreecommitdiff
path: root/server/client.cpp
diff options
context:
space:
mode:
authorUnknown <azeem@live.ru>2018-11-27 20:07:51 +0000
committerUnknown <azeem@live.ru>2018-11-27 20:07:51 +0000
commit0713c4ebe1e29d1076adb22ba5d8d5e562cecafc (patch)
tree92a7405453af6eb42e42f57171437039f706e9c1 /server/client.cpp
parentf0424e31f233776a93d13caa98a4422385aedcd0 (diff)
loader update
Diffstat (limited to 'server/client.cpp')
-rw-r--r--server/client.cpp86
1 files changed, 76 insertions, 10 deletions
diff --git a/server/client.cpp b/server/client.cpp
index 8039e65..2a0bfb7 100644
--- a/server/client.cpp
+++ b/server/client.cpp
@@ -1,5 +1,7 @@
#include "client.hpp"
+#include "server.hpp"
+/*
std::vector< byte > server::c_client::receive_message( ) {
std::vector< uint8_t > ret;
char buffer[ BUFFER_SIZE ]{ };
@@ -25,8 +27,40 @@ std::vector< byte > server::c_client::receive_message( ) {
return ret;
}
+*/
-bool server::c_client::send_message( byte* msg, size_t length ) {
+void server::c_client::kill( ) {
+ closesocket( m_socket );
+ printf( "%s disconnected\n", get_ip( ) );
+}
+
+std::string server::c_client::get_msg( ) {
+ std::string ret{ };
+ char buffer[ BUFFER_SIZE ]{ };
+ int received = 0;
+
+ while ( true ) {
+ received = recv( m_socket, buffer, BUFFER_SIZE, 0 );
+ if ( received < 0 )
+ break;
+
+ for ( int i{ }; i < received; ++i )
+ ret.push_back( buffer[ i ] );
+
+ if ( received < BUFFER_SIZE )
+ break;
+ }
+
+ if ( ret.size( ) ) {
+ decode_buffer( ( uint8_t* )ret.data( ), ret.size( ) );
+ // ret.push_back( 0 ); somehow broke things :/
+ ret.erase( ret.begin( ) );
+ }
+
+ return ret;
+}
+
+bool server::c_client::send_msg( byte* msg, size_t length ) {
auto buffer = std::make_unique< uint8_t[ ] >( length + 1 );
auto key = util::random_number( 0, 255 ) & 0xff;
@@ -41,7 +75,7 @@ bool server::c_client::send_message( byte* msg, size_t length ) {
int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 );
if( result == -1 ) {
-#if WIN32
+#if WIN
printf( "error sending message to %s: %d\n",
get_ip( ), WSAGetLastError( ) );
#else
@@ -54,11 +88,14 @@ bool server::c_client::send_message( byte* msg, size_t length ) {
return true;
}
-bool server::c_client::send_message( const char* msg ) {
+bool server::c_client::send_msg( const char* msg ) {
auto length = strlen( msg );
+ printf( "%d\n", length );
auto buffer = std::make_unique< uint8_t[ ] >( length + 1 );
auto key = util::random_number( 0, 255 ) & 0xff;
+ memset( buffer.get( ), 0, length+1 );
+
buffer[ 0 ] = key;
memcpy( buffer.get( ) + 1,
msg,
@@ -70,7 +107,7 @@ bool server::c_client::send_message( const char* msg ) {
int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 );
if ( result == -1 ) {
-#if WIN32
+#if WIN
printf( "error sending message to %s: %d\n",
get_ip( ), WSAGetLastError( ) );
#else
@@ -84,14 +121,43 @@ bool server::c_client::send_message( const char* msg ) {
}
bool server::c_client::handle( ) {
- char msg[ ] = "hello client";
- if( !send_message( ( byte* )( msg ), sizeof( msg ) ) )
+ /*
+ ALL TEST CODE BELOW.
+ */
+ auto hello_msg = get_msg( );
+ printf( "%s\n", hello_msg.c_str( ) );
+
+ if ( hello_msg != "hello" ) {
+ kill( );
+ return false;
+ }
+
+ auto username = get_msg( );
+ if ( username != "friendly" ) {
+ kill( );
return false;
+ }
+
+ printf( "correct username" );
+ send_msg( "correct username" );
- auto buf = receive_message( );
- if( buf.size( ) ) {
- printf( "message received: %s\n", buf.data( ) );
+ auto password = get_msg( );
+ if ( password != "nigger" ) {
+ kill( );
+ return false;
}
+ printf( "correct password" );
+ send_msg( "correct password" );
+
+ const char* games_list =
+R"(games:
+1: CSGO
+2: CSGO (test)
+3: Garry's Mod
+)";
+
+ send_msg( games_list );
+
return true;
-} \ No newline at end of file
+}