Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-router
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
MyCard
ygopro-router
Commits
4e24aafb
Commit
4e24aafb
authored
Jun 21, 2025
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "buffer CTOS_UPDATE_DECK"
This reverts commit
05a4ccb7
.
parent
05a4ccb7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
6 additions
and
21 deletions
+6
-21
main.py
main.py
+6
-21
No files found.
main.py
View file @
4e24aafb
...
@@ -72,14 +72,13 @@ CTOS_EXTERNAL_ADDRESS = 0x17
...
@@ -72,14 +72,13 @@ CTOS_EXTERNAL_ADDRESS = 0x17
CTOS_HS_TODUELIST
=
0x20
CTOS_HS_TODUELIST
=
0x20
CTOS_HS_KICK
=
0x24
CTOS_HS_KICK
=
0x24
STOC_CHANGE_SIDE
=
0x7
STOC_ERROR_MSG
=
0x02
STOC_ERROR_MSG
=
0x02
STOC_CHAT
=
0x19
STOC_CHAT
=
0x19
STOC_JOIN_GAME
=
0x12
STOC_JOIN_GAME
=
0x12
STOC_TYPE_CHANGE
=
0x13
STOC_TYPE_CHANGE
=
0x13
STOC_DUEL_START
=
0x15
STOC_HS_PLAYER_ENTER
=
0x20
STOC_HS_PLAYER_ENTER
=
0x20
async
def
handle_client
(
reader
:
StreamReader
,
writer
:
StreamWriter
):
async
def
handle_client
(
reader
:
StreamReader
,
writer
:
StreamWriter
):
remote_reader
:
StreamReader
=
None
remote_reader
:
StreamReader
=
None
remote_writer
:
StreamWriter
=
None
remote_writer
:
StreamWriter
=
None
...
@@ -121,7 +120,6 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
...
@@ -121,7 +120,6 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
class
State
:
class
State
:
established
=
False
established
=
False
changing_side
=
False
state
=
State
()
state
=
State
()
...
@@ -268,18 +266,12 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
...
@@ -268,18 +266,12 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
async
def
pipe
(
src
:
StreamReader
,
dst
:
StreamWriter
,
direction
:
Union
[
'STOC'
,
'CTOS'
]):
async
def
pipe
(
src
:
StreamReader
,
dst
:
StreamWriter
,
direction
:
Union
[
'STOC'
,
'CTOS'
]):
try
:
try
:
buffered
:
bytes
=
None
while
not
src
.
at_eof
():
while
not
src
.
at_eof
():
header
=
await
src
.
readexactly
(
3
)
header
=
await
src
.
readexactly
(
3
)
length
=
struct
.
unpack
(
'<H'
,
header
[:
2
])[
0
]
length
=
struct
.
unpack
(
'<H'
,
header
[:
2
])[
0
]
packet_id
=
header
[
2
]
packet_id
=
header
[
2
]
logger
.
info
(
f
"Received {direction} packet ID {packet_id} with length {length} for {player_descriptor}"
)
logger
.
info
(
f
"Received {direction} packet ID {packet_id} with length {length} for {player_descriptor}"
)
payload
=
await
src
.
readexactly
(
length
-
1
)
payload
=
await
src
.
readexactly
(
length
-
1
)
if
direction
==
'CTOS'
:
if
packet_id
==
CTOS_UPDATE_DECK
and
not
state
.
changing_side
:
logger
.
info
(
f
"Received CTOS_UPDATE_DECK for {player_descriptor}, but buffer it until the next packet"
)
buffered
=
header
+
payload
continue
if
direction
==
'STOC'
:
if
direction
==
'STOC'
:
if
packet_id
==
STOC_JOIN_GAME
:
if
packet_id
==
STOC_JOIN_GAME
:
state
.
established
=
True
state
.
established
=
True
...
@@ -292,18 +284,11 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
...
@@ -292,18 +284,11 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
logger
.
warning
(
f
"Received error message for {player_descriptor}: {msg} {code}"
)
logger
.
warning
(
f
"Received error message for {player_descriptor}: {msg} {code}"
)
await
close_connection
()
await
close_connection
()
return
return
if
packet_id
==
STOC_CHANGE_SIDE
:
dst
.
write
(
header
)
state
.
changing_side
=
True
dst
.
write
(
payload
)
logger
.
info
(
f
"Changing side for {player_descriptor}"
)
if
not
(
direction
==
'CTOS'
and
packet_id
==
CTOS_UPDATE_DECK
):
if
packet_id
==
STOC_DUEL_START
and
state
.
changing_side
:
# no drain after CTOS_UPDATE_DECK, because it's expected to glue with CTOS_READY
state
.
changing_side
=
False
await
dst
.
drain
()
logger
.
info
(
f
"Side finished for {player_descriptor}"
)
if
buffered
:
logger
.
info
(
f
"Sending buffered CTOS_UPDATE_DECK for {player_descriptor}"
)
dst
.
write
(
buffered
)
buffered
=
None
dst
.
write
(
header
+
payload
)
await
dst
.
drain
()
except
Exception
as
e
:
except
Exception
as
e
:
logger
.
warning
(
f
"Error in pipe {direction} for {player_descriptor}: {e}"
)
logger
.
warning
(
f
"Error in pipe {direction} for {player_descriptor}: {e}"
)
pass
pass
...
...
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