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
05a4ccb7
Commit
05a4ccb7
authored
Jun 21, 2025
by
nanahira
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
buffer CTOS_UPDATE_DECK
parent
759eccfe
Pipeline
#37915
passed with stages
in 24 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
6 deletions
+21
-6
main.py
main.py
+21
-6
No files found.
main.py
View file @
05a4ccb7
...
...
@@ -72,13 +72,14 @@ CTOS_EXTERNAL_ADDRESS = 0x17
CTOS_HS_TODUELIST
=
0x20
CTOS_HS_KICK
=
0x24
STOC_CHANGE_SIDE
=
0x7
STOC_ERROR_MSG
=
0x02
STOC_CHAT
=
0x19
STOC_JOIN_GAME
=
0x12
STOC_TYPE_CHANGE
=
0x13
STOC_DUEL_START
=
0x15
STOC_HS_PLAYER_ENTER
=
0x20
async
def
handle_client
(
reader
:
StreamReader
,
writer
:
StreamWriter
):
remote_reader
:
StreamReader
=
None
remote_writer
:
StreamWriter
=
None
...
...
@@ -120,6 +121,7 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
class
State
:
established
=
False
changing_side
=
False
state
=
State
()
...
...
@@ -266,12 +268,18 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
async
def
pipe
(
src
:
StreamReader
,
dst
:
StreamWriter
,
direction
:
Union
[
'STOC'
,
'CTOS'
]):
try
:
buffered
:
bytes
=
None
while
not
src
.
at_eof
():
header
=
await
src
.
readexactly
(
3
)
length
=
struct
.
unpack
(
'<H'
,
header
[:
2
])[
0
]
packet_id
=
header
[
2
]
logger
.
info
(
f
"Received {direction} packet ID {packet_id} with length {length} for {player_descriptor}"
)
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
packet_id
==
STOC_JOIN_GAME
:
state
.
established
=
True
...
...
@@ -284,11 +292,18 @@ async def handle_client(reader: StreamReader, writer: StreamWriter):
logger
.
warning
(
f
"Received error message for {player_descriptor}: {msg} {code}"
)
await
close_connection
()
return
dst
.
write
(
header
)
dst
.
write
(
payload
)
if
not
(
direction
==
'CTOS'
and
packet_id
==
CTOS_UPDATE_DECK
):
# no drain after CTOS_UPDATE_DECK, because it's expected to glue with CTOS_READY
await
dst
.
drain
()
if
packet_id
==
STOC_CHANGE_SIDE
:
state
.
changing_side
=
True
logger
.
info
(
f
"Changing side for {player_descriptor}"
)
if
packet_id
==
STOC_DUEL_START
and
state
.
changing_side
:
state
.
changing_side
=
False
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
:
logger
.
warning
(
f
"Error in pipe {direction} for {player_descriptor}: {e}"
)
pass
...
...
nanahira
@nanahira
mentioned in commit
4e24aafb
·
Jun 21, 2025
mentioned in commit
4e24aafb
mentioned in commit 4e24aafb5082a20bd606361dc972d1d5e0743c25
Toggle commit list
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