From ec0322ce3608e13963855b13bcb44f86ffd4e5ce Mon Sep 17 00:00:00 2001 From: mordred Date: Thu, 25 Oct 2018 12:17:40 +0200 Subject: [PATCH] Fixed datreader --- deps/datReader/Exd.cpp | 78 +++++++++++----------- deps/datReader/ExdCat.cpp | 4 +- deps/datReader/ExdData.cpp | 1 - deps/datReader/Exh.cpp | 16 ++--- deps/datReader/GameData.cpp | 2 +- src/servers/sapphire_lobby/CMakeLists.txt | 38 ++++++----- src/servers/sapphire_lobby/ServerLobby.cpp | 15 +++-- src/servers/sapphire_lobby/client_http.hpp | 3 +- src/tools/exd_struct_test/CMakeLists.txt | 6 +- src/tools/exd_struct_test/main.cpp | 4 -- 10 files changed, 80 insertions(+), 87 deletions(-) diff --git a/deps/datReader/Exd.cpp b/deps/datReader/Exd.cpp index e4b866ac..b4513130 100644 --- a/deps/datReader/Exd.cpp +++ b/deps/datReader/Exd.cpp @@ -52,18 +52,18 @@ namespace xiv _exh = i_exh; _files = i_files; + // Iterates over all the files const uint32_t member_count = _exh->get_members().size(); for ( auto &file_ptr : _files ) { // Get a stream std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - xiv::utils::stream::vectorwrapbuf databuf(dataCpy); - std::istream stream(&databuf); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); // Extract the header and skip to the record indices - auto exd_header = extract< ExdHeader >( stream ); - stream.seekg( 0x20 ); + auto exd_header = extract< ExdHeader >( iss ); + iss.seekg( 0x20 ); // Preallocate and extract the record_indices const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); @@ -71,7 +71,7 @@ namespace xiv record_indices.reserve( record_count ); for ( uint32_t i = 0; i < record_count; ++i ) { - auto recordIndex = extract< ExdRecordIndex >( stream ); + auto recordIndex = extract< ExdRecordIndex >( iss ); _idCache[recordIndex.id] = ExdCacheEntry{file_ptr, recordIndex.offset}; } } @@ -93,8 +93,7 @@ namespace xiv auto& file_ptr = cacheEntryIt->second.file; std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - xiv::utils::stream::vectorwrapbuf databuf(dataCpy); - std::istream stream(&databuf); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); // Get the vector fields for the given record and preallocate it auto fields = _data[id]; @@ -104,7 +103,7 @@ namespace xiv { // Seek to the position of the member to extract. // 6 is because we have uint32_t/uint16_t at the start of each record - stream.seekg( cacheEntryIt->second.offset + 6 + member_entry.offset ); + iss.seekg( cacheEntryIt->second.offset + 6 + member_entry.offset ); // Switch depending on the type to extract switch( member_entry.type ) @@ -113,53 +112,53 @@ namespace xiv // Extract the offset to the actual string // Seek to it then extract the actual string { - auto string_offset = extract( stream, "string_offset", false ); - stream.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); - fields.emplace_back( utils::bparse::extract_cstring( stream, "string" ) ); + auto string_offset = extract( iss, "string_offset", false ); + iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); + fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); } break; case DataType::boolean: - fields.emplace_back( extract( stream, "bool" ) ); + fields.emplace_back( extract( iss, "bool" ) ); break; case DataType::int8: - fields.emplace_back( extract( stream, "int8_t" ) ); + fields.emplace_back( extract( iss, "int8_t" ) ); break; case DataType::uint8: - fields.emplace_back( extract( stream, "uint8_t" ) ); + fields.emplace_back( extract( iss, "uint8_t" ) ); break; case DataType::int16: - fields.emplace_back( extract( stream, "int16_t", false ) ); + fields.emplace_back( extract( iss, "int16_t", false ) ); break; case DataType::uint16: - fields.emplace_back( extract( stream, "uint16_t", false ) ); + fields.emplace_back( extract( iss, "uint16_t", false ) ); break; case DataType::int32: - fields.emplace_back( extract( stream, "int32_t", false ) ); + fields.emplace_back( extract( iss, "int32_t", false ) ); break; case DataType::uint32: - fields.emplace_back( extract( stream, "uint32_t", false ) ); + fields.emplace_back( extract( iss, "uint32_t", false ) ); break; case DataType::float32: - fields.emplace_back( extract( stream, "float", false ) ); + fields.emplace_back( extract( iss, "float", false ) ); break; case DataType::uint64: - fields.emplace_back( extract( stream, "uint64_t", false ) ); + fields.emplace_back( extract( iss, "uint64_t", false ) ); break; default: auto type = static_cast< uint16_t >( member_entry.type ); if( type < 0x19 || type > 0x20 ) throw std::runtime_error("Unknown DataType: " + std::to_string( type )); - uint64_t val = extract< uint64_t >( stream, "bool" ); + uint64_t val = extract< uint64_t >( iss, "bool" ); int32_t shift = type - 0x19; int32_t i = 1 << shift; val &= i; @@ -180,12 +179,11 @@ namespace xiv { // Get a stream std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - xiv::utils::stream::vectorwrapbuf databuf(dataCpy); - std::istream stream(&databuf); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); // Extract the header and skip to the record indices - auto exd_header = extract( stream ); - stream.seekg( 0x20 ); + auto exd_header = extract( iss ); + iss.seekg( 0x20 ); // Preallocate and extract the record_indices const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); @@ -193,7 +191,7 @@ namespace xiv record_indices.reserve( record_count ); for( uint32_t i = 0; i < record_count; ++i ) { - record_indices.emplace_back( extract( stream ) ); + record_indices.emplace_back( extract( iss ) ); } for( auto& record_index : record_indices ) @@ -207,7 +205,7 @@ namespace xiv { // Seek to the position of the member to extract. // 6 is because we have uint32_t/uint16_t at the start of each record - stream.seekg( record_index.offset + 6 + member_entry.offset ); + iss.seekg( record_index.offset + 6 + member_entry.offset ); // Switch depending on the type to extract switch( member_entry.type ) @@ -216,53 +214,53 @@ namespace xiv // Extract the offset to the actual string // Seek to it then extract the actual string { - auto string_offset = extract( stream, "string_offset", false ); - stream.seekg( record_index.offset + 6 + _exh->get_header().data_offset + string_offset ); - fields.emplace_back( utils::bparse::extract_cstring( stream, "string" ) ); + auto string_offset = extract( iss, "string_offset", false ); + iss.seekg( record_index.offset + 6 + _exh->get_header().data_offset + string_offset ); + fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); } break; case DataType::boolean: - fields.emplace_back( extract( stream, "bool" ) ); + fields.emplace_back( extract( iss, "bool" ) ); break; case DataType::int8: - fields.emplace_back( extract( stream, "int8_t" ) ); + fields.emplace_back( extract( iss, "int8_t" ) ); break; case DataType::uint8: - fields.emplace_back( extract( stream, "uint8_t" ) ); + fields.emplace_back( extract( iss, "uint8_t" ) ); break; case DataType::int16: - fields.emplace_back( extract( stream, "int16_t", false ) ); + fields.emplace_back( extract( iss, "int16_t", false ) ); break; case DataType::uint16: - fields.emplace_back( extract( stream, "uint16_t", false ) ); + fields.emplace_back( extract( iss, "uint16_t", false ) ); break; case DataType::int32: - fields.emplace_back( extract( stream, "int32_t", false ) ); + fields.emplace_back( extract( iss, "int32_t", false ) ); break; case DataType::uint32: - fields.emplace_back( extract( stream, "uint32_t", false ) ); + fields.emplace_back( extract( iss, "uint32_t", false ) ); break; case DataType::float32: - fields.emplace_back( extract( stream, "float", false ) ); + fields.emplace_back( extract( iss, "float", false ) ); break; case DataType::uint64: - fields.emplace_back( extract( stream, "uint64_t", false ) ); + fields.emplace_back( extract( iss, "uint64_t", false ) ); break; default: auto type = static_cast< uint16_t >( member_entry.type ); if( type < 0x19 || type > 0x20 ) throw std::runtime_error("Unknown DataType: " + std::to_string( type )); - uint64_t val = extract< uint64_t >( stream, "bool" ); + uint64_t val = extract< uint64_t >( iss, "bool" ); int32_t shift = type - 0x19; int32_t i = 1 << shift; val &= i; diff --git a/deps/datReader/ExdCat.cpp b/deps/datReader/ExdCat.cpp index 139a5863..ddab260e 100644 --- a/deps/datReader/ExdCat.cpp +++ b/deps/datReader/ExdCat.cpp @@ -28,11 +28,11 @@ namespace xiv _name(i_name) { //XIV_INFO(xiv_exd_logger, "Initializing Cat with name: " << i_name); - // creates the header .exh { auto header_file = i_game_data.getFile("exd/" + i_name + ".exh"); - _header = std::shared_ptr(new Exh(*header_file)); + _header = std::shared_ptr< Exh >( new Exh( *header_file ) ); + } for(auto language: _header->get_languages()) diff --git a/deps/datReader/ExdData.cpp b/deps/datReader/ExdData.cpp index 82fe02cb..3c4af47a 100644 --- a/deps/datReader/ExdData.cpp +++ b/deps/datReader/ExdData.cpp @@ -23,7 +23,6 @@ ExdData::ExdData(dat::GameData& i_game_data) try : xiv::utils::stream::vectorwrapbuf databuf(dataCpy); std::istream stream(&databuf); - // Iterates over the lines while skipping the first one std::string line; std::getline(stream, line); // extract first line EXLT,2 diff --git a/deps/datReader/Exh.cpp b/deps/datReader/Exh.cpp index 88e7c549..d4b3009c 100644 --- a/deps/datReader/Exh.cpp +++ b/deps/datReader/Exh.cpp @@ -3,6 +3,7 @@ #include "stream.h" #include "File.h" +#include using xiv::utils::bparse::extract; @@ -10,38 +11,37 @@ namespace xiv { namespace exd { - Exh::Exh(const dat::File& i_file) { // Get a stream from the file std::vector< char > dataCpy = i_file.get_data_sections().front(); - xiv::utils::stream::vectorwrapbuf databuf(dataCpy); - std::istream stream(&databuf); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); // Extract header and skip to member definitions - _header = extract(stream); - stream.seekg(0x20); + _header = extract(iss); + iss.seekg(0x20); // Extract all the members and feed the _members map for (auto i = 0; i < _header.field_count; ++i) { - auto member = extract(stream); + auto member = extract(iss); _members[member.offset] = member; _exh_defs.push_back( member ); + std::cout << "member_offset: " << member.offset << "\n"; } // Extract all the exd_defs _exd_defs.reserve(_header.exd_count); for (auto i = 0; i < _header.exd_count; ++i) { - _exd_defs.emplace_back(extract(stream)); + _exd_defs.emplace_back(extract(iss)); } // Extract all the languages _languages.reserve(_header.language_count); for (auto i = 0; i < _header.language_count; ++i) { - _languages.emplace_back(Language(extract(stream, "language"))); + _languages.emplace_back(Language(extract(iss, "language"))); } } diff --git a/deps/datReader/GameData.cpp b/deps/datReader/GameData.cpp index b405b3c7..9d19644a 100644 --- a/deps/datReader/GameData.cpp +++ b/deps/datReader/GameData.cpp @@ -57,7 +57,7 @@ GameData::GameData(const std::experimental::filesystem::path& path) try : m_path(path) { int maxExLevel = 0; - + // Determine which expansions are available while( std::experimental::filesystem::exists( std::experimental::filesystem::path( m_path.string() + "\\ex" + std::to_string( maxExLevel + 1) + "\\ex" + std::to_string( maxExLevel + 1) + ".ver" ) ) ) { diff --git a/src/servers/sapphire_lobby/CMakeLists.txt b/src/servers/sapphire_lobby/CMakeLists.txt index 4c7ddce6..4a919996 100644 --- a/src/servers/sapphire_lobby/CMakeLists.txt +++ b/src/servers/sapphire_lobby/CMakeLists.txt @@ -1,24 +1,28 @@ -cmake_minimum_required(VERSION 3.0.2) -cmake_policy(SET CMP0015 NEW) -project(Sapphire) +cmake_minimum_required( VERSION 3.0.2 ) +cmake_policy( SET CMP0015 NEW ) +project( Sapphire ) -file(GLOB SERVER_PUBLIC_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*") -file(GLOB SERVER_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}*.c*") +file( GLOB SERVER_PUBLIC_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*" ) +file( GLOB SERVER_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}*.c*" ) -add_executable(sapphire_lobby ${SERVER_PUBLIC_INCLUDE_FILES} ${SERVER_SOURCE_FILES}) +add_executable( sapphire_lobby ${SERVER_PUBLIC_INCLUDE_FILES} ${SERVER_SOURCE_FILES} ) -set_target_properties(sapphire_lobby PROPERTIES - CXX_STANDARD 17 - CXX_STANDARD_REQUIRED ON - CXX_EXTENSIONS ON - RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - ) +set_target_properties( sapphire_lobby + PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS ON + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + ) -target_link_libraries( sapphire_lobby PRIVATE common ) +target_link_libraries( sapphire_lobby + PRIVATE + common + stdc++fs ) cotire( sapphire_lobby ) diff --git a/src/servers/sapphire_lobby/ServerLobby.cpp b/src/servers/sapphire_lobby/ServerLobby.cpp index 119c99d9..92d8265c 100644 --- a/src/servers/sapphire_lobby/ServerLobby.cpp +++ b/src/servers/sapphire_lobby/ServerLobby.cpp @@ -20,9 +20,6 @@ #include #include -#include - -#include Core::Logger g_log; Core::Network::RestConnector g_restConnector; @@ -76,9 +73,13 @@ void ServerLobby::run( int32_t argc, char* argv[] ) "Lobby server running on " + m_pConfig->getValue< std::string >( "LobbyNetwork.ListenIp", "0.0.0.0" ) + ":" + m_pConfig->getValue< std::string >( "LobbyNetwork.ListenPort", "80" ) ); - boost::thread_group worker_threads; - worker_threads.create_thread( boost::bind( &Network::Hive::Run, hive.get() ) ); - worker_threads.join_all(); + std::vector< std::thread > threadGroup; + + threadGroup.emplace_back( std::bind( &Network::Hive::Run, hive.get() ) ); + + for( auto& thread : threadGroup ) + if( thread.joinable() ) + thread.join(); } @@ -99,7 +100,7 @@ bool ServerLobby::loadSettings( int32_t argc, char* argv[] ) try { - arg = boost::to_lower_copy( std::string( args[ i ] ) ); + std::transform( arg.begin(), arg.end(), arg.begin(), [](unsigned char c){ return std::tolower( c ); } ); val = std::string( args[ i + 1 ] ); // trim '-' from start of arg diff --git a/src/servers/sapphire_lobby/client_http.hpp b/src/servers/sapphire_lobby/client_http.hpp index 0d02d814..69b45563 100644 --- a/src/servers/sapphire_lobby/client_http.hpp +++ b/src/servers/sapphire_lobby/client_http.hpp @@ -1,7 +1,6 @@ #ifndef CLIENT_HTTP_HPP #define CLIENT_HTTP_HPP -#include #include #include @@ -68,7 +67,7 @@ namespace SimpleWeb { /// Set before calling request Config config; - std::shared_ptr request( const std::string& request_type, const std::string& path = "/", boost::string_ref content = "", + std::shared_ptr request( const std::string& request_type, const std::string& path = "/", std::string_view content = "", const std::map& header = std::map() ) { auto corrected_path = path; if( corrected_path == "" ) diff --git a/src/tools/exd_struct_test/CMakeLists.txt b/src/tools/exd_struct_test/CMakeLists.txt index 24eb5045..8f7281ec 100644 --- a/src/tools/exd_struct_test/CMakeLists.txt +++ b/src/tools/exd_struct_test/CMakeLists.txt @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 2.6) cmake_policy(SET CMP0015 NEW) project(Tool_ExdStructTest) -set(SAPPHIRE_BOOST_VER 1.63.0) -set(SAPPHIRE_BOOST_FOLDER_NAME boost_1_63_0) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/") @@ -24,10 +22,8 @@ set_target_properties(exd_struct_test PROPERTIES ) if (UNIX) - target_link_libraries (exd_struct_test common xivdat pthread mysqlclient dl z) + target_link_libraries (exd_struct_test common xivdat pthread mysqlclient dl z stdc++fs ) else() target_link_libraries (exd_struct_test common xivdat libmysql zlib1) endif() -target_link_libraries(exd_struct_test ${Boost_LIBRARIES} ${Boost_LIBRARIES}) - diff --git a/src/tools/exd_struct_test/main.cpp b/src/tools/exd_struct_test/main.cpp index 63ff31c1..a13d017b 100644 --- a/src/tools/exd_struct_test/main.cpp +++ b/src/tools/exd_struct_test/main.cpp @@ -11,10 +11,6 @@ #include #include #include -#include -#include -#include -#include #include #include