rXpSwiss

Members
  • Content count

    63
  • Joined

  • Last visited

Community Reputation

216 Neutral

About rXpSwiss

  • Rank
    Member

Personal Information

  • Interests
    Audio
    Programming
  1. ZLib compression from UE4 to Boost ?

    This is what I am doing : Preparing my message, serializing it as a JSON (which is UTF8), making the JSON string ANSI, compressing it, sending it, receiving it, decompressing it and putting it back into a string so I can inflate my Message object.
  2. ZLib compression from UE4 to Boost ?

    How ? I have 1 byte per character and if I use UTF8 I get between 1 to 4 bytes. Knowing that, for now, I only have letter number and basic character how am I adding size ?
  3. ZLib compression from UE4 to Boost ?

    I encoded into ansi before the compression not after.
  4. ZLib compression from UE4 to Boost ?

    Well I got it to work by linking and using the raw zlib library on the UE4 client, I also had to encode into ANSI char for my server to be able to convert it into std::string (I will need to look into utf8 on the server but not for now since I don't send any text message yet). For those interested I will give my solution for the compression decompression here and then you can tweak it. Client UE4 : First of all build the zlib library and I choose the same version as the one in my current version of UE4 (4.18), so I used zlib 1.2.8. Then I built it manually on windows, but since it's cmake it wont be much different on linux or osx : mkdir C:\Builds\zlib; cd C:\Builds\zlib cmake -G "Visual Studio 15 2017" -A x64 C:\local\zlib-x.x.x cmake --build . Then you need to tell UE4 you want to link it into your project (*.build.cs) : PublicAdditionalLibraries.Add(@"PATHTOPROJECT/Binaries/Win64/zlibd.lib"); (if anyone knows how to have the path to the project dynamically it would be nice) Compress on the client : void MessageManager::compressString(const FString &json, TArray<uint8> &compressedData) { //convert into ANSI to be able to cast it into std::string for now auto jsonANSI = StringCast<ANSICHAR>(*json); TArray<uint8> UncompressedBinaryArray((uint8*)jsonANSI.Get(), jsonANSI.Length()); compressedData.SetNum(UncompressedBinaryArray.Num() * 1023, true); //int ret; z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; strm.avail_in = UncompressedBinaryArray.Num(); strm.next_in = (Bytef *)UncompressedBinaryArray.GetData(); strm.avail_out = compressedData.Num(); strm.next_out = (Bytef *)compressedData.GetData(); // the actual compression work. deflateInit(&strm, Z_DEFAULT_COMPRESSION); deflate(&strm, Z_FINISH); deflateEnd(&strm); // Shrink the array to minimum size compressedData.RemoveAt(strm.total_out, compressedData.Num() - strm.total_out, true); } Decompress on the client : FString MessageManager::decompressString(TArray<uint8> &compressedData) { TArray<uint8> UncompressedBinaryArray; UncompressedBinaryArray.SetNum(compressedData.Num() * 1032); //int ret; z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; strm.avail_in = compressedData.Num(); strm.next_in = (Bytef *)compressedData.GetData(); strm.avail_out = UncompressedBinaryArray.Num(); strm.next_out = (Bytef *)UncompressedBinaryArray.GetData(); // the actual DE-compression work. inflateInit(&strm); inflate(&strm, Z_FINISH); inflateEnd(&strm); return FString((ANSICHAR*)UncompressedBinaryArray.GetData()); } On the server (C++ using boost and STD) this is how to compress : void MessageManager::compressString(const std::string &data, std::vector<char> &compressedData) { std::stringstream compressed; std::stringstream decompressed(data); boost::iostreams::filtering_streambuf<boost::iostreams::input> in; in.push(boost::iostreams::zlib_compressor()); in.push(decompressed); boost::iostreams::copy(in, compressed); std::string str = compressed.str(); compressedData.assign(str.begin(),str.end()); } And decompress : std::string MessageManager::decompressString(std::vector<char> &compressedData) { std::stringstream compressed; compressed.write(compressedData.data(),compressedData.size()); // <--- that is to be sure that it WONT STOP copying at a \0 char std::stringstream decompressed; boost::iostreams::filtering_streambuf<boost::iostreams::input> in; in.push(boost::iostreams::zlib_decompressor()); in.push(compressed); boost::iostreams::copy(in, decompressed); std::string str(decompressed.str()); return str; } I hope it will help someone out there
  5. ZLib compression from UE4 to Boost ?

    On the server side I get zlib error: iostream error and the threads stops. It should be an iostream error and only happens when the compress data comes from the client. The client says the header is wrong. I agree with encore I removed it but std::string can contain \0 it is not delimited by it (although I will look into putting it in a char vector). I already checked the size on the client, on the server and I checked the byte array data to verify it was the same byte (it is). The problem is that both header are different. The header from server compressing something is what the RFC of ZLib (ZLib RFC) describe. But when the client is compressing it, it does not correspond to what it should be, this is the first 2 bytes : C1 83. I mean it is not a endianess problem since both are running on the same machine and 1C 38 would correspond to the RFC either. I am looking on how it is compressed by UE4 when it uses ZLib or I will import ZLib myself and do it directly.
  6. ZLib compression from UE4 to Boost ?

    I know my packet and data receiving/sending is not the problem since when I don't compress everything is transferred fine. I just have the size as a uint32 header and the rest is the message itself. When a message is fully received it is sent to my messagemanager to be consume and decompressed. I tested everypart of the client and the server. If I disable the Zlib part everything works. Server side compression (the decompression is pretty similar, use zlib_decompressor and read from the right place etc) : void MessageManager::compressString(const std::string &data, std::vector<char> &compressedData) { std::stringstream compressed; std::stringstream decompressed(data); boost::iostreams::filtering_streambuf<boost::iostreams::input> in; in.push(boost::iostreams::zlib_compressor()); in.push(decompressed); boost::iostreams::copy(in, compressed); std::string str = encode64(decompressed.str()); compressedData.assign(str.begin(),str.end()); } Client side compression (it's also pretty easy to understand what the decompress code looks like) : void MessageManager::compressString(const FString &json, TArray<uint8> &compressedData) { // Compress File FBufferArchive binaryArrayArchive; FString strData = FString(json); binaryArrayArchive << strData; TArray<uint8> dataArray(binaryArrayArchive.GetData(),binaryArrayArchive.GetAllocatedSize()); FArchiveSaveCompressedProxy compressor = FArchiveSaveCompressedProxy(compressedData, ECompressionFlags::COMPRESS_ZLIB); compressor << dataArray; compressor.Flush(); compressor.FlushCache(); } If I compress with the server I can decompress with the server. Same with the client. So now I starting to read UE4 source code and boost source code to see what are the default parameters sent to ZLib, they might differ a lot. I'm also looking into FString of UE4 because std::streamstring might not support the encoding of FString etc... Oh and yes the encoding in base64 is not necessary at all but I did it since I am making test through files and I wanted to be able to check every character is written in the file.
  7. Hello, I am sending compressed json data from the UE4 client to a C++ server made with boost. I am using ZLib to compress and decompress all json but it doesn't work. I am now encoding it in base64 to avoid some issues but that doesn't change a thing. I currently stopped trying to send the data and I am writing it in a file from the client and trying to read the file and decompress on the server side. When the server is trying to decompress it I get an error from ZLib : zlib error: iostream error My question is the following : Did anyone manage to compress and decompress data between a UE4 client and a C++ server ? I cannot really configure anything on the server side (because boost has its ZLib compressor) and I don't know what is wrong with the decompression. Any idea ? rXp
  8. What I meant is that Clion does not support Microsoft debugger yet. So if I build with the microsoft compiler I won't be able to debug in Clion. That would mean I would need to have a double IDE project.
  9. I will look into it As for the ABI stuff it should not be a problem since I built everything from source myself with mingw. Took time but I wanted to be sure it was compatible.
  10. A lot of things that CMAKE does on windows (with MingW) is quite weird I agree. My problem is not that I hate windows and don't want to use microsoft compilers, the problem is that I use Clion to code the project on Mac/Linux/Windows but it does not support Microsoft Debugger. So I can work with mingw, cigwin, the ubuntu shell on windows 10 but the official Microsoft debugger are not supported. I could have a VS project on windows and cmake for mac and linux but I would like to have everything on my cmake project. I can build and compile for windows with the cmake project but that would mean no debugging on windows from Clion.
  11. For now I would love to make it work with mingw but if that won't be possible I will use the Microsoft compilers. I would like to be able to use mingw with Clion for this project, but it made my life difficult for sure. Though I showed the linklibs.rsp just before the nm of crypto.
  12. I thought even though mingw 32bits is a 32bit software it can compile 32 and 64 bits applications. And everything is working, only when trying to include OpenSSL that I get the error.
  13. Hello, I am not really sure where I should post that since it is linked to a network library and I want to make my connection secured I will put my problem here. I am trying to make SSL work with boost ASIO. I am on windows and using MingW 6.3. I built OpenSSL 1.1, 1.0 and 0.8 with MingW when I try to link them to the project I always get different errors (depending on what is missing). Right now I am trying to make work OpenSSL 1.1.0g but I have those error even though I give manually the path to the libs with CMAKE. This is the errors if I build my projct with OpenSSL 1.1.0g : "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" --build C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug --target AuthServer -- -j 2 "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -HC:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer -BC:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0 C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 AuthServer mingw32-make.exe[1]: Entering directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -HC:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer -BC:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0 "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -E cmake_progress_start C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug\CMakeFiles 6 C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 CMakeFiles/AuthServer.dir/all mingw32-make.exe[2]: Entering directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\AuthServer.dir\build.make CMakeFiles/AuthServer.dir/depend mingw32-make.exe[3]: Entering directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -E cmake_depends "MinGW Makefiles" C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug C:\Users\myuser\Documents\MagesBattleAuthServerCPP\AuthServer\cmake-build-debug\CMakeFiles\AuthServer.dir\DependInfo.cmake --color= mingw32-make.exe[3]: Leaving directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\AuthServer.dir\build.make CMakeFiles/AuthServer.dir/build mingw32-make.exe[3]: Entering directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' [ 16%] Linking CXX executable bin\Windows\AuthServer.exe "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -E cmake_link_script CMakeFiles\AuthServer.dir\link.txt --verbose=1 "C:\Program Files\JetBrains\CLion 2017.2.3\bin\cmake\bin\cmake.exe" -E remove -f CMakeFiles\AuthServer.dir/objects.a C:\MinGW\bin\ar.exe cr CMakeFiles\AuthServer.dir/objects.a @CMakeFiles\AuthServer.dir\objects1.rsp C:\MinGW\bin\g++.exe -g -Wl,--whole-archive CMakeFiles\AuthServer.dir/objects.a -Wl,--no-whole-archive -o bin\Windows\AuthServer.exe -Wl,--out-implib,lib\libAuthServer.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\AuthServer.dir\linklibs.rsp CMakeFiles\AuthServer.dir/objects.a(main.cpp.obj): In function `ZN5boost4asio3ssl6detail17openssl_init_base7do_initD1Ev': c:/users/myuser/documents/magesbattleauthservercpp/include/boost/asio/ssl/detail/impl/openssl_init.ipp:89: undefined reference to `CONF_modules_unload' CMakeFiles\AuthServer.dir/objects.a(main.cpp.obj): In function `ZNK5boost4asio5error6detail12ssl_category7messageB5cxx11Ei': c:/users/myuser/documents/magesbattleauthservercpp/include/boost/asio/ssl/impl/error.ipp:39: undefined reference to `ERR_reason_error_string' collect2.exe: error: ld returned 1 exit status CMakeFiles\AuthServer.dir\build.make:217: recipe for target 'bin/Windows/AuthServer.exe' failed mingw32-make.exe[3]: Leaving directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' CMakeFiles\Makefile2:69: recipe for target 'CMakeFiles/AuthServer.dir/all' failed mingw32-make.exe[2]: Leaving directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' mingw32-make.exe[3]: *** [bin/Windows/AuthServer.exe] Error 1 mingw32-make.exe[2]: *** [CMakeFiles/AuthServer.dir/all] Error 2 CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/AuthServer.dir/rule' failed mingw32-make.exe[1]: Leaving directory 'C:/Users/myuser/Documents/MagesBattleAuthServerCPP/AuthServer/cmake-build-debug' Makefile:120: recipe for target 'AuthServer' failed mingw32-make.exe[1]: *** [CMakeFiles/AuthServer.dir/rule] Error 2 mingw32-make.exe: *** [AuthServer] Error 2 My make : cmake_minimum_required(VERSION 3.8) project(AuthServer) #----------------- MACROS ----------------------------- #FIND THE CORRECT VERSION OF WINNT macro(get_WIN32_WINNT version) if (CMAKE_SYSTEM_VERSION) set(ver ${CMAKE_SYSTEM_VERSION}) string(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver}) string(REGEX MATCH "^([0-9]+)" verMajor ${ver}) # Check for Windows 10, b/c we'll need to convert to hex 'A'. if ("${verMajor}" MATCHES "10") set(verMajor "A") string(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver}) endif ("${verMajor}" MATCHES "10") # Remove all remaining '.' characters. string(REPLACE "." "" ver ${ver}) # Prepend each digit with a zero. string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver}) set(${version} "0x${ver}") endif(CMAKE_SYSTEM_VERSION) endmacro(get_WIN32_WINNT) #----------------- MACROS ----------------------------- set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CXX_STANDARD 14) SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") add_definitions(-DBOOST_NETWORK_ENABLE_HTTPS) set(SOURCE_FILES AuthServer/Client.cpp AuthServer/Client.h AuthServer/main.cpp AuthServer/NetworkManager.cpp AuthServer/NetworkManager.h AuthServer/Message.cpp AuthServer/Message.h AuthServer/JsonSerializable.h AuthServer/JsonDeserializerFactory.cpp AuthServer/JsonDeserializerFactory.h) if (WIN32) #windows #set the correct WINNET version get_WIN32_WINNT(ver) add_definitions(-D_WIN32_WINNT=${ver}) set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lws2_32 -lwsock32 -lmswsock") #set the correct lib build type .a because we are using mingw if(${CMAKE_BUILD_TYPE} MATCHES "debug") SET(CMAKE_FIND_LIBRARY_SUFFIXES "-mgw63-mt-d-1_65_1.a" ".a") ELSEIF(${CMAKE_BUILD_TYPE} MATCHES "release") SET(CMAKE_FIND_LIBRARY_SUFFIXES "-mgw63-mt-1_65_1.a" ".a") ENDIF() #find all the libs find_library(BOOST_LIBRARY_atomic NAMES boost_atomic PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_chrono NAMES boost_chrono PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_date_time NAMES boost_date_time PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_regex NAMES boost_regex PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_thread NAMES boost_thread PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_system NAMES boost_system PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_iostreams NAMES boost_iostreams PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_zlib NAMES boost_zlib PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(LIBRARY_ossl_ssl NAMES ssl PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(LIBRARY_ossl_crypto NAMES crypto PATHS ${CMAKE_SOURCE_DIR}/../Lib/win/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) add_executable(AuthServer ${SOURCE_FILES}) ELSEif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") #osx SET(CMAKE_OSX_ARCHITECTURES x86_64) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dylib") find_library(BOOST_LIBRARY_atomic NAMES boost_atomic PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_chrono NAMES boost_chrono PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_date_time NAMES boost_date_time PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_regex NAMES boost_regex PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_thread NAMES boost_thread PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_system NAMES boost_system PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_iostreams NAMES boost_iostreams PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) find_library(BOOST_LIBRARY_zlib NAMES boost_zlib PATHS ${CMAKE_SOURCE_DIR}/../Lib/osx/x64/${CMAKE_BUILD_TYPE} NO_DEFAULT_PATH) add_executable(AuthServer ${SOURCE_FILES}) endif() target_include_directories(AuthServer PUBLIC ${CMAKE_SOURCE_DIR}/../Include) target_link_libraries(AuthServer PUBLIC ${BOOST_LIBRARY_chrono} ${BOOST_LIBRARY_atomic} ${BOOST_LIBRARY_date_time} ${BOOST_LIBRARY_regex} ${BOOST_LIBRARY_thread} ${BOOST_LIBRARY_system} ${BOOST_LIBRARY_iostreams} ${BOOST_LIBRARY_zlib} ${LIBRARY_ossl_ssl} ${LIBRARY_ossl_crypto} ) set_target_properties(AuthServer PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/${CMAKE_SYSTEM_NAME}" ) Command to build OpenSSL (mingw msys2) : $ ./Configure mingw64 no-shared no-asm --prefix=/C/OpenSSL-x64 $ make && make install linklibs.rsp : C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_chrono-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_atomic-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_date_time-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_regex-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_thread-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_system-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_iostreams-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libboost_zlib-mgw63-mt-d-1_65_1.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libssl.a C:/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libcrypto.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lws2_32 -lwsock32 -lmswsock -ldl -lpthread nm of crypto : myuser@LHCFB203 MINGW64 ~ $ nm /C/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libcrypto.a | grep 'CONF_modules_unload' 00000000000005c0 T CONF_modules_unload myuser@LHCFB203 MINGW64 ~ $ nm /C/Users/myuser/Documents/MagesBattleAuthServerCPP/Lib/win/x64/debug/libcrypto.a | grep 'ERR_reason_error_string' 0000000000004de0 T ERR_reason_error_string I'm really lost here. What did I do wrong ? rXp
  14. Hello, I am looking for a team to stop developing project alone and start doing bigger things. I would like a team that is organized and serious even of it is just a hobby. I don't want a project to be dropped every week and the team to disband after 2 months. Even though it is a hobby the quality and complexity of the game should be on par with a game that would be released on a major platform. I have experience with UE4, Unity and making my own engine with OpenGL. I prefer UE4 for 3D and Unity for 2D but I am willing to work with both. Every one of the games I worked on (personal project) involve multiplayer and netcode, I used what UE4 provided but for unity I used Forge Remastered which gave me a bigger control on how to optimize everything. I play several instruments, know about game design and am able to do small modeling task but I am before everything a programmer. I play mostly competitive fighting games these days (SFV, MvCi, GG, T7) but before I started getting serious into these types of games it was mostly FPS (CS1.6, UT2k4, Quake 3) and Dota-like. As you can see I love competitive multiplayer games but I play solo games too. I have a preference for darker theme games(F.E.A.R, HL, Shin Megami Tensei/Persona, Last of Us, SH2, RE7) even though I play everything offering me a challenge or some peace (Don't Starve, Stardew Valley, Darkest Dungeon, Zelda etc). I do have several ideas for games with a very clear direction gameplay, marketing and art but I am not looking for a team to work on my ideas, I just have them if needed. Feel free to ask questions here or PM me if you prefer. Best regards, rXp
  15. Unity RTS game : UDK or Unity or else ?

    Thanks,   That was what I thought. So I guess there is not favorite for RTS I will look into unity udk4 and source engine.