Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
ygopro-2pick
Commits
f707e95b
Commit
f707e95b
authored
Mar 27, 2019
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'server' of github.com:moecube/ygopro into server
parents
490c6942
82160119
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
42 deletions
+65
-42
gframe/data_manager.cpp
gframe/data_manager.cpp
+46
-0
gframe/data_manager.h
gframe/data_manager.h
+9
-0
gframe/game.cpp
gframe/game.cpp
+9
-39
gframe/game.h
gframe/game.h
+1
-3
No files found.
gframe/data_manager.cpp
View file @
f707e95b
...
...
@@ -7,10 +7,19 @@ namespace ygo {
const
wchar_t
*
DataManager
::
unknown_string
=
L"???"
;
wchar_t
DataManager
::
strBuffer
[
4096
];
byte
DataManager
::
scriptBuffer
[
0x20000
];
#ifndef YGOPRO_SERVER_MODE
IFileSystem
*
DataManager
::
FileSystem
;
#endif
DataManager
dataManager
;
bool
DataManager
::
LoadDB
(
const
wchar_t
*
wfile
)
{
#ifdef YGOPRO_SERVER_MODE
char
file
[
256
];
BufferIO
::
EncodeUTF8
(
wfile
,
file
);
sqlite3
*
pDB
;
if
(
sqlite3_open_v2
(
file
,
&
pDB
,
SQLITE_OPEN_READONLY
,
0
)
!=
SQLITE_OK
)
return
Error
(
pDB
);
#else
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
wfile
);
if
(
reader
==
NULL
)
return
false
;
...
...
@@ -27,6 +36,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
if
(
spmemvfs_open_db
(
&
db
,
file
,
mem
)
!=
SQLITE_OK
)
return
Error
(
&
db
);
sqlite3
*
pDB
=
db
.
handle
;
#endif //YGOPRO_SERVER_MODE
sqlite3_stmt
*
pStmt
;
#ifdef YGOPRO_SERVER_MODE
const
char
*
sql
=
"select * from datas"
;
...
...
@@ -34,14 +44,22 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
const
char
*
sql
=
"select * from datas,texts where datas.id=texts.id"
;
#endif
if
(
sqlite3_prepare_v2
(
pDB
,
sql
,
-
1
,
&
pStmt
,
0
)
!=
SQLITE_OK
)
#ifdef YGOPRO_SERVER_MODE
return
Error
(
pDB
);
#else
return
Error
(
&
db
);
#endif
CardDataC
cd
;
CardString
cs
;
int
step
=
0
;
do
{
step
=
sqlite3_step
(
pStmt
);
if
(
step
==
SQLITE_BUSY
||
step
==
SQLITE_ERROR
||
step
==
SQLITE_MISUSE
)
#ifdef YGOPRO_SERVER_MODE
return
Error
(
pDB
,
pStmt
);
#else
return
Error
(
&
db
,
pStmt
);
#endif
else
if
(
step
==
SQLITE_ROW
)
{
cd
.
code
=
sqlite3_column_int
(
pStmt
,
0
);
cd
.
ot
=
sqlite3_column_int
(
pStmt
,
1
);
...
...
@@ -83,8 +101,12 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
}
}
while
(
step
!=
SQLITE_DONE
);
sqlite3_finalize
(
pStmt
);
#ifdef YGOPRO_SERVER_MODE
sqlite3_close
(
pDB
);
#else
spmemvfs_close_db
(
&
db
);
spmemvfs_env_fini
();
#endif
return
true
;
}
bool
DataManager
::
LoadStrings
(
const
char
*
file
)
{
...
...
@@ -100,6 +122,7 @@ bool DataManager::LoadStrings(const char* file) {
myswprintf
(
numStrings
[
i
],
L"%d"
,
i
);
return
true
;
}
#ifndef YGOPRO_SERVER_MODE
bool
DataManager
::
LoadStrings
(
IReadFile
*
reader
)
{
char
ch
[
2
]
=
" "
;
char
linebuf
[
256
]
=
""
;
...
...
@@ -115,6 +138,7 @@ bool DataManager::LoadStrings(IReadFile* reader) {
reader
->
drop
();
return
true
;
}
#endif //YGOPRO_SERVER_MODE
void
DataManager
::
ReadStringConfLine
(
const
char
*
linebuf
)
{
if
(
linebuf
[
0
]
!=
'!'
)
return
;
...
...
@@ -139,6 +163,15 @@ void DataManager::ReadStringConfLine(const char* linebuf) {
_setnameStrings
[
value
]
=
strBuffer
;
}
}
#ifdef YGOPRO_SERVER_MODE
bool
DataManager
::
Error
(
sqlite3
*
pDB
,
sqlite3_stmt
*
pStmt
)
{
BufferIO
::
DecodeUTF8
(
sqlite3_errmsg
(
pDB
),
strBuffer
);
if
(
pStmt
)
sqlite3_finalize
(
pStmt
);
sqlite3_close
(
pDB
);
return
false
;
}
#else
bool
DataManager
::
Error
(
spmemvfs_db_t
*
pDB
,
sqlite3_stmt
*
pStmt
)
{
BufferIO
::
DecodeUTF8
(
sqlite3_errmsg
(
pDB
->
handle
),
strBuffer
);
if
(
pStmt
)
...
...
@@ -147,6 +180,7 @@ bool DataManager::Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt) {
spmemvfs_env_fini
();
return
false
;
}
#endif
bool
DataManager
::
GetData
(
int
code
,
CardData
*
pData
)
{
auto
cdit
=
_datas
.
find
(
code
);
if
(
cdit
==
_datas
.
end
())
...
...
@@ -381,6 +415,17 @@ byte* DataManager::ScriptReaderExSingle(const char* path, const char* script_nam
return
ScriptReader
(
sname
,
slen
);
}
byte
*
DataManager
::
ScriptReader
(
const
char
*
script_name
,
int
*
slen
)
{
FILE
*
fp
;
#ifdef YGOPRO_SERVER_MODE
fp
=
fopen
(
script_name
,
"rb"
);
if
(
!
fp
)
return
0
;
int
len
=
fread
(
scriptBuffer
,
1
,
sizeof
(
scriptBuffer
),
fp
);
fclose
(
fp
);
if
(
len
>=
sizeof
(
scriptBuffer
))
return
0
;
*
slen
=
len
;
#else
wchar_t
fname
[
256
];
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
fname
);
...
...
@@ -394,6 +439,7 @@ byte* DataManager::ScriptReader(const char* script_name, int* slen) {
reader
->
read
(
scriptBuffer
,
size
);
reader
->
drop
();
*
slen
=
size
;
#endif //YGOPRO_SERVER_MODE
return
scriptBuffer
;
}
...
...
gframe/data_manager.h
View file @
f707e95b
...
...
@@ -3,7 +3,9 @@
#include "config.h"
#include "sqlite3.h"
#ifndef YGOPRO_SERVER_MODE
#include "spmemvfs.h"
#endif
#include "client_card.h"
#include <unordered_map>
...
...
@@ -14,9 +16,14 @@ public:
DataManager
()
:
_datas
(
8192
),
_strings
(
8192
)
{}
bool
LoadDB
(
const
wchar_t
*
wfile
);
bool
LoadStrings
(
const
char
*
file
);
#ifndef YGOPRO_SERVER_MODE
bool
LoadStrings
(
IReadFile
*
reader
);
void
ReadStringConfLine
(
const
char
*
linebuf
);
bool
Error
(
spmemvfs_db_t
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
#else
void
ReadStringConfLine
(
const
char
*
linebuf
);
bool
Error
(
sqlite3
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
#endif
bool
GetData
(
int
code
,
CardData
*
pData
);
code_pointer
GetCodePointer
(
int
code
);
bool
GetString
(
int
code
,
CardString
*
pStr
);
...
...
@@ -58,7 +65,9 @@ public:
static
byte
*
ScriptReaderEx
(
const
char
*
script_name
,
int
*
slen
);
static
byte
*
ScriptReaderExSingle
(
const
char
*
path
,
const
char
*
script_name
,
int
*
slen
,
int
pre_len
=
1
);
static
byte
*
ScriptReader
(
const
char
*
script_name
,
int
*
slen
);
#ifndef YGOPRO_SERVER_MODE
static
IFileSystem
*
FileSystem
;
#endif
};
extern
DataManager
dataManager
;
...
...
gframe/game.cpp
View file @
f707e95b
...
...
@@ -32,10 +32,9 @@ HostInfo game_info;
void
Game
::
MainServerLoop
()
{
initUtils
();
deckManager
.
LoadLFList
();
LoadBetaDB
();
LoadExpansionDB
();
dataManager
.
LoadDB
(
"cards.cdb"
);
LoadExpansions
();
dataManager
.
LoadDB
(
L"cards.cdb"
);
aServerPort
=
NetServer
::
StartServer
(
aServerPort
);
NetServer
::
InitDuel
();
printf
(
"%u
\n
"
,
aServerPort
);
...
...
@@ -50,44 +49,11 @@ void Game::MainServerLoop() {
}
}
void
Game
::
MainTestLoop
(
int
code
)
{
LoadBetaDB
();
LoadExpansionDB
();
dataManager
.
LoadDB
(
"cards.cdb"
);
LoadExpansions
();
dataManager
.
LoadDB
(
L"cards.cdb"
);
fflush
(
stdout
);
NetServer
::
InitTestCard
(
code
);
}
void
Game
::
LoadBetaDB
()
{
LoadExpansionDBDirectry
(
"./beta"
);
#ifdef _WIN32
char
fpath
[
1000
];
WIN32_FIND_DATAW
fdataw
;
HANDLE
fh
=
FindFirstFileW
(
L"./beta/*"
,
&
fdataw
);
if
(
fh
!=
INVALID_HANDLE_VALUE
)
{
do
{
if
(
wcscmp
(
L"."
,
fdataw
.
cFileName
)
!=
0
&&
wcscmp
(
L".."
,
fdataw
.
cFileName
)
!=
0
&&
fdataw
.
dwFileAttributes
&
FILE_ATTRIBUTE_DIRECTORY
)
{
char
fname
[
780
];
BufferIO
::
EncodeUTF8
(
fdataw
.
cFileName
,
fname
);
sprintf
(
fpath
,
"./beta/%s"
,
fname
);
LoadExpansionDBDirectry
(
fpath
);
}
}
while
(
FindNextFileW
(
fh
,
&
fdataw
));
FindClose
(
fh
);
}
#else
DIR
*
dir
;
struct
dirent
*
dirp
;
if
((
dir
=
opendir
(
"./beta/"
))
!=
NULL
)
{
while
((
dirp
=
readdir
(
dir
))
!=
NULL
)
{
if
(
strcmp
(
"."
,
dirp
->
d_name
)
==
0
||
strcmp
(
".."
,
dirp
->
d_name
)
==
0
||
dirp
->
d_type
!=
DT_DIR
)
continue
;
char
filepath
[
1000
];
sprintf
(
filepath
,
"./beta/%s/"
,
dirp
->
d_name
);
LoadExpansionDBDirectry
(
filepath
);
}
closedir
(
dir
);
}
#endif
}
#else //YGOPRO_SERVER_MODE
bool
Game
::
Initialize
()
{
srand
(
time
(
0
));
...
...
@@ -1061,6 +1027,9 @@ void Game::LoadExpansions() {
myswprintf
(
fpath
,
L"./expansions/%ls"
,
name
);
dataManager
.
LoadDB
(
fpath
);
}
#ifdef YGOPRO_SERVER_MODE
});
#else
if
(
!
isdir
&&
wcsrchr
(
name
,
'.'
)
&&
!
mywcsncasecmp
(
wcsrchr
(
name
,
'.'
),
L".zip"
,
4
))
{
wchar_t
fpath
[
1024
];
myswprintf
(
fpath
,
L"./expansions/%ls"
,
name
);
...
...
@@ -1085,6 +1054,7 @@ void Game::LoadExpansions() {
}
}
}
#endif //YGOPRO_SERVER_MODE
}
#ifndef YGOPRO_SERVER_MODE
void
Game
::
RefreshDeck
(
irr
::
gui
::
IGUIComboBox
*
cbDeck
)
{
...
...
gframe/game.h
View file @
f707e95b
...
...
@@ -132,9 +132,7 @@ public:
#ifdef YGOPRO_SERVER_MODE
void
MainServerLoop
();
void
MainTestLoop
(
int
code
);
void
LoadExpansionDB
();
void
LoadExpansionDBDirectry
(
const
char
*
path
);
void
LoadBetaDB
();
void
LoadExpansions
();
void
AddDebugMsg
(
const
char
*
msgbuf
);
void
initUtils
();
#else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment