Commit 81c836ca authored by wind2009's avatar wind2009

Merge remote-tracking branch 'upstream/master' into develop

parents 7501b725 b57b331b
Pipeline #32624 passed with stages
in 8 minutes and 54 seconds
...@@ -260,7 +260,7 @@ const wchar_t* DataManager::GetCounterName(int code) const { ...@@ -260,7 +260,7 @@ const wchar_t* DataManager::GetCounterName(int code) const {
const wchar_t* DataManager::GetSetName(int code) const { const wchar_t* DataManager::GetSetName(int code) const {
auto csit = _setnameStrings.find(code); auto csit = _setnameStrings.find(code);
if(csit == _setnameStrings.end()) if(csit == _setnameStrings.end())
return nullptr; return unknown_string;
return csit->second.c_str(); return csit->second.c_str();
} }
std::vector<unsigned int> DataManager::GetSetCodes(std::wstring setname) const { std::vector<unsigned int> DataManager::GetSetCodes(std::wstring setname) const {
...@@ -356,12 +356,10 @@ std::wstring DataManager::FormatSetName(const uint16_t setcode[]) const { ...@@ -356,12 +356,10 @@ std::wstring DataManager::FormatSetName(const uint16_t setcode[]) const {
if (!setcode[i]) if (!setcode[i])
break; break;
const wchar_t* setname = GetSetName(setcode[i]); const wchar_t* setname = GetSetName(setcode[i]);
if(setname) {
if (!buffer.empty()) if (!buffer.empty())
buffer.push_back(L'|'); buffer.push_back(L'|');
buffer.append(setname); buffer.append(setname);
} }
}
if (buffer.empty()) if (buffer.empty())
return std::wstring(unknown_string); return std::wstring(unknown_string);
return buffer; return buffer;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "deck_manager.h" #include "deck_manager.h"
#include "replay.h" #include "replay.h"
#include <thread> #include <thread>
#include <array>
namespace ygo { namespace ygo {
...@@ -101,18 +102,17 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) { ...@@ -101,18 +102,17 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
int len = evbuffer_get_length(input); int len = evbuffer_get_length(input);
if (len < 2) if (len < 2)
return; return;
unsigned char* duel_client_read = new unsigned char[SIZE_NETWORK_BUFFER]; std::array<unsigned char, SIZE_NETWORK_BUFFER> duel_client_read;
uint16_t packet_len = 0; uint16_t packet_len = 0;
while (len >= 2) { while (len >= 2) {
evbuffer_copyout(input, &packet_len, sizeof packet_len); evbuffer_copyout(input, &packet_len, sizeof packet_len);
if (len < packet_len + 2) if (len < packet_len + 2)
break; break;
int read_len = evbuffer_remove(input, duel_client_read, packet_len + 2); int read_len = evbuffer_remove(input, duel_client_read.data(), packet_len + 2);
if (read_len > 2) if (read_len > 2)
HandleSTOCPacketLan(&duel_client_read[2], read_len - 2); HandleSTOCPacketLan(&duel_client_read[2], read_len - 2);
len -= packet_len + 2; len -= packet_len + 2;
} }
delete[] duel_client_read;
} }
void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) { void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) {
if (events & BEV_EVENT_CONNECTED) { if (events & BEV_EVENT_CONNECTED) {
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "tag_duel.h" #include "tag_duel.h"
#include "deck_manager.h" #include "deck_manager.h"
#include <thread> #include <thread>
#include <array>
namespace ygo { namespace ygo {
std::unordered_map<bufferevent*, DuelPlayer> NetServer::users; std::unordered_map<bufferevent*, DuelPlayer> NetServer::users;
...@@ -126,18 +127,17 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) { ...@@ -126,18 +127,17 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
int len = evbuffer_get_length(input); int len = evbuffer_get_length(input);
if (len < 2) if (len < 2)
return; return;
unsigned char* net_server_read = new unsigned char[SIZE_NETWORK_BUFFER]; std::array<unsigned char, SIZE_NETWORK_BUFFER> net_server_read;
uint16_t packet_len = 0; uint16_t packet_len = 0;
while (len >= 2) { while (len >= 2) {
evbuffer_copyout(input, &packet_len, sizeof packet_len); evbuffer_copyout(input, &packet_len, sizeof packet_len);
if (len < packet_len + 2) if (len < packet_len + 2)
break; break;
int read_len = evbuffer_remove(input, net_server_read, packet_len + 2); int read_len = evbuffer_remove(input, net_server_read.data(), packet_len + 2);
if (read_len > 2) if (read_len > 2)
HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2); HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2);
len -= packet_len + 2; len -= packet_len + 2;
} }
delete[] net_server_read;
} }
void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) { void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) {
if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) {
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
namespace ygo { namespace ygo {
constexpr int SIZE_NETWORK_BUFFER = 0x20000; constexpr int SIZE_NETWORK_BUFFER = 0x20000;
constexpr int MAX_DATA_SIZE = SIZE_NETWORK_BUFFER - 3; constexpr int MAX_DATA_SIZE = UINT16_MAX - 1;
constexpr int MAINC_MAX = 250; // the limit of card_state constexpr int MAINC_MAX = 250; // the limit of card_state
constexpr int SIDEC_MAX = MAINC_MAX; constexpr int SIDEC_MAX = MAINC_MAX;
......
...@@ -13,8 +13,8 @@ namespace ygo { ...@@ -13,8 +13,8 @@ namespace ygo {
#define REPLAY_UNIFORM 0x10 #define REPLAY_UNIFORM 0x10
// max size // max size
#define MAX_REPLAY_SIZE 0x20000 constexpr int MAX_REPLAY_SIZE = 0x20000;
#define MAX_COMP_SIZE 0x2000 constexpr int MAX_COMP_SIZE = UINT16_MAX + 1;
struct ReplayHeader { struct ReplayHeader {
unsigned int id{}; unsigned int id{};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment