Exemple #1
0
	void AppendBinaryFile(const tstring & file, schar * buffer, uint32 size,
			DirectoryMode directory)
	{
#ifdef ANDROID
		bool succesfull = directory != DirectoryMode::assets;
		ASSERT(succesfull, _T("Android doesn't support writing to a binary file in the assets directory."));
		if(succesfull)
		{
			auto app = StarEngine::GetInstance()->GetAndroidApp();
			sstringstream strstr;
			if(directory == DirectoryMode::internal)
			{
				strstr << app->activity->internalDataPath << "/";
			}
			else if(directory == DirectoryMode::external)
			{
				strstr << app->activity->internalDataPath << "/";
			}
			strstr << string_cast<sstring>(file);
			sofstream binary_file(strstr.str(),
					std::ios::out | std::ios::binary | std::ios::app);
			succesfull = binary_file.is_open();
			ASSERT(succesfull, (_T("Couldn't open the binary file '") +
					strstr.str() + _T("'.")).c_str());
			if (succesfull)
			{
				for(uint32 i = 0 ; i < size ; ++i)
				{
					binary_file << buffer[i];
				}
				binary_file.close();
			}
		}
#else
		tstring file_path(EMPTY_STRING);
		Filepath::GetCorrectPath(file, file_path, directory);
		sofstream binary_file(file_path,
				std::ios::out | std::ios::binary | std::ios::app);
		bool succes = binary_file.is_open();
		ASSERT(succes, (_T("Couldn't open the binary file '") +
				file_path + _T("'.")).c_str());
		if (succes)
		{
			for(uint32 i = 0 ; i < size ; ++i)
			{
				binary_file << buffer[i];
			}
			binary_file.close();
		}
#endif
	}
