#define VCMI_DLL #pragma warning(disable:4355) #include "Connection.h" #include #include #include using namespace boost; using namespace boost::asio::ip; #define LOG(a) \ if(logging)\ out << a #if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MISPEB__)) || \ defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ defined(__sparc__) #define BIG_ENDIAN #else #define LIL_ENDIAN #endif void CConnection::init() { #ifdef LIL_ENDIAN myEndianess = true; #else myEndianess = false; #endif connected = true; std::string pom; //we got connection (*this) << std::string("Aiya!\n") << name << myEndianess; //identify ourselves (*this) >> pom >> pom >> contactEndianess; tlog0 << "Established connection with "<connect(*endpoint_iterator, error); if(!error) { init(); return; } else { tlog1 << "Problem with connecting: " << std::endl << error << std::endl; } endpoint_iterator++; } //we shouldn't be here - error handling connerror1: tlog1 << "Something went wrong... checking for error info" << std::endl; if(error) tlog1 << error < > * Socket, std::string Name ) :socket(Socket),io_service(&Socket->io_service()), name(Name)//, send(this), rec(this) { init(); } CConnection::CConnection(boost::asio::basic_socket_acceptor > * acceptor, boost::asio::io_service *Io_service, std::string Name) : name(Name)//, send(this), rec(this) { boost::system::error_code error = asio::error::host_not_found; socket = new tcp::socket(*io_service); acceptor->accept(*socket,error); if (error) { tlog1 << "Error on accepting: " << std::endl << error << std::endl; delete socket; throw "Can't establish connection :("; } init(); } int CConnection::write(const void * data, unsigned size) { //LOG("Sending " << size << " byte(s) of data" <close(); delete socket; socket = NULL; } } CSaveFile::CSaveFile( const std::string &fname ) :sfile(new std::ofstream(fname.c_str(),std::ios::binary)) { if(!(*sfile)) { tlog1 << "Error: cannot open to write " << fname << std::endl; sfile = NULL; } } CSaveFile::~CSaveFile() { delete sfile; } int CSaveFile::write( const void * data, unsigned size ) { sfile->write((char *)data,size); return size; } CLoadFile::CLoadFile( const std::string &fname ) :sfile(new std::ifstream(fname.c_str(),std::ios::binary)) { if(!(*sfile)) { tlog1 << "Error: cannot open to read " << fname << std::endl; sfile = NULL; } } CLoadFile::~CLoadFile() { delete sfile; } int CLoadFile::read( const void * data, unsigned size ) { sfile->read((char *)data,size); return size; }