diff --git a/Code/Network/NetworkDependencies/Connection.cpp b/Code/Network/NetworkDependencies/Connection.cpp new file mode 100644 index 00000000..31e53110 --- /dev/null +++ b/Code/Network/NetworkDependencies/Connection.cpp @@ -0,0 +1,141 @@ +#include "Connection.h" + +Connection::Connection() +{ + mySocket = NULL; +} + +Connection::Connection(int socket) +{ + mySocket = socket; +} + +Connection::~Connection() +{ + mySocket = NULL; + + if(socket != NULL) + { + closesocket( mySocket ); + mySocket = NULL; + } +} + +bool Connection::Connect(unsigned short port , const char serverName[]) +{ + mySocket = socket(AF_INET, SOCK_STREAM, 0); + if(mySocket == SOCKET_ERROR) + { + //error opening socket + return false; + } + + + struct hostent *hostEntry; + if((hostEntry = gethostbyname(serverName)) == NULL) + { + //couldn't find host + return false; + } + struct sockaddr_in server; + server.sin_family = AF_INET; + server.sin_port = htons(port); + server.sin_addr.s_addr = *(unsigned long*) hostEntry->h_addr; + + while(1) + { + if(connect(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) + { + //Error connecting to server + return false; + } + + else + { + break; + } + Sleep(10); + } + + //connection succesfull! + return true; + + +} + +bool Connection::InitiateServer(unsigned short port) +{ + int mySocket = socket(AF_INET, SOCK_STREAM, 0); + if(mySocket == SOCKET_ERROR) + { + //Error opening socket! + return false; + } + + struct sockaddr_in server; + server.sin_family = AF_INET; + server.sin_port = htons(port); + server.sin_addr.s_addr = INADDR_ANY; + + if(bind(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) + { + //Bind failed!; + closesocket(mySocket); + return false; + } + + //not our Listen function! + if(listen(mySocket, 5) == SOCKET_ERROR) + { + //"Listen failed! + closesocket(mySocket); + return -1; + } + + //Server started! + return mySocket; +} + +void Connection::Disconnect() +{ + closesocket(mySocket); +} + +bool Connection::Send(int socket , const char message[]) +{ + int nBytes; + unsigned long messageSize = strlen(message); + + if((nBytes = send(socket, message , messageSize)) == SOCKET_ERROR) + { + //Send failed! + return false; + } + + return true; +} + +int Recieve(int socket, char message[]) +{ + int nBytes; + nBytes = recv(socket, message , 255, 0); + if(nBytes == SOCKET_ERROR) + { + //Recv failed + return -1; + } + + return 1; +} + +int Connection::Listen() +{ + int clientSocket; + if((clientSocket = accept(mySocket, NULL, NULL)) == INVALID_SOCKET) + { + //failed + return -1; + } + + return clientSocket; +} diff --git a/Code/Network/NetworkDependencies/Connection.h b/Code/Network/NetworkDependencies/Connection.h new file mode 100644 index 00000000..96dda6fd --- /dev/null +++ b/Code/Network/NetworkDependencies/Connection.h @@ -0,0 +1,28 @@ +////////////////////////////////// +// Created by Sam Svensson 2013 // +////////////////////////////////// + +#ifndef NETWORK_DEPENDENCIES_CONNECTION_H +#define NETWORK_DEPENDENCIES_CONNECTION_H + +#include "IConnection.h" + +class Connection : public IConnection +{ + private: + int mySocket; + + public: + Connection(); + Connection(int socket); + ~Connection(); + + virtual bool Connect( unsigned short port , const char serverName[] ); + virtual bool InitiateServer( unsigned short port ); + virtual void Disconnect(); + virtual bool Send(int socket , const char message[]); + virtual int Recieve(int socket); + virtual int Listen(); +}; + +#endif \ No newline at end of file diff --git a/Code/Network/NetworkDependencies/IConnection.h b/Code/Network/NetworkDependencies/IConnection.h new file mode 100644 index 00000000..660fa487 --- /dev/null +++ b/Code/Network/NetworkDependencies/IConnection.h @@ -0,0 +1,22 @@ +////////////////////////////////// +// Created by Sam Svensson 2013 // +////////////////////////////////// + +#ifndef NETWORK_DEPENDENCIES_I_CONNECTION_H +#define NETWORK_DEPENDENCIES_I_CONNECTION_H + +#include +#include + +class IConnection +{ + public: + virtual bool Connect( unsigned short port, const char serverName[] ) = 0; + virtual bool InitiateServer( unsigned short port ) = 0; + virtual void Disconnect() = 0; + virtual bool Send(int socket , const char message[]); = 0; + virtual int Recieve( int socket ) = 0; + virtual int Listen() = 0; +}; + +#endif \ No newline at end of file diff --git a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj index 0860584c..4c42ba1d 100644 --- a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj +++ b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj @@ -151,8 +151,13 @@ + + + + + diff --git a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters index 8755a3a0..57da6b71 100644 --- a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters +++ b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters @@ -18,5 +18,16 @@ Source Files + + Source Files + + + + + Header Files + + + Header Files + \ No newline at end of file