Exemple #2
0
bool EagleeyeIO::write(const Matrix<T>& mat,std::string id,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case WRITE_BINARY_MODE:
		{
			std::ofstream binary_file(file_path.c_str(),std::ios::binary);

			if (!binary_file)
			{
				return false;
			}
			else
			{
				//write id
				int str_len=id.length();
				binary_file.write((char*)(&str_len),sizeof(int));
				binary_file.write(id.c_str(),sizeof(char)*str_len);

				//write matrix data
				int rows=mat.rows();
				int cols=mat.cols();

				binary_file.write((char*)(&rows),sizeof(int));
				binary_file.write((char*)(&cols),sizeof(int));

				for (int i=0;i<rows;++i)
				{
					binary_file.write(mat.row(i),sizeof(T)*cols);
				}

				binary_file.close();

				return true;
			}

		}
	case WRITE_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ofstream asc_file(file_path.c_str());

			if (asc_file)
			{
				asc_file<<id<<'\n';
				asc_file<<mat;

				asc_file.close();
				return true;
			}
			return false;
		}
	}

	return false;
}
Exemple #3
0
bool EagleeyeIO::write(const DynamicArray<T>& arr,std::string id,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case WRITE_BINARY_MODE:
		{
			std::ofstream binary_file(file_path.c_str(),std::ios::binary);

			if (!binary_file)
			{
				return false;
			}
			else
			{
				//write id
				int str_len=id.length();
				binary_file.write((char*)(&str_len),sizeof(int));
				binary_file.write(id.c_str(),sizeof(char)*str_len);

				//write array data
				int arr_size=arr.size();
				binary_file.write((char*)(&arr_size),sizeof(int));
				binary_file.write((char*)arr.dataptr(),sizeof(T)*arr_size);

				binary_file.close();

				return true;
			}

		}
	case WRITE_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ofstream asc_file(file_path.c_str());

			if (asc_file)
			{
				asc_file<<id<<'\n';
				asc_file<<arr;
				
				asc_file.close();
				return true;
			}
			return false;
		}
	default:
		{
			return false;
		}
	}

	return false;
}
Exemple #4
0
bool EagleeyeIO::read(DynamicArray<T>& arr,std::string& id,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case READ_BINARY_MODE:
		{
			std::ifstream binary_file(file_path.c_str(),std::ios::binary);

			if (!binary_file)
			{
				return false;
			}
			else
			{
				//write id						
				int str_len;
				binary_file.read((char*)(&str_len),sizeof(int));
				char* id_data=new char[str_len];
				binary_file.read(id_data,sizeof(char)*str_len);

				id=std::string(id_data);
				delete[] id_data;

				//write array data
				int arr_size=arr.size();				
				binary_file.read((char*)(&arr_size),sizeof(int));
				arr=DynamicArray(arr_size);
				binary_file.read((char*)(arr.dataptr()),sizeof(T)*arr_size);

				binary_file.close();

				return true;
			}

		}
	case READ_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ifstream ascii_file(file_path.c_str());
			file_path>>id;
			file_path>>arr;
			ascii_file.close();
			return false;
		}
	default:
		{
			return false;
		}
	}

	return false;
}
Exemple #5
0
bool EagleeyeIO::read(Matrix<T>& mat,std::string& id,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case READ_BINARY_MODE:
		{
			std::ifstream binary_file(file_path.c_str(),std::ios::binary);

			if (!binary_file)
			{
				return false;
			}
			else
			{
				//write id						
				int str_len;
				binary_file.read((char*)(&str_len),sizeof(int));
				char* id_data=new char[str_len];
				binary_file.read(id_data,sizeof(char)*str_len);

				id=std::string(id_data);
				delete[] id_data;
				
				//read mat data
				int rows;
				int cols;
				binary_file.read((char*)(&rows),sizeof(int));
				binary_file.read((char*)(&cols),sizeof(int));

				mat=Matrix<T>(rows*cols);

				binary_file.read((char*)(mat.dataptr()),sizeof(T)*rows*cols);
				binary_file.close();

				return true;
			}
		}
	case READ_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ifstream ascii_file(file_path.c_str());
			ascii_file>>id;
			ascii_file>>mat;

			ascii_file.close();
			return false;
		}
	}

	return false;
}
Exemple #6
0
bool EagleeyeIO::read(DynamicArray<T>& arr,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case READ_BINARY_MODE:
		{
			std::ifstream binary_file(file_path.c_str(),std::ios::binary);

			if (!binary_file)
			{
				return false;
			}
			else
			{
				//write array data
				int arr_size;		
				binary_file.read((char*)(&arr_size),sizeof(int));
				arr=DynamicArray<T>(arr_size);
				binary_file.read((char*)(arr.dataptr()),sizeof(T)*arr_size);

				binary_file.close();

				return true;
			}
		}
	case READ_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ifstream ascii_file(file_path.c_str());
			if (!ascii_file)
			{
				return false;
			}
			else
			{
				ascii_file>>arr;
				return true;
			}
		}
	default:
		{
			return false;
		}
	}

	return false;
}
Exemple #7
0
bool EagleeyeIO::read(Matrix<T>& mat,std::string file_path,EagleeyeIOMode iomode)
{
	switch(iomode)
	{
	case READ_BINARY_MODE:
		{
			std::locale::global(std::locale(""));
			std::ifstream binary_file(file_path.c_str(),std::ios::binary);
			if (!binary_file)
			{
				return false;
			}
			else
			{
				//read mat data
				int rows;
				int cols;
				binary_file.read((char*)(&rows),sizeof(int));
				binary_file.read((char*)(&cols),sizeof(int));
				mat=Matrix<T>(rows,cols);

				binary_file.read((char*)(mat.dataptr()),sizeof(T)*rows*cols);
				binary_file.close();

				return true;
			}
		}
	case READ_ASCII_MODE:
		{
			std::locale::global( std::locale( "",std::locale::all^std::locale::numeric ) );
			std::ifstream ascii_file(file_path.c_str());
			ascii_file>>mat;

			ascii_file.close();
			return false;
		}
	}

	return false;
}
void content_manager::load_binary( u32 str_hash, void* ptr,  type_name type )
{
	if( type == type_name::geometry )
	{
		crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		CRAP_ASSERT_DEBUG( binary_file.readable(), "Cannot read binary file." );

		geometry_content* idx_mem = (geometry_content*) ptr;
		
		u8* buffer = (u8*)_content_pool->allocate( (size_t32)binary_file.size() );
		binary_file.read_bytes( buffer, (size_t32)binary_file.size() );
		binary_file.close();

		u32 offset = 0;
		memcpy( &idx_mem->indices_size, buffer + offset, sizeof(u32) );
		offset += sizeof(u32);
		memcpy( &idx_mem->vertices_size, buffer + offset, sizeof(u32) );
		offset += sizeof(u32);

		idx_mem->indices = (u16*)_content_pool->allocate(sizeof(u16)*idx_mem->indices_size);
		idx_mem->positions = (crap::vector3f*)_content_pool->allocate( sizeof(crap::vector3f)*idx_mem->vertices_size );
		idx_mem->uvs = (crap::vector2f*)_content_pool->allocate( sizeof(crap::vector2f)*idx_mem->vertices_size );
		idx_mem->normals = (crap::vector3f*)_content_pool->allocate( sizeof(crap::vector3f)*idx_mem->vertices_size );
		idx_mem->tangents = (crap::vector3f*)_content_pool->allocate( sizeof(crap::vector3f)*idx_mem->vertices_size );
		idx_mem->binormals = (crap::vector3f*)_content_pool->allocate( sizeof(crap::vector3f)*idx_mem->vertices_size );

		memcpy( idx_mem->indices, buffer + offset, sizeof(u16)*idx_mem->indices_size );
		offset += sizeof(u16)*idx_mem->indices_size;
		memcpy( idx_mem->positions, buffer + offset, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( idx_mem->uvs, buffer + offset, sizeof(crap::vector2f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector2f)*idx_mem->vertices_size;
		memcpy( idx_mem->normals, buffer + offset, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( idx_mem->tangents, buffer + offset, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( idx_mem->binormals, buffer + offset, sizeof(crap::vector3f)*idx_mem->vertices_size );
		
		_content_pool->deallocate( buffer );
		return;
	}

	if( type == type_name::texture )
	{
		CRAP_ASSERT_ERROR("Not implemented yet");
		/*crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		CRAP_ASSERT_DEBUG( binary_file.readable(), "Cannot read binary file." );

		texture_content* tex_mem = (texture_content*) ptr;
		
		u8* buffer = (u8*)_content_pool->allocate( (size_t32)binary_file.size() );
		binary_file.read_bytes( buffer, (size_t32)binary_file.size() );
		binary_file.close();

		u32 offset = 0;
		memcpy( &tex_mem->width, buffer + offset, sizeof(i32) );
		offset += sizeof(i32);
		memcpy( &tex_mem->height, buffer + offset, sizeof(i32) );
		offset += sizeof(i32);
		memcpy( &tex_mem->format, buffer + offset, sizeof(i32) );
		offset += sizeof(i32);
		memcpy( &tex_mem->bpp, buffer + offset, sizeof(i32) );
		offset += sizeof(i32);

		tex_mem->data = (u8*)_content_pool->allocate( tex_mem->width * tex_mem->height * tex_mem->bpp );
		memcpy( tex_mem->data, buffer + offset, tex_mem->width * tex_mem->height * tex_mem->bpp );

		_content_pool->deallocate( buffer );*/

		return;
	}

	if( type == type_name::shader )
	{
		crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		CRAP_ASSERT_DEBUG( binary_file.readable(), "Cannot read binary file." );

		shader_content* sdr_mem = (shader_content*) ptr;
		
		u8* buffer = (u8*)_content_pool->allocate( (size_t32)binary_file.size() );
		binary_file.read_bytes( buffer, (size_t32)binary_file.size() );
		binary_file.close();

		u32 offset = 0;
		memcpy( &sdr_mem->size, buffer + offset, sizeof(size_t32) );
		offset += sizeof(size_t32);

		sdr_mem->data = (c8*)_content_pool->allocate( sdr_mem->size );
		memcpy( &sdr_mem->data, buffer + offset, sdr_mem->size );

		_content_pool->deallocate( buffer );

		return;
	}
}
void content_manager::save_binary( u32 str_hash, void* ptr, type_name type )
{
	if( type == type_name::geometry )
	{
		crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		CRAP_ASSERT_DEBUG( binary_file.writeable(), "Cannot wirte binary file." );

		geometry_content* idx_mem = (geometry_content*) ptr;

		u32 total_size = sizeof(u32)*2 + sizeof(u16)*idx_mem->indices_size + 
			sizeof(crap::vector3f)*4*idx_mem->vertices_size + sizeof(crap::vector2f)*idx_mem->vertices_size;
		u8* buffer = (u8*)_content_pool->allocate( total_size );

		u32 offset = 0;
		memcpy( buffer + offset, &idx_mem->indices_size, sizeof(u32) );
		offset += sizeof(u32);
		memcpy( buffer + offset, &idx_mem->vertices_size, sizeof(u32) );
		offset += sizeof(u32);
		memcpy( buffer + offset, idx_mem->indices, sizeof(u16)*idx_mem->indices_size );
		offset += sizeof(u16)*idx_mem->indices_size;
		memcpy( buffer + offset, idx_mem->positions, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( buffer + offset, idx_mem->uvs, sizeof(crap::vector2f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector2f)*idx_mem->vertices_size;
		memcpy( buffer + offset, idx_mem->normals, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( buffer + offset, idx_mem->tangents, sizeof(crap::vector3f)*idx_mem->vertices_size );
		offset += sizeof(crap::vector3f)*idx_mem->vertices_size;
		memcpy( buffer + offset, idx_mem->binormals, sizeof(crap::vector3f)*idx_mem->vertices_size );

		binary_file.write_bytes( buffer, total_size );
		binary_file.close();

		_content_pool->deallocate( buffer );
		return;
	}

	if( type == type_name::texture )
	{
		CRAP_ASSERT_ERROR("Not implemented yet");
		//crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		//CRAP_ASSERT_DEBUG( binary_file.writeable(), "Cannot wirte binary file." );

		//texture_content* tex_mem = (texture_content*) ptr;

		//u32 total_size = sizeof(texture_content) + tex_mem->width * tex_mem->height * tex_mem->bpp;
		//u8* buffer = (u8*)_content_pool->allocate( total_size );

		//u32 offset = 0;
		//memcpy( buffer + offset, &tex_mem->width, sizeof(i32) );
		//offset += sizeof(i32);
		//memcpy( buffer + offset, &tex_mem->height, sizeof(i32) );
		//offset += sizeof(i32);
		//memcpy( buffer + offset, &tex_mem->format, sizeof(i32) );
		//offset += sizeof(i32);
		//memcpy( buffer + offset, &tex_mem->bpp, sizeof(i32) );
		//offset += sizeof(i32);
		//memcpy( buffer + offset, tex_mem->data, tex_mem->width * tex_mem->height * tex_mem->bpp );

		//binary_file.write_bytes( buffer, total_size );
		//binary_file.close();

		//_content_pool->deallocate( buffer );
		//return;
	}

	if( type == type_name::shader )
	{
		crap::file binary_file( BINARY_PATH + crap::convert<u32, crap::string256>(str_hash) );
		CRAP_ASSERT_DEBUG( binary_file.writeable(), "Cannot wirte binary file." );

		shader_content* sdr_mem = (shader_content*) ptr;

		u32 total_size = sizeof(shader_content) + sdr_mem->size;
		u8* buffer = (u8*)_content_pool->allocate( total_size );

		u32 offset = 0;
		memcpy( buffer + offset, &sdr_mem->size, sizeof(size_t32) );
		offset += sizeof(size_t32);
		memcpy( buffer + offset, &sdr_mem->data, sdr_mem->size );

		binary_file.write_bytes( buffer, total_size );
		binary_file.close();

		_content_pool->deallocate( buffer );
		return;
	}
}
 void OfficeDriveAPI::updateDaemonCallback(const FB::JSObjectPtr& callback, bool success,
    const FB::HeaderMap& headers, const boost::shared_array<uint8_t>& data, const size_t size) {
   
 int ret = -1;

 if (success) {
        std::string dstr(reinterpret_cast<const char*>(data.get()), size);
		// m_host->htmlLog(std::string(headers));
		m_host->htmlLog("Downloading new OfficeDriveClient.jar");
		
		
		char jarFile[512];
		memset(&jarFile, 0, sizeof(jarFile));
		
		char * appData;	
#ifdef FB_WIN
		appData = getenv("LOCALAPPDATA");
		sprintf(jarFile, "%s\\OfficeDrive\\OfficeDriveClient.jar", appData);
#endif
#ifdef FB_MACOSX
		appData = getenv("HOME");
		sprintf(jarFile, "%s/LocalAppData/OfficeDrive/OfficeDriveClient.jar", appData);
		/*
		char launchAgent[512];
		char launchAgent_src[512];
		memset(&launchAgent, 0, sizeof(launchAgent));		
		memset(&launchAgent, 0, sizeof(launchAgent_src));		
		sprintf(launchAgent, "%s/Library/LaunchAgents/net.officedrive.agent.plist", appData);
		sprintf(launchAgent, "%s/LocalAppData/OfficeDrive/net.officedrive.agent.plist", appData);
		boost::filesystem::fstream xml_file_in(launchAgent_src ,std::ios::in);
		boost::filesystem::fstream xml_file_out(launchAgent ,std::ios::out);
		xml_file_out.write(reinterpret_cast<const char*>(xml_file_in.get()), sizeof(xml_file_in));
		xml_file_out.close();
		xml_file_in.close();
*/

#endif
		boost::filesystem::fstream binary_file(jarFile ,std::ios::out|std::ios::binary); 
		binary_file.write(reinterpret_cast<const char*>(data.get()), size);
		binary_file.close();
		m_host->htmlLog("Finished downloading: " + std::string(jarFile));
		ret = size;
		callback->Invoke("",FB::variant_list_of(ret));

//#ifdef FB_MACOSX
//	<key>LimitLoadToSessionType</key>
//	<string>Aqua</string>
//	<key>ProgramArguments</key>
//	<array>
//	  <string>/usr/bin/java</string>
//	  <string>-jar</string>
//	  <string>LocalAppData/OfficeDrive/OfficeDriveClient.jar</string>
//	</array>
//	<key>RunAtLoad</key>
//	<true/>
//	<key>StartInterval</key>
//	<integer>1337</integer>
//	<key>StandardErrorPath</key>
//	<string>OfficeDriveClient.stderr.log</string>
//	<key>StandardOutPath</key>
//	<string>OfficeDriveClient.stdout.log</string>
//</dict>
//</plist>	
//#endif
//
    } else {
callback->Invoke("",FB::variant_list_of(ret));
 
// The request could not be completed
    }
 }