Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
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
List
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
YGOPRO-520DIY
ygopro
Commits
d8b8e8e7
Commit
d8b8e8e7
authored
Jun 17, 2024
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop-20240617' into develop
parents
da1a35b5
ae2579cb
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
58 additions
and
42 deletions
+58
-42
gframe/config.h
gframe/config.h
+0
-1
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+5
-3
gframe/duelclient.cpp
gframe/duelclient.cpp
+10
-12
gframe/duelclient.h
gframe/duelclient.h
+4
-7
gframe/game.cpp
gframe/game.cpp
+23
-0
gframe/game.h
gframe/game.h
+1
-0
gframe/gframe.cpp
gframe/gframe.cpp
+1
-0
gframe/netserver.cpp
gframe/netserver.cpp
+9
-11
gframe/netserver.h
gframe/netserver.h
+5
-8
No files found.
gframe/config.h
View file @
d8b8e8e7
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#include <arpa/inet.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netdb.h>
#include <unistd.h>
#include <unistd.h>
#include <locale.h>
#define SD_BOTH 2
#define SD_BOTH 2
#define SOCKET int
#define SOCKET int
...
...
gframe/deck_manager.cpp
View file @
d8b8e8e7
...
@@ -242,6 +242,8 @@ bool DeckManager::LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUICom
...
@@ -242,6 +242,8 @@ bool DeckManager::LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUICom
bool
res
=
LoadDeck
(
filepath
,
is_packlist
);
bool
res
=
LoadDeck
(
filepath
,
is_packlist
);
if
(
res
&&
mainGame
->
is_building
)
if
(
res
&&
mainGame
->
is_building
)
mainGame
->
deckBuilder
.
RefreshPackListScroll
();
mainGame
->
deckBuilder
.
RefreshPackListScroll
();
if
(
!
res
)
current_deck
.
clear
();
return
res
;
return
res
;
}
}
FILE
*
DeckManager
::
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
)
{
FILE
*
DeckManager
::
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
)
{
...
@@ -280,8 +282,8 @@ bool DeckManager::LoadDeck(const wchar_t* file, bool is_packlist) {
...
@@ -280,8 +282,8 @@ bool DeckManager::LoadDeck(const wchar_t* file, bool is_packlist) {
}
}
if
(
!
reader
)
if
(
!
reader
)
return
false
;
return
false
;
size_t
size
=
reader
->
getSize
();
auto
size
=
reader
->
getSize
();
if
(
size
>=
0x20000
)
{
if
(
size
>=
(
int
)
sizeof
deckBuffer
)
{
reader
->
drop
();
reader
->
drop
();
return
false
;
return
false
;
}
}
...
@@ -296,7 +298,7 @@ bool DeckManager::LoadDeck(std::istringstream* deckStream, bool is_packlist) {
...
@@ -296,7 +298,7 @@ bool DeckManager::LoadDeck(std::istringstream* deckStream, bool is_packlist) {
int
cardlist
[
300
];
int
cardlist
[
300
];
bool
is_side
=
false
;
bool
is_side
=
false
;
std
::
string
linebuf
;
std
::
string
linebuf
;
while
(
std
::
getline
(
*
deckStream
,
linebuf
)
&&
ct
<
300
)
{
while
(
std
::
getline
(
*
deckStream
,
linebuf
,
'\n'
)
&&
ct
<
300
)
{
if
(
linebuf
[
0
]
==
'!'
)
{
if
(
linebuf
[
0
]
==
'!'
)
{
is_side
=
true
;
is_side
=
true
;
continue
;
continue
;
...
...
gframe/duelclient.cpp
View file @
d8b8e8e7
...
@@ -19,8 +19,6 @@ unsigned char DuelClient::selftype = 0;
...
@@ -19,8 +19,6 @@ unsigned char DuelClient::selftype = 0;
bool
DuelClient
::
is_host
=
false
;
bool
DuelClient
::
is_host
=
false
;
event_base
*
DuelClient
::
client_base
=
0
;
event_base
*
DuelClient
::
client_base
=
0
;
bufferevent
*
DuelClient
::
client_bev
=
0
;
bufferevent
*
DuelClient
::
client_bev
=
0
;
unsigned
char
DuelClient
::
duel_client_read
[
SIZE_NETWORK_BUFFER
];
int
DuelClient
::
read_len
=
0
;
unsigned
char
DuelClient
::
duel_client_write
[
SIZE_NETWORK_BUFFER
];
unsigned
char
DuelClient
::
duel_client_write
[
SIZE_NETWORK_BUFFER
];
bool
DuelClient
::
is_closing
=
false
;
bool
DuelClient
::
is_closing
=
false
;
bool
DuelClient
::
is_swapping
=
false
;
bool
DuelClient
::
is_swapping
=
false
;
...
@@ -50,6 +48,7 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g
...
@@ -50,6 +48,7 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g
sin
.
sin_addr
.
s_addr
=
htonl
(
ip
);
sin
.
sin_addr
.
s_addr
=
htonl
(
ip
);
sin
.
sin_port
=
htons
(
port
);
sin
.
sin_port
=
htons
(
port
);
client_bev
=
bufferevent_socket_new
(
client_base
,
-
1
,
BEV_OPT_CLOSE_ON_FREE
);
client_bev
=
bufferevent_socket_new
(
client_base
,
-
1
,
BEV_OPT_CLOSE_ON_FREE
);
bufferevent_setwatermark
(
client_bev
,
EV_READ
,
3
,
0
);
bufferevent_setcb
(
client_bev
,
ClientRead
,
NULL
,
ClientEvent
,
(
void
*
)
create_game
);
bufferevent_setcb
(
client_bev
,
ClientRead
,
NULL
,
ClientEvent
,
(
void
*
)
create_game
);
if
(
bufferevent_socket_connect
(
client_bev
,
(
sockaddr
*
)
&
sin
,
sizeof
(
sin
))
<
0
)
{
if
(
bufferevent_socket_connect
(
client_bev
,
(
sockaddr
*
)
&
sin
,
sizeof
(
sin
))
<
0
)
{
bufferevent_free
(
client_bev
);
bufferevent_free
(
client_bev
);
...
@@ -100,24 +99,23 @@ void DuelClient::StopClient(bool is_exiting) {
...
@@ -100,24 +99,23 @@ void DuelClient::StopClient(bool is_exiting) {
void
DuelClient
::
ClientRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
void
DuelClient
::
ClientRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
int
len
=
evbuffer_get_length
(
input
);
int
len
=
evbuffer_get_length
(
input
);
unsigned
short
packet_len
=
0
;
unsigned
char
*
duel_client_read
=
new
unsigned
char
[
std
::
min
(
len
,
SIZE_NETWORK_BUFFER
)];
while
(
true
)
{
unsigned
short
packet_len
;
if
(
len
<
2
)
while
(
len
>=
2
)
{
return
;
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
evbuffer_copyout
(
input
,
&
packet_len
,
2
);
if
(
packet_len
+
2
>
SIZE_NETWORK_BUFFER
)
{
if
(
packet_len
+
2
>
SIZE_NETWORK_BUFFER
)
{
delete
[]
duel_client_read
;
ClientEvent
(
bev
,
BEV_EVENT_ERROR
,
0
);
ClientEvent
(
bev
,
BEV_EVENT_ERROR
,
0
);
return
;
return
;
}
}
if
(
len
<
packet_len
+
2
)
if
(
len
<
packet_len
+
2
)
return
;
break
;
if
(
packet_len
<
1
)
int
read_len
=
evbuffer_remove
(
input
,
duel_client_read
,
packet_len
+
2
);
return
;
read_len
=
evbuffer_remove
(
input
,
duel_client_read
,
packet_len
+
2
);
if
(
read_len
>=
3
)
if
(
read_len
>=
3
)
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
)
{
...
...
gframe/duelclient.h
View file @
d8b8e8e7
...
@@ -21,8 +21,6 @@ private:
...
@@ -21,8 +21,6 @@ private:
static
bool
is_host
;
static
bool
is_host
;
static
event_base
*
client_base
;
static
event_base
*
client_base
;
static
bufferevent
*
client_bev
;
static
bufferevent
*
client_bev
;
static
unsigned
char
duel_client_read
[
SIZE_NETWORK_BUFFER
];
static
int
read_len
;
static
unsigned
char
duel_client_write
[
SIZE_NETWORK_BUFFER
];
static
unsigned
char
duel_client_write
[
SIZE_NETWORK_BUFFER
];
static
bool
is_closing
;
static
bool
is_closing
;
static
bool
is_swapping
;
static
bool
is_swapping
;
...
@@ -56,13 +54,12 @@ public:
...
@@ -56,13 +54,12 @@ public:
template
<
typename
ST
>
template
<
typename
ST
>
static
void
SendPacketToServer
(
unsigned
char
proto
,
ST
&
st
)
{
static
void
SendPacketToServer
(
unsigned
char
proto
,
ST
&
st
)
{
auto
p
=
duel_client_write
;
auto
p
=
duel_client_write
;
int
blen
=
sizeof
(
ST
);
if
((
int
)
sizeof
(
ST
)
>
MAX_DATA_SIZE
)
if
(
blen
>
MAX_DATA_SIZE
)
return
;
return
;
BufferIO
::
WriteInt16
(
p
,
(
short
)(
1
+
blen
));
BufferIO
::
WriteInt16
(
p
,
(
short
)(
1
+
sizeof
(
ST
)
));
BufferIO
::
WriteInt8
(
p
,
proto
);
BufferIO
::
WriteInt8
(
p
,
proto
);
std
::
memcpy
(
p
,
&
st
,
blen
);
std
::
memcpy
(
p
,
&
st
,
sizeof
(
ST
)
);
bufferevent_write
(
client_bev
,
duel_client_write
,
blen
+
3
);
bufferevent_write
(
client_bev
,
duel_client_write
,
sizeof
(
ST
)
+
3
);
}
}
static
void
SendBufferToServer
(
unsigned
char
proto
,
void
*
buffer
,
size_t
len
)
{
static
void
SendBufferToServer
(
unsigned
char
proto
,
void
*
buffer
,
size_t
len
)
{
auto
p
=
duel_client_write
;
auto
p
=
duel_client_write
;
...
...
gframe/game.cpp
View file @
d8b8e8e7
...
@@ -203,17 +203,21 @@ bool Game::Initialize() {
...
@@ -203,17 +203,21 @@ bool Game::Initialize() {
env
->
addStaticText
(
dataManager
.
GetSysString
(
1220
),
rect
<
s32
>
(
10
,
30
,
220
,
50
),
false
,
false
,
wLanWindow
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1220
),
rect
<
s32
>
(
10
,
30
,
220
,
50
),
false
,
false
,
wLanWindow
);
ebNickName
=
env
->
addEditBox
(
gameConf
.
nickname
,
rect
<
s32
>
(
110
,
25
,
450
,
50
),
true
,
wLanWindow
);
ebNickName
=
env
->
addEditBox
(
gameConf
.
nickname
,
rect
<
s32
>
(
110
,
25
,
450
,
50
),
true
,
wLanWindow
);
ebNickName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_UPPERLEFT
,
irr
::
gui
::
EGUIA_CENTER
);
ebNickName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_UPPERLEFT
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebNickName
);
lstHostList
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
60
,
570
,
320
),
wLanWindow
,
LISTBOX_LAN_HOST
,
true
);
lstHostList
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
60
,
570
,
320
),
wLanWindow
,
LISTBOX_LAN_HOST
,
true
);
lstHostList
->
setItemHeight
(
18
);
lstHostList
->
setItemHeight
(
18
);
btnLanRefresh
=
env
->
addButton
(
rect
<
s32
>
(
240
,
325
,
340
,
350
),
wLanWindow
,
BUTTON_LAN_REFRESH
,
dataManager
.
GetSysString
(
1217
));
btnLanRefresh
=
env
->
addButton
(
rect
<
s32
>
(
240
,
325
,
340
,
350
),
wLanWindow
,
BUTTON_LAN_REFRESH
,
dataManager
.
GetSysString
(
1217
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1221
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wLanWindow
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1221
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wLanWindow
);
ebJoinHost
=
env
->
addEditBox
(
gameConf
.
lasthost
,
rect
<
s32
>
(
110
,
355
,
350
,
380
),
true
,
wLanWindow
);
ebJoinHost
=
env
->
addEditBox
(
gameConf
.
lasthost
,
rect
<
s32
>
(
110
,
355
,
350
,
380
),
true
,
wLanWindow
);
ebJoinHost
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebJoinHost
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebJoinHost
);
ebJoinPort
=
env
->
addEditBox
(
gameConf
.
lastport
,
rect
<
s32
>
(
360
,
355
,
420
,
380
),
true
,
wLanWindow
);
ebJoinPort
=
env
->
addEditBox
(
gameConf
.
lastport
,
rect
<
s32
>
(
360
,
355
,
420
,
380
),
true
,
wLanWindow
);
ebJoinPort
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebJoinPort
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebJoinPort
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1222
),
rect
<
s32
>
(
10
,
390
,
220
,
410
),
false
,
false
,
wLanWindow
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1222
),
rect
<
s32
>
(
10
,
390
,
220
,
410
),
false
,
false
,
wLanWindow
);
ebJoinPass
=
env
->
addEditBox
(
gameConf
.
roompass
,
rect
<
s32
>
(
110
,
385
,
420
,
410
),
true
,
wLanWindow
);
ebJoinPass
=
env
->
addEditBox
(
gameConf
.
roompass
,
rect
<
s32
>
(
110
,
385
,
420
,
410
),
true
,
wLanWindow
);
ebJoinPass
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebJoinPass
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebJoinPass
);
btnJoinHost
=
env
->
addButton
(
rect
<
s32
>
(
460
,
355
,
570
,
380
),
wLanWindow
,
BUTTON_JOIN_HOST
,
dataManager
.
GetSysString
(
1223
));
btnJoinHost
=
env
->
addButton
(
rect
<
s32
>
(
460
,
355
,
570
,
380
),
wLanWindow
,
BUTTON_JOIN_HOST
,
dataManager
.
GetSysString
(
1223
));
btnJoinCancel
=
env
->
addButton
(
rect
<
s32
>
(
460
,
385
,
570
,
410
),
wLanWindow
,
BUTTON_JOIN_CANCEL
,
dataManager
.
GetSysString
(
1212
));
btnJoinCancel
=
env
->
addButton
(
rect
<
s32
>
(
460
,
385
,
570
,
410
),
wLanWindow
,
BUTTON_JOIN_CANCEL
,
dataManager
.
GetSysString
(
1212
));
btnCreateHost
=
env
->
addButton
(
rect
<
s32
>
(
460
,
25
,
570
,
50
),
wLanWindow
,
BUTTON_CREATE_HOST
,
dataManager
.
GetSysString
(
1224
));
btnCreateHost
=
env
->
addButton
(
rect
<
s32
>
(
460
,
25
,
570
,
50
),
wLanWindow
,
BUTTON_CREATE_HOST
,
dataManager
.
GetSysString
(
1224
));
...
@@ -261,6 +265,7 @@ bool Game::Initialize() {
...
@@ -261,6 +265,7 @@ bool Game::Initialize() {
myswprintf
(
strbuf
,
L"%d"
,
180
);
myswprintf
(
strbuf
,
L"%d"
,
180
);
ebTimeLimit
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
115
,
220
,
140
),
true
,
wCreateHost
);
ebTimeLimit
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
115
,
220
,
140
),
true
,
wCreateHost
);
ebTimeLimit
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebTimeLimit
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebTimeLimit
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1228
),
rect
<
s32
>
(
20
,
150
,
320
,
170
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1228
),
rect
<
s32
>
(
20
,
150
,
320
,
170
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1236
),
rect
<
s32
>
(
20
,
180
,
220
,
200
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1236
),
rect
<
s32
>
(
20
,
180
,
220
,
200
),
false
,
false
,
wCreateHost
);
cbDuelRule
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
175
,
300
,
200
),
wCreateHost
);
cbDuelRule
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
175
,
300
,
200
),
wCreateHost
);
...
@@ -276,20 +281,25 @@ bool Game::Initialize() {
...
@@ -276,20 +281,25 @@ bool Game::Initialize() {
myswprintf
(
strbuf
,
L"%d"
,
8000
);
myswprintf
(
strbuf
,
L"%d"
,
8000
);
ebStartLP
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
235
,
220
,
260
),
true
,
wCreateHost
);
ebStartLP
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
235
,
220
,
260
),
true
,
wCreateHost
);
ebStartLP
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebStartLP
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebStartLP
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1232
),
rect
<
s32
>
(
20
,
270
,
320
,
290
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1232
),
rect
<
s32
>
(
20
,
270
,
320
,
290
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
5
);
myswprintf
(
strbuf
,
L"%d"
,
5
);
ebStartHand
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
265
,
220
,
290
),
true
,
wCreateHost
);
ebStartHand
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
265
,
220
,
290
),
true
,
wCreateHost
);
ebStartHand
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebStartHand
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebStartHand
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1233
),
rect
<
s32
>
(
20
,
300
,
320
,
320
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1233
),
rect
<
s32
>
(
20
,
300
,
320
,
320
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
1
);
myswprintf
(
strbuf
,
L"%d"
,
1
);
ebDrawCount
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
295
,
220
,
320
),
true
,
wCreateHost
);
ebDrawCount
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
295
,
220
,
320
),
true
,
wCreateHost
);
ebDrawCount
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebDrawCount
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebDrawCount
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1234
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1234
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wCreateHost
);
ebServerName
=
env
->
addEditBox
(
gameConf
.
gamename
,
rect
<
s32
>
(
110
,
355
,
250
,
380
),
true
,
wCreateHost
);
ebServerName
=
env
->
addEditBox
(
gameConf
.
gamename
,
rect
<
s32
>
(
110
,
355
,
250
,
380
),
true
,
wCreateHost
);
ebServerName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebServerName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebServerName
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1235
),
rect
<
s32
>
(
10
,
390
,
220
,
410
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1235
),
rect
<
s32
>
(
10
,
390
,
220
,
410
),
false
,
false
,
wCreateHost
);
ebServerPass
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
110
,
385
,
250
,
410
),
true
,
wCreateHost
);
ebServerPass
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
110
,
385
,
250
,
410
),
true
,
wCreateHost
);
ebServerPass
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebServerPass
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebServerPass
);
btnHostConfirm
=
env
->
addButton
(
rect
<
s32
>
(
260
,
355
,
370
,
380
),
wCreateHost
,
BUTTON_HOST_CONFIRM
,
dataManager
.
GetSysString
(
1211
));
btnHostConfirm
=
env
->
addButton
(
rect
<
s32
>
(
260
,
355
,
370
,
380
),
wCreateHost
,
BUTTON_HOST_CONFIRM
,
dataManager
.
GetSysString
(
1211
));
btnHostCancel
=
env
->
addButton
(
rect
<
s32
>
(
260
,
385
,
370
,
410
),
wCreateHost
,
BUTTON_HOST_CANCEL
,
dataManager
.
GetSysString
(
1212
));
btnHostCancel
=
env
->
addButton
(
rect
<
s32
>
(
260
,
385
,
370
,
410
),
wCreateHost
,
BUTTON_HOST_CANCEL
,
dataManager
.
GetSysString
(
1212
));
//host(single)
//host(single)
...
@@ -603,6 +613,7 @@ bool Game::Initialize() {
...
@@ -603,6 +613,7 @@ bool Game::Initialize() {
wANCard
->
setVisible
(
false
);
wANCard
->
setVisible
(
false
);
ebANCard
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
25
,
290
,
45
),
true
,
wANCard
,
EDITBOX_ANCARD
);
ebANCard
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
25
,
290
,
45
),
true
,
wANCard
,
EDITBOX_ANCARD
);
ebANCard
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebANCard
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebANCard
);
lstANCard
=
env
->
addListBox
(
rect
<
s32
>
(
20
,
50
,
290
,
265
),
wANCard
,
LISTBOX_ANCARD
,
true
);
lstANCard
=
env
->
addListBox
(
rect
<
s32
>
(
20
,
50
,
290
,
265
),
wANCard
,
LISTBOX_ANCARD
,
true
);
btnANCardOK
=
env
->
addButton
(
rect
<
s32
>
(
110
,
270
,
200
,
295
),
wANCard
,
BUTTON_ANCARD_OK
,
dataManager
.
GetSysString
(
1211
));
btnANCardOK
=
env
->
addButton
(
rect
<
s32
>
(
110
,
270
,
200
,
295
),
wANCard
,
BUTTON_ANCARD_OK
,
dataManager
.
GetSysString
(
1211
));
//announce attribute
//announce attribute
...
@@ -673,6 +684,7 @@ bool Game::Initialize() {
...
@@ -673,6 +684,7 @@ bool Game::Initialize() {
stDMMessage2
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stDMMessage2
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebDMName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
50
,
290
,
70
),
true
,
wDMQuery
,
-
1
);
ebDMName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
50
,
290
,
70
),
true
,
wDMQuery
,
-
1
);
ebDMName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebDMName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebDMName
);
cbDMCategory
=
env
->
addComboBox
(
rect
<
s32
>
(
20
,
50
,
290
,
70
),
wDMQuery
,
-
1
);
cbDMCategory
=
env
->
addComboBox
(
rect
<
s32
>
(
20
,
50
,
290
,
70
),
wDMQuery
,
-
1
);
stDMMessage2
->
setVisible
(
false
);
stDMMessage2
->
setVisible
(
false
);
ebDMName
->
setVisible
(
false
);
ebDMName
->
setVisible
(
false
);
...
@@ -694,6 +706,7 @@ bool Game::Initialize() {
...
@@ -694,6 +706,7 @@ bool Game::Initialize() {
btnSaveDeck
=
env
->
addButton
(
rect
<
s32
>
(
225
,
35
,
290
,
60
),
wDeckEdit
,
BUTTON_SAVE_DECK
,
dataManager
.
GetSysString
(
1302
));
btnSaveDeck
=
env
->
addButton
(
rect
<
s32
>
(
225
,
35
,
290
,
60
),
wDeckEdit
,
BUTTON_SAVE_DECK
,
dataManager
.
GetSysString
(
1302
));
ebDeckname
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
80
,
65
,
220
,
90
),
true
,
wDeckEdit
,
-
1
);
ebDeckname
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
80
,
65
,
220
,
90
),
true
,
wDeckEdit
,
-
1
);
ebDeckname
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebDeckname
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebDeckname
);
btnSaveDeckAs
=
env
->
addButton
(
rect
<
s32
>
(
225
,
65
,
290
,
90
),
wDeckEdit
,
BUTTON_SAVE_DECK_AS
,
dataManager
.
GetSysString
(
1303
));
btnSaveDeckAs
=
env
->
addButton
(
rect
<
s32
>
(
225
,
65
,
290
,
90
),
wDeckEdit
,
BUTTON_SAVE_DECK_AS
,
dataManager
.
GetSysString
(
1303
));
btnDeleteDeck
=
env
->
addButton
(
rect
<
s32
>
(
225
,
95
,
290
,
120
),
wDeckEdit
,
BUTTON_DELETE_DECK
,
dataManager
.
GetSysString
(
1308
));
btnDeleteDeck
=
env
->
addButton
(
rect
<
s32
>
(
225
,
95
,
290
,
120
),
wDeckEdit
,
BUTTON_DELETE_DECK
,
dataManager
.
GetSysString
(
1308
));
btnShuffleDeck
=
env
->
addButton
(
rect
<
s32
>
(
5
,
99
,
55
,
120
),
wDeckEdit
,
BUTTON_SHUFFLE_DECK
,
dataManager
.
GetSysString
(
1307
));
btnShuffleDeck
=
env
->
addButton
(
rect
<
s32
>
(
5
,
99
,
55
,
120
),
wDeckEdit
,
BUTTON_SHUFFLE_DECK
,
dataManager
.
GetSysString
(
1307
));
...
@@ -758,18 +771,23 @@ bool Game::Initialize() {
...
@@ -758,18 +771,23 @@ bool Game::Initialize() {
stAttack
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1322
),
rect
<
s32
>
(
205
,
22
+
50
/
6
,
280
,
42
+
50
/
6
),
false
,
false
,
wFilter
);
stAttack
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1322
),
rect
<
s32
>
(
205
,
22
+
50
/
6
,
280
,
42
+
50
/
6
),
false
,
false
,
wFilter
);
ebAttack
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
20
+
50
/
6
,
340
,
40
+
50
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebAttack
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
20
+
50
/
6
,
340
,
40
+
50
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebAttack
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebAttack
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebAttack
);
stDefense
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1323
),
rect
<
s32
>
(
205
,
42
+
75
/
6
,
280
,
62
+
75
/
6
),
false
,
false
,
wFilter
);
stDefense
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1323
),
rect
<
s32
>
(
205
,
42
+
75
/
6
,
280
,
62
+
75
/
6
),
false
,
false
,
wFilter
);
ebDefense
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
40
+
75
/
6
,
340
,
60
+
75
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebDefense
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
40
+
75
/
6
,
340
,
60
+
75
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebDefense
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebDefense
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebDefense
);
stStar
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1324
),
rect
<
s32
>
(
10
,
62
+
100
/
6
,
80
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
stStar
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1324
),
rect
<
s32
>
(
10
,
62
+
100
/
6
,
80
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
ebStar
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
60
,
60
+
100
/
6
,
100
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebStar
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
60
,
60
+
100
/
6
,
100
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebStar
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebStar
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebStar
);
stScale
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1336
),
rect
<
s32
>
(
101
,
62
+
100
/
6
,
150
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
stScale
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1336
),
rect
<
s32
>
(
101
,
62
+
100
/
6
,
150
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
ebScale
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
150
,
60
+
100
/
6
,
195
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebScale
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
150
,
60
+
100
/
6
,
195
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebScale
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebScale
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebScale
);
stSearch
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1325
),
rect
<
s32
>
(
205
,
62
+
100
/
6
,
280
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
stSearch
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1325
),
rect
<
s32
>
(
205
,
62
+
100
/
6
,
280
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
ebCardName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
60
+
100
/
6
,
390
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_KEYWORD
);
ebCardName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
260
,
60
+
100
/
6
,
390
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_KEYWORD
);
ebCardName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebCardName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebCardName
);
btnEffectFilter
=
env
->
addButton
(
rect
<
s32
>
(
345
,
20
+
50
/
6
,
390
,
60
+
75
/
6
),
wFilter
,
BUTTON_EFFECT_FILTER
,
dataManager
.
GetSysString
(
1326
));
btnEffectFilter
=
env
->
addButton
(
rect
<
s32
>
(
345
,
20
+
50
/
6
,
390
,
60
+
75
/
6
),
wFilter
,
BUTTON_EFFECT_FILTER
,
dataManager
.
GetSysString
(
1326
));
btnStartFilter
=
env
->
addButton
(
rect
<
s32
>
(
205
,
80
+
125
/
6
,
390
,
100
+
125
/
6
),
wFilter
,
BUTTON_START_FILTER
,
dataManager
.
GetSysString
(
1327
));
btnStartFilter
=
env
->
addButton
(
rect
<
s32
>
(
205
,
80
+
125
/
6
,
390
,
100
+
125
/
6
),
wFilter
,
BUTTON_START_FILTER
,
dataManager
.
GetSysString
(
1327
));
if
(
gameConf
.
separate_clear_button
)
{
if
(
gameConf
.
separate_clear_button
)
{
...
@@ -826,6 +844,7 @@ bool Game::Initialize() {
...
@@ -826,6 +844,7 @@ bool Game::Initialize() {
env
->
addStaticText
(
dataManager
.
GetSysString
(
1353
),
rect
<
s32
>
(
360
,
275
,
570
,
295
),
false
,
true
,
wReplay
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1353
),
rect
<
s32
>
(
360
,
275
,
570
,
295
),
false
,
true
,
wReplay
);
ebRepStartTurn
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
360
,
300
,
460
,
320
),
true
,
wReplay
,
-
1
);
ebRepStartTurn
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
360
,
300
,
460
,
320
),
true
,
wReplay
,
-
1
);
ebRepStartTurn
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebRepStartTurn
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebRepStartTurn
);
//single play window
//single play window
wSinglePlay
=
env
->
addWindow
(
rect
<
s32
>
(
220
,
100
,
800
,
520
),
false
,
dataManager
.
GetSysString
(
1201
));
wSinglePlay
=
env
->
addWindow
(
rect
<
s32
>
(
220
,
100
,
800
,
520
),
false
,
dataManager
.
GetSysString
(
1201
));
wSinglePlay
->
getCloseButton
()
->
setVisible
(
false
);
wSinglePlay
->
getCloseButton
()
->
setVisible
(
false
);
...
@@ -874,6 +893,7 @@ bool Game::Initialize() {
...
@@ -874,6 +893,7 @@ bool Game::Initialize() {
env
->
addStaticText
(
dataManager
.
GetSysString
(
1342
),
rect
<
s32
>
(
20
,
25
,
290
,
45
),
false
,
false
,
wReplaySave
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1342
),
rect
<
s32
>
(
20
,
25
,
290
,
45
),
false
,
false
,
wReplaySave
);
ebRSName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
50
,
290
,
70
),
true
,
wReplaySave
,
-
1
);
ebRSName
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
50
,
290
,
70
),
true
,
wReplaySave
,
-
1
);
ebRSName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebRSName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebRSName
);
btnRSYes
=
env
->
addButton
(
rect
<
s32
>
(
70
,
80
,
140
,
105
),
wReplaySave
,
BUTTON_REPLAY_SAVE
,
dataManager
.
GetSysString
(
1341
));
btnRSYes
=
env
->
addButton
(
rect
<
s32
>
(
70
,
80
,
140
,
105
),
wReplaySave
,
BUTTON_REPLAY_SAVE
,
dataManager
.
GetSysString
(
1341
));
btnRSNo
=
env
->
addButton
(
rect
<
s32
>
(
170
,
80
,
240
,
105
),
wReplaySave
,
BUTTON_REPLAY_CANCEL
,
dataManager
.
GetSysString
(
1212
));
btnRSNo
=
env
->
addButton
(
rect
<
s32
>
(
170
,
80
,
240
,
105
),
wReplaySave
,
BUTTON_REPLAY_CANCEL
,
dataManager
.
GetSysString
(
1212
));
//replay control
//replay control
...
@@ -892,6 +912,7 @@ bool Game::Initialize() {
...
@@ -892,6 +912,7 @@ bool Game::Initialize() {
wChat
->
setDrawTitlebar
(
false
);
wChat
->
setDrawTitlebar
(
false
);
wChat
->
setVisible
(
false
);
wChat
->
setVisible
(
false
);
ebChatInput
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
3
,
2
,
710
,
22
),
true
,
wChat
,
EDITBOX_CHAT
);
ebChatInput
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
3
,
2
,
710
,
22
),
true
,
wChat
,
EDITBOX_CHAT
);
editbox_list
.
push_back
(
ebChatInput
);
//swap
//swap
btnSpectatorSwap
=
env
->
addButton
(
rect
<
s32
>
(
205
,
100
,
295
,
135
),
0
,
BUTTON_REPLAY_SWAP
,
dataManager
.
GetSysString
(
1346
));
btnSpectatorSwap
=
env
->
addButton
(
rect
<
s32
>
(
205
,
100
,
295
,
135
),
0
,
BUTTON_REPLAY_SWAP
,
dataManager
.
GetSysString
(
1346
));
btnSpectatorSwap
->
setVisible
(
false
);
btnSpectatorSwap
->
setVisible
(
false
);
...
@@ -961,6 +982,8 @@ bool Game::Initialize() {
...
@@ -961,6 +982,8 @@ bool Game::Initialize() {
col
.
setAlpha
(
224
);
col
.
setAlpha
(
224
);
env
->
getSkin
()
->
setColor
((
EGUI_DEFAULT_COLOR
)
i
,
col
);
env
->
getSkin
()
->
setColor
((
EGUI_DEFAULT_COLOR
)
i
,
col
);
}
}
for
(
auto
ptr
:
editbox_list
)
ptr
->
setMax
(
LEN_CHAT_MSG
-
1
);
dimension2du
size
=
driver
->
getScreenSize
();
dimension2du
size
=
driver
->
getScreenSize
();
if
(
window_size
!=
size
)
{
if
(
window_size
!=
size
)
{
window_size
=
size
;
window_size
=
size
;
...
...
gframe/game.h
View file @
d8b8e8e7
...
@@ -267,6 +267,7 @@ public:
...
@@ -267,6 +267,7 @@ public:
HWND
hWnd
;
HWND
hWnd
;
#endif
#endif
std
::
vector
<
irr
::
gui
::
IGUIEditBox
*
>
editbox_list
;
//GUI
//GUI
irr
::
gui
::
IGUIEnvironment
*
env
;
irr
::
gui
::
IGUIEnvironment
*
env
;
irr
::
gui
::
CGUITTFont
*
guiFont
;
irr
::
gui
::
CGUITTFont
*
guiFont
;
...
...
gframe/gframe.cpp
View file @
d8b8e8e7
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#include "game.h"
#include "game.h"
#include "data_manager.h"
#include "data_manager.h"
#include <event2/thread.h>
#include <event2/thread.h>
#include <locale.h>
#include <memory>
#include <memory>
#ifdef __APPLE__
#ifdef __APPLE__
#import <CoreFoundation/CoreFoundation.h>
#import <CoreFoundation/CoreFoundation.h>
...
...
gframe/netserver.cpp
View file @
d8b8e8e7
...
@@ -9,8 +9,6 @@ event_base* NetServer::net_evbase = 0;
...
@@ -9,8 +9,6 @@ event_base* NetServer::net_evbase = 0;
event
*
NetServer
::
broadcast_ev
=
0
;
event
*
NetServer
::
broadcast_ev
=
0
;
evconnlistener
*
NetServer
::
listener
=
0
;
evconnlistener
*
NetServer
::
listener
=
0
;
DuelMode
*
NetServer
::
duel_mode
=
0
;
DuelMode
*
NetServer
::
duel_mode
=
0
;
unsigned
char
NetServer
::
net_server_read
[
SIZE_NETWORK_BUFFER
];
int
NetServer
::
read_len
=
0
;
unsigned
char
NetServer
::
net_server_write
[
SIZE_NETWORK_BUFFER
];
unsigned
char
NetServer
::
net_server_write
[
SIZE_NETWORK_BUFFER
];
unsigned
short
NetServer
::
last_sent
=
0
;
unsigned
short
NetServer
::
last_sent
=
0
;
...
@@ -109,6 +107,7 @@ void NetServer::ServerAccept(evconnlistener* listener, evutil_socket_t fd, socka
...
@@ -109,6 +107,7 @@ void NetServer::ServerAccept(evconnlistener* listener, evutil_socket_t fd, socka
dp
.
type
=
0xff
;
dp
.
type
=
0xff
;
dp
.
bev
=
bev
;
dp
.
bev
=
bev
;
users
[
bev
]
=
dp
;
users
[
bev
]
=
dp
;
bufferevent_setwatermark
(
bev
,
EV_READ
,
3
,
0
);
bufferevent_setcb
(
bev
,
ServerEchoRead
,
NULL
,
ServerEchoEvent
,
NULL
);
bufferevent_setcb
(
bev
,
ServerEchoRead
,
NULL
,
ServerEchoEvent
,
NULL
);
bufferevent_enable
(
bev
,
EV_READ
);
bufferevent_enable
(
bev
,
EV_READ
);
}
}
...
@@ -123,24 +122,23 @@ void NetServer::ServerAcceptError(evconnlistener* listener, void* ctx) {
...
@@ -123,24 +122,23 @@ void NetServer::ServerAcceptError(evconnlistener* listener, void* ctx) {
void
NetServer
::
ServerEchoRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
void
NetServer
::
ServerEchoRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
int
len
=
evbuffer_get_length
(
input
);
int
len
=
evbuffer_get_length
(
input
);
unsigned
short
packet_len
=
0
;
unsigned
char
*
net_server_read
=
new
unsigned
char
[
std
::
min
(
len
,
SIZE_NETWORK_BUFFER
)];
while
(
true
)
{
unsigned
short
packet_len
;
if
(
len
<
2
)
while
(
len
>=
2
)
{
return
;
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
evbuffer_copyout
(
input
,
&
packet_len
,
2
);
if
(
packet_len
+
2
>
SIZE_NETWORK_BUFFER
)
{
if
(
packet_len
+
2
>
SIZE_NETWORK_BUFFER
)
{
delete
[]
net_server_read
;
ServerEchoEvent
(
bev
,
BEV_EVENT_ERROR
,
0
);
ServerEchoEvent
(
bev
,
BEV_EVENT_ERROR
,
0
);
return
;
return
;
}
}
if
(
len
<
packet_len
+
2
)
if
(
len
<
packet_len
+
2
)
return
;
break
;
if
(
packet_len
<
1
)
int
read_len
=
evbuffer_remove
(
input
,
net_server_read
,
packet_len
+
2
);
return
;
read_len
=
evbuffer_remove
(
input
,
net_server_read
,
packet_len
+
2
);
if
(
read_len
>=
3
)
if
(
read_len
>=
3
)
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
))
{
...
...
gframe/netserver.h
View file @
d8b8e8e7
...
@@ -18,8 +18,6 @@ private:
...
@@ -18,8 +18,6 @@ private:
static
event
*
broadcast_ev
;
static
event
*
broadcast_ev
;
static
evconnlistener
*
listener
;
static
evconnlistener
*
listener
;
static
DuelMode
*
duel_mode
;
static
DuelMode
*
duel_mode
;
static
unsigned
char
net_server_read
[
SIZE_NETWORK_BUFFER
];
static
int
read_len
;
static
unsigned
char
net_server_write
[
SIZE_NETWORK_BUFFER
];
static
unsigned
char
net_server_write
[
SIZE_NETWORK_BUFFER
];
static
unsigned
short
last_sent
;
static
unsigned
short
last_sent
;
...
@@ -50,15 +48,14 @@ public:
...
@@ -50,15 +48,14 @@ public:
template
<
typename
ST
>
template
<
typename
ST
>
static
void
SendPacketToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
ST
&
st
)
{
static
void
SendPacketToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
ST
&
st
)
{
auto
p
=
net_server_write
;
auto
p
=
net_server_write
;
int
blen
=
sizeof
(
ST
);
if
((
int
)
sizeof
(
ST
)
>
MAX_DATA_SIZE
)
if
(
blen
>
MAX_DATA_SIZE
)
return
;
return
;
BufferIO
::
WriteInt16
(
p
,
(
short
)(
1
+
blen
));
BufferIO
::
WriteInt16
(
p
,
(
short
)(
1
+
sizeof
(
ST
)
));
BufferIO
::
WriteInt8
(
p
,
proto
);
BufferIO
::
WriteInt8
(
p
,
proto
);
std
::
memcpy
(
p
,
&
st
,
blen
);
std
::
memcpy
(
p
,
&
st
,
sizeof
(
ST
)
);
last_sent
=
blen
+
3
;
last_sent
=
sizeof
(
ST
)
+
3
;
if
(
dp
)
if
(
dp
)
bufferevent_write
(
dp
->
bev
,
net_server_write
,
blen
+
3
);
bufferevent_write
(
dp
->
bev
,
net_server_write
,
sizeof
(
ST
)
+
3
);
}
}
static
void
SendBufferToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
void
*
buffer
,
size_t
len
)
{
static
void
SendBufferToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
void
*
buffer
,
size_t
len
)
{
auto
p
=
net_server_write
;
auto
p
=
net_server_write
;
...
...
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