Browse Source

Clean headers for network code

pull/25/head
Xadhoom 7 years ago
parent
commit
4d557709e0
  1. 19
      CMakeLists.txt
  2. 1
      SourceS/miniwin.h
  3. 2
      SourceS/miniwin_ddraw.h
  4. 2
      SourceS/miniwin_dsound.h
  5. 4
      SourceS/miniwin_rand.h
  6. 2
      SourceS/miniwin_sdlrender.h
  7. 2
      SourceS/miniwin_thread.h
  8. 7
      SourceS/stub_rand.h
  9. 2
      SourceX/DiabloUI/credits.cpp
  10. 2
      SourceX/DiabloUI/diabloui.cpp
  11. 2
      SourceX/DiabloUI/dialogs.cpp
  12. 2
      SourceX/DiabloUI/mainmenu.cpp
  13. 2
      SourceX/DiabloUI/progress.cpp
  14. 2
      SourceX/DiabloUI/selconn.cpp
  15. 2
      SourceX/DiabloUI/selgame.cpp
  16. 2
      SourceX/DiabloUI/selhero.cpp
  17. 2
      SourceX/DiabloUI/title.cpp
  18. 11
      SourceX/asserts.h
  19. 2
      SourceX/capture.cpp
  20. 3
      SourceX/devilution.h
  21. 26
      SourceX/dvlnet/abstract_net.cpp
  22. 20
      SourceX/dvlnet/abstract_net.h
  23. 12
      SourceX/dvlnet/base.cpp
  24. 14
      SourceX/dvlnet/base.h
  25. 4
      SourceX/dvlnet/frame_queue.cpp
  26. 4
      SourceX/dvlnet/frame_queue.h
  27. 2
      SourceX/dvlnet/loopback.cpp
  28. 8
      SourceX/dvlnet/loopback.h
  29. 2
      SourceX/dvlnet/packet.cpp
  30. 7
      SourceX/dvlnet/packet.h
  31. 2
      SourceX/dvlnet/tcp_client.cpp
  32. 12
      SourceX/dvlnet/tcp_client.h
  33. 5
      SourceX/dvlnet/tcp_server.cpp
  34. 12
      SourceX/dvlnet/tcp_server.h
  35. 6
      SourceX/dvlnet/udp_p2p.cpp
  36. 12
      SourceX/dvlnet/udp_p2p.h
  37. 2
      SourceX/dx.cpp
  38. 2
      SourceX/fault.cpp
  39. 2
      SourceX/init.cpp
  40. 2
      SourceX/main.cpp
  41. 2
      SourceX/miniwin.cpp
  42. 2
      SourceX/miniwin_io.cpp
  43. 2
      SourceX/miniwin_msg_sdl.cpp
  44. 2
      SourceX/miniwin_thread.cpp
  45. 2
      SourceX/movie.cpp
  46. 14
      SourceX/pch.h
  47. 1
      SourceX/pchheader.cpp
  48. 2
      SourceX/restrict.cpp
  49. 2
      SourceX/sound.cpp
  50. 2
      SourceX/storm.cpp
  51. 16
      SourceX/storm_net.cpp
  52. 6
      SourceX/stub_rand.cpp
  53. 6
      SourceX/stubs.h
  54. 6
      types.h

19
CMakeLists.txt

@ -12,6 +12,11 @@ endif()
option(ASAN "Enable address sanitizer" ON)
option(DEBUG "Enable debug mode in engine" ON)
option(COTIRE "Enable cotire" OFF)
if(COTIRE)
include(CMake/cotire.cmake)
endif()
list(APPEND CMAKE_MODULE_PATH "${devilutionX_SOURCE_DIR}/CMake")
@ -143,6 +148,7 @@ add_executable(devilutionx
SourceX/sound.cpp
SourceX/storm.cpp
SourceX/storm_net.cpp
SourceX/dvlnet/abstract_net.cpp
SourceX/dvlnet/loopback.cpp
SourceX/dvlnet/packet.cpp
SourceX/dvlnet/base.cpp
@ -160,7 +166,8 @@ add_executable(devilutionx
SourceX/DiabloUI/selhero.cpp
SourceX/DiabloUI/title.cpp
SourceX/main.cpp)
target_include_directories(devilutionx PRIVATE SourceS SourceX 3rdParty/asio/include)
target_include_directories(devilutionx PRIVATE SourceS SourceX 3rdParty/asio/include .)
target_link_libraries(devilution PUBLIC
StormLib
@ -200,7 +207,7 @@ target_compile_options(devilution PRIVATE -fpermissive -Wno-write-strings -Wno-m
target_compile_options(devilution PRIVATE -fno-aggressive-loop-optimizations -fno-strict-aliasing)
# Warnings for devilutionX
target_compile_options(devilution PUBLIC -Wno-unknown-pragmas)
target_compile_options(devilutionx PRIVATE -fpermissive -Wall -Wextra -Wno-multichar)
target_compile_options(devilutionx PRIVATE -fpermissive -Wall -Wextra -Wno-multichar -Wno-unused-parameter)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Style issues
@ -210,3 +217,11 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Fix: error: cast from pointer to smaller type 'unsigned char' loses information
target_compile_options(devilutionx PRIVATE -fms-extensions)
endif()
if(COTIRE)
set_target_properties(devilutionx PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
set_target_properties(devilutionx PROPERTIES
COTIRE_PREFIX_HEADER_INCLUDE_PATH "${devilutionX_SOURCE_DIR}"
COTIRE_PREFIX_HEADER_IGNORE_PATH "${devilutionX_SOURCE_DIR}/SourceX")
cotire(devilutionx)
endif()

1
SourceS/miniwin.h

@ -580,3 +580,4 @@ extern BOOL __cdecl LoadArtWithPal(char *pszFile, void **pBuffer, int frames, DW
#include "miniwin_dsound.h"
#include "miniwin_sdlrender.h"
#include "miniwin_thread.h"
#include "miniwin_rand.h"

2
SourceS/miniwin_ddraw.h

@ -1,3 +1,5 @@
#pragma once
typedef struct _DDCOLORKEY {
DWORD dwColorSpaceLowValue;
DWORD dwColorSpaceHighValue;

2
SourceS/miniwin_dsound.h

@ -1,3 +1,5 @@
#pragma once
typedef void *LPDSBCAPS, *LPCDSBUFFERDESC;
struct IDirectSound;

4
SourceS/miniwin_rand.h

@ -0,0 +1,4 @@
#pragma once
int rand(void);
void srand(unsigned int seed);

2
SourceS/miniwin_sdlrender.h

@ -1,3 +1,5 @@
#pragma once
#include <SDL.h>
#include <SDL_ttf.h>

2
SourceS/miniwin_thread.h

@ -1,3 +1,5 @@
#pragma once
#include <SDL.h>
typedef SDL_mutex *CRITICAL_SECTION, **LPCRITICAL_SECTION;

7
SourceS/stub_rand.h

@ -1,7 +0,0 @@
#pragma once
int rand_miniwin(void);
void srand_miniwin(unsigned int seed);
#define srand srand_miniwin
#define rand rand_miniwin

2
SourceX/DiabloUI/credits.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#define CREDIT_LINES 13

2
SourceX/DiabloUI/diabloui.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include <iconv.h>
TTF_Font *font;

2
SourceX/DiabloUI/dialogs.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
UI_Item OKCANCEL_DIALOG[] = {
{ { 180, 168, 280, 144 }, UI_IMAGE, 0, 0, "ui_art\\spopup.pcx" },

2
SourceX/DiabloUI/mainmenu.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
int MainMenuResult;
UI_Item MAINMENU_DIALOG[] = {

2
SourceX/DiabloUI/progress.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
Art ArtPopupSm;
Art ArtProgBG;

2
SourceX/DiabloUI/selconn.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include "selconn.h"
char selconn_MaxPlayers[21];

2
SourceX/DiabloUI/selgame.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include "selgame.h"
char selgame_Lable[32];

2
SourceX/DiabloUI/selhero.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include "selhero.h"
int selhero_SaveCount = 0;

2
SourceX/DiabloUI/title.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
void title_Load()
{

11
SourceX/asserts.h

@ -1,11 +0,0 @@
#pragma once
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#define ASSERT(x) \
if (!(x)) { \
fprintf(stderr, "Assertion failed in %s:%d: %s\n", __FILE__, __LINE__, #x); \
abort(); \
}

2
SourceX/capture.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
void __cdecl CaptureScreen()
{

3
SourceX/devilution.h

@ -0,0 +1,3 @@
#include <types.h>
#include "stubs.h"
#include "miniwin_sdl.h"

26
SourceX/dvlnet/abstract_net.cpp

@ -0,0 +1,26 @@
#include "dvlnet/abstract_net.h"
#include "stubs.h"
#include "dvlnet/tcp_client.h"
#include "dvlnet/udp_p2p.h"
#include "dvlnet/loopback.h"
using namespace dvlnet;
abstract_net::~abstract_net()
{
}
std::unique_ptr<abstract_net> abstract_net::make_net(provider_t provider)
{
if (provider == 'TCPN') {
return std::make_unique<tcp_client>();
} else if (provider == 'UDPN') {
return std::make_unique<udp_p2p>();
} else if (provider == 'SCBL' || provider == 0) {
return std::make_unique<loopback>();
} else {
ABORT();
}
}

20
SourceX/dvlnet/dvlnet.h → SourceX/dvlnet/abstract_net.h

@ -1,11 +1,17 @@
#pragma once
#include <vector>
#include <memory>
#include "devilution.h"
namespace dvlnet {
typedef std::vector<unsigned char> buffer_t;
typedef void(__stdcall *snet_event_func)(struct _SNETEVENT*);
typedef unsigned long provider_t;
class dvlnet_exception : public std::exception {};
class dvlnet {
class abstract_net {
public:
virtual int create(std::string addrstr, std::string passwd) = 0;
virtual int join(std::string addrstr, std::string passwd) = 0;
@ -23,15 +29,9 @@ namespace dvlnet {
snet_event_func func) = 0;
virtual bool SNetLeaveGame(int type) = 0;
virtual void setup_gameinfo(buffer_t info) = 0;
virtual ~dvlnet() {}
virtual ~abstract_net();
static std::unique_ptr<abstract_net> make_net(provider_t provider);
};
}
#include "dvlnet/packet.h"
#include "dvlnet/frame_queue.h"
#include "dvlnet/loopback.h"
#include "dvlnet/base.h"
#include "dvlnet/tcp_server.h"
#include "dvlnet/tcp_client.h"
#include "dvlnet/udp_p2p.h"

12
SourceX/dvlnet/base.cpp

@ -1,4 +1,6 @@
#include "pchheader.h"
#include "dvlnet/base.h"
#include <algorithm>
using namespace dvlnet;
@ -55,7 +57,7 @@ void base::recv_local(packet& pkt)
message_queue.push_back(message_t(pkt.src(), pkt.message()));
break;
case PT_TURN:
turn_queue[pkt.src()].push(pkt.turn());
turn_queue[pkt.src()].push_back(pkt.turn());
break;
case PT_JOIN_ACCEPT:
handle_accept(pkt);
@ -76,11 +78,13 @@ void base::recv_local(packet& pkt)
connected_table[pkt.newplr()] = false;
active_table[pkt.newplr()] = false;
clear_msg(pkt.newplr());
turn_queue[pkt.newplr()] = {};
turn_queue[pkt.newplr()].clear();
} else {
// problem
}
break;
default:
break;
// otherwise drop
}
}
@ -134,7 +138,7 @@ bool base::SNetReceiveTurns(char** data, unsigned int* size, DWORD* status)
size[i] = sizeof(turn_t);
status[i] |= PS_TURN_ARRIVED;
turn_last[i] = turn_queue[i].front();
turn_queue[i].pop();
turn_queue[i].pop_front();
data[i] = reinterpret_cast<char*>(&turn_last[i]);
}
}

14
SourceX/dvlnet/base.h

@ -1,5 +1,15 @@
#pragma once
#include <string>
#include <map>
#include <deque>
#include <array>
#include <memory>
#include "devilution.h"
#include "dvlnet/abstract_net.h"
#include "dvlnet/packet.h"
#define PS_CONNECTED 0x10000
#define PS_TURN_ARRIVED 0x20000
#define PS_ACTIVE 0x40000
@ -8,7 +18,7 @@
#define LEAVE_ENDING 0x40000004
namespace dvlnet {
class base : public dvlnet {
class base : public abstract_net {
public:
virtual int create(std::string addrstr, std::string passwd) = 0;
virtual int join(std::string addrstr, std::string passwd) = 0;
@ -43,7 +53,7 @@ namespace dvlnet {
message_t message_last;
std::deque<message_t> message_queue;
std::array<turn_t, MAX_PLRS> turn_last = {};
std::array<std::queue<turn_t>, MAX_PLRS> turn_queue;
std::array<std::deque<turn_t>, MAX_PLRS> turn_queue;
std::array<bool, MAX_PLRS> active_table = {};
std::array<bool, MAX_PLRS> connected_table = {};

4
SourceX/dvlnet/frame_queue.cpp

@ -1,4 +1,6 @@
#include "pchheader.h"
#include "dvlnet/frame_queue.h"
#include "dvlnet/packet.h"
using namespace dvlnet;

4
SourceX/dvlnet/frame_queue.h

@ -1,5 +1,9 @@
#pragma once
#include <deque>
#include "dvlnet/abstract_net.h"
namespace dvlnet {
class frame_queue_exception : public dvlnet_exception {};

2
SourceX/dvlnet/loopback.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "dvlnet/loopback.h"
using namespace dvlnet;

8
SourceX/dvlnet/loopback.h

@ -1,7 +1,13 @@
#pragma once
#include <string>
#include <queue>
#include "devilution.h"
#include "dvlnet/abstract_net.h"
namespace dvlnet {
class loopback : public dvlnet {
class loopback : public abstract_net {
private:
std::queue<buffer_t> message_queue;
buffer_t message_last;

2
SourceX/dvlnet/packet.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "dvlnet/packet.h"
using namespace dvlnet;

7
SourceX/dvlnet/packet.h

@ -1,5 +1,12 @@
#pragma once
#include <string>
#include <memory>
#include <array>
#include <sodium.h>
#include "dvlnet/abstract_net.h"
namespace dvlnet {
enum packet_type : uint8_t {
PT_MESSAGE = 0x01,

2
SourceX/dvlnet/tcp_client.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "dvlnet/tcp_client.h"
using namespace dvlnet;

12
SourceX/dvlnet/tcp_client.h

@ -1,5 +1,17 @@
#pragma once
#include <string>
#include <memory>
#include <asio/ts/buffer.hpp>
#include <asio/ts/internet.hpp>
#include <asio/ts/io_context.hpp>
#include <asio/ts/net.hpp>
#include "dvlnet/packet.h"
#include "dvlnet/frame_queue.h"
#include "dvlnet/base.h"
#include "dvlnet/tcp_server.h"
namespace dvlnet {
class tcp_client : public base {
public:

5
SourceX/dvlnet/tcp_server.cpp

@ -1,4 +1,5 @@
#include "pchheader.h"
#include "pch.h"
#include "dvlnet/tcp_server.h"
using namespace dvlnet;
@ -120,7 +121,7 @@ void tcp_server::send_packet(packet& pkt)
if(i != pkt.src() && connections[i])
start_send(connections[i], pkt);
} else {
if(pkt.dest() < 0 || pkt.dest() >= MAX_PLRS)
if(pkt.dest() >= MAX_PLRS)
throw server_exception();
if((pkt.dest() != pkt.src()) && connections[pkt.dest()])
start_send(connections[pkt.dest()], pkt);

12
SourceX/dvlnet/tcp_server.h

@ -1,5 +1,17 @@
#pragma once
#include <string>
#include <memory>
#include <array>
#include <asio/ts/buffer.hpp>
#include <asio/ts/internet.hpp>
#include <asio/ts/io_context.hpp>
#include <asio/ts/net.hpp>
#include "dvlnet/packet.h"
#include "dvlnet/abstract_net.h"
#include "dvlnet/frame_queue.h"
namespace dvlnet {
class server_exception : public dvlnet_exception {};

6
SourceX/dvlnet/udp_p2p.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "dvlnet/udp_p2p.h"
using namespace dvlnet;
@ -109,7 +109,7 @@ std::set<udp_p2p::endpoint> udp_p2p::dests_for_addr(plr_t dest, endpoint sender)
if (dest == plr_self)
return ret;
if (0 <= dest && dest < MAX_PLRS) {
if (dest < MAX_PLRS) {
if (active_table[dest])
ret.insert(nexthop_table[dest]);
} else if (dest == PLR_BROADCAST) {
@ -153,7 +153,7 @@ void udp_p2p::recv_decrypted(packet& pkt, endpoint sender)
}
}
// normal packets
if (pkt.src() < 0 || pkt.src() >= MAX_PLRS)
if (pkt.src() >= MAX_PLRS)
return; //drop packet
if (active_table[pkt.src()]) { //WRONG?!?
if (sender != nexthop_table[pkt.src()])

12
SourceX/dvlnet/udp_p2p.h

@ -1,3 +1,15 @@
#pragma once
#include <string>
#include <set>
#include <asio/ts/buffer.hpp>
#include <asio/ts/internet.hpp>
#include <asio/ts/io_context.hpp>
#include <asio/ts/net.hpp>
#include "dvlnet/packet.h"
#include "dvlnet/base.h"
namespace dvlnet {
class udp_p2p : public base {
public:

2
SourceX/dx.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
Screen *gpBuffer;

2
SourceX/fault.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
LPTOP_LEVEL_EXCEPTION_FILTER __cdecl exception_get_filter()
{

2
SourceX/init.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
_SNETVERSIONDATA fileinfo;
int gbActive; // weak

2
SourceX/main.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
extern "C" const char *__asan_default_options()
{

2
SourceX/miniwin.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include <sys/statvfs.h>
DWORD last_error;

2
SourceX/miniwin_io.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
void TranslateFileName(char *dst, int dstLen, const char *src)
{

2
SourceX/miniwin_msg_sdl.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
/** @file
* *
* Windows message handling and keyboard event conversion for SDL.

2
SourceX/miniwin_thread.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
static std::set<HANDLE> threads;
static std::set<HANDLE> events;

2
SourceX/movie.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include "../3rdParty/libsmacker/smacker.h"
BYTE movie_playing;

14
SourceX/pchheader.h → SourceX/pch.h

@ -1,5 +1,3 @@
#pragma once
#include <assert.h>
#include <deque>
#include <dirent.h>
@ -19,14 +17,4 @@
#include <SDL_thread.h>
#include <SDL_ttf.h>
#include <sodium.h>
#include <asio/ts/buffer.hpp>
#include <asio/ts/internet.hpp>
#include <asio/ts/io_context.hpp>
#include <asio/ts/net.hpp>
#include "../types.h"
#include "stubs.h"
#include "asserts.h"
#include "miniwin_sdl.h"
#include "dvlnet/dvlnet.h"
#include "devilution.h"

1
SourceX/pchheader.cpp

@ -1 +0,0 @@
#include "pchheader.h"

2
SourceX/restrict.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
BOOL __cdecl RestrictedTest()
{

2
SourceX/sound.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
bool SoundInited;
char gbSndInited;

2
SourceX/storm.cpp

@ -1,4 +1,4 @@
#include "pchheader.h"
#include "pch.h"
#include "../3rdParty/Radon/Radon/include/Radon.hpp"
DWORD nLastError = 0;

16
SourceX/storm_net.cpp

@ -1,6 +1,7 @@
#include "pchheader.h"
#include "pch.h"
#include "dvlnet/abstract_net.h"
static std::unique_ptr<dvlnet::dvlnet> dvlnet_inst;
static std::unique_ptr<dvlnet::abstract_net> dvlnet_inst;
BOOL STORMAPI SNetReceiveMessage(int *senderplayerid, char **data, int *databytes)
{
@ -84,16 +85,7 @@ int __stdcall SNetInitializeProvider(unsigned long provider, struct _SNETPROGRAM
struct _SNETPLAYERDATA *user_info, struct _SNETUIDATA *ui_info,
struct _SNETVERSIONDATA *fileinfo)
{
if (provider == 'TCPN') {
dvlnet_inst = std::make_unique<dvlnet::tcp_client>();
} else if (provider == 'UDPN') {
dvlnet_inst = std::make_unique<dvlnet::udp_p2p>();
} else if (provider == 'SCBL' || provider == 0) {
dvlnet_inst = std::make_unique<dvlnet::loopback>();
} else {
ABORT();
}
dvlnet_inst = dvlnet::abstract_net::make_net(provider);
return ui_info->selectnamecallback(client_info, user_info, ui_info, fileinfo, provider, NULL, 0, NULL, 0, NULL);
}

6
SourceX/stub_rand.cpp

@ -1,14 +1,14 @@
#include "pchheader.h"
#include "devilution.h"
unsigned int rand_state = 1;
int rand_miniwin(void)
int rand(void)
{
rand_state = rand_state * 214013 + 2531011;
return (rand_state >> 16) & 0x7FFF;
}
void srand_miniwin(unsigned int seed)
void srand(unsigned int seed)
{
rand_state = seed;
}

6
SourceX/stubs.h

@ -35,3 +35,9 @@ static inline const char *nullstr(const char *a)
{
return a ? a : "(null)";
}
#define ASSERT(x) \
if (!(x)) { \
fprintf(stderr, "Assertion failed in %s:%d: %s\n", __FILE__, __LINE__, #x); \
abort(); \
}

6
types.h

@ -53,12 +53,6 @@
#include "3rdParty/Storm/Source/storm.h"
#include "3rdParty/PKWare/pkware.h"
#ifdef DEVILUTION_STUB
#include "stub_rand.h"
#endif
// If defined, use copy protection [Default -> Defined]
//#define COPYPROT
// If defined, don't reload for debuggers [Default -> Undefined]

Loading…
Cancel
Save