Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
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
hex
ygopro2
Commits
df6a6060
Commit
df6a6060
authored
Jun 20, 2025
by
hex
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rollback TcpHelper.cs; Updaete README.md
parent
835e3805
Pipeline
#37860
failed
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
137 additions
and
176 deletions
+137
-176
Assets/SibylSystem/MonoHelpers/TcpHelper.cs
Assets/SibylSystem/MonoHelpers/TcpHelper.cs
+123
-176
README.md
README.md
+14
-0
No files found.
Assets/SibylSystem/MonoHelpers/TcpHelper.cs
View file @
df6a6060
...
@@ -40,7 +40,6 @@ public static class TcpHelper
...
@@ -40,7 +40,6 @@ public static class TcpHelper
networkStream
=
tcpClient
.
GetStream
();
networkStream
=
tcpClient
.
GetStream
();
Thread
t
=
new
Thread
(
receiver
);
Thread
t
=
new
Thread
(
receiver
);
t
.
Start
();
t
.
Start
();
StartSendThread
();
CtosMessage_PlayerInfo
(
name
);
CtosMessage_PlayerInfo
(
name
);
if
(
pswString
==
"L"
)
if
(
pswString
==
"L"
)
{
{
...
@@ -89,149 +88,121 @@ public static class TcpHelper
...
@@ -89,149 +88,121 @@ public static class TcpHelper
public
static
void
addDateJumoLine
(
byte
[]
data
)
public
static
void
addDateJumoLine
(
byte
[]
data
)
{
{
lock
(
datasLock
)
Monitor
.
Enter
(
datas
);
try
{
{
datas
.
Enqueue
(
data
);
datas
.
Add
(
data
);
}
}
}
catch
(
System
.
Exception
e
)
public
static
bool
onDisConnected
=
false
;
static
Queue
<
byte
[
]>
datas
=
new
Queue
<
byte
[
]>
();
static
object
datasLock
=
new
object
();
static
object
locker
=
new
object
();
public
static
void
StartSendThread
()
{
if
(
sendThread
==
null
)
{
{
sendThreadRunning
=
true
;
UnityEngine
.
Debug
.
Log
(
e
);
sendThread
=
new
Thread
(
SendThreadFunc
);
sendThread
.
IsBackground
=
true
;
sendThread
.
Start
();
}
}
Monitor
.
Exit
(
datas
);
}
}
static
void
StopSendThread
()
public
static
bool
onDisConnected
=
false
;
{
sendThreadRunning
=
false
;
static
List
<
byte
[
]>
datas
=
new
List
<
byte
[
]>
();
if
(
sendThread
!=
null
)
{
try
{
if
(!
sendThread
.
Join
(
100
))
{
sendThread
.
Abort
();
}
}
catch
{
}
sendThread
=
null
;
}
}
public
static
void
preFrameFunction
()
public
static
void
preFrameFunction
()
{
{
byte
[][]
packets
=
null
;
if
(
datas
.
Count
>
0
)
lock
(
datasLock
)
{
if
(
datas
.
Count
>
0
)
{
packets
=
datas
.
ToArray
();
datas
.
Clear
();
}
}
if
(
packets
!=
null
)
{
{
for
(
int
i
=
0
;
i
<
packets
.
Length
;
i
++
)
if
(
Monitor
.
TryEnter
(
datas
)
)
{
{
try
for
(
int
i
=
0
;
i
<
datas
.
Count
;
i
++)
{
{
MemoryStream
memoryStream
=
new
MemoryStream
(
packets
[
i
]);
try
BinaryReader
r
=
new
BinaryReader
(
memoryStream
);
var
ms
=
(
StocMessage
)(
r
.
ReadByte
());
switch
(
ms
)
{
{
case
StocMessage
.
GameMsg
:
MemoryStream
memoryStream
=
new
MemoryStream
(
datas
[
i
]);
Program
.
I
().
room
.
StocMessage_GameMsg
(
r
);
BinaryReader
r
=
new
BinaryReader
(
memoryStream
);
break
;
var
ms
=
(
StocMessage
)(
r
.
ReadByte
());
case
StocMessage
.
ErrorMsg
:
switch
(
ms
)
Program
.
I
().
room
.
StocMessage_ErrorMsg
(
r
);
{
break
;
case
StocMessage
.
GameMsg
:
case
StocMessage
.
SelectHand
:
Program
.
I
().
room
.
StocMessage_GameMsg
(
r
);
Program
.
I
().
room
.
StocMessage_SelectHand
(
r
);
break
;
break
;
case
StocMessage
.
ErrorMsg
:
case
StocMessage
.
SelectTp
:
Program
.
I
().
room
.
StocMessage_ErrorMsg
(
r
);
Program
.
I
().
room
.
StocMessage_SelectTp
(
r
);
break
;
break
;
case
StocMessage
.
SelectHand
:
case
StocMessage
.
HandResult
:
Program
.
I
().
room
.
StocMessage_SelectHand
(
r
);
Program
.
I
().
room
.
StocMessage_HandResult
(
r
);
break
;
break
;
case
StocMessage
.
SelectTp
:
case
StocMessage
.
TpResult
:
Program
.
I
().
room
.
StocMessage_SelectTp
(
r
);
Program
.
I
().
room
.
StocMessage_TpResult
(
r
);
break
;
break
;
case
StocMessage
.
HandResult
:
case
StocMessage
.
ChangeSide
:
Program
.
I
().
room
.
StocMessage_HandResult
(
r
);
Program
.
I
().
room
.
StocMessage_ChangeSide
(
r
);
break
;
TcpHelper
.
SaveRecord
();
case
StocMessage
.
TpResult
:
break
;
Program
.
I
().
room
.
StocMessage_TpResult
(
r
);
case
StocMessage
.
WaitingSide
:
break
;
Program
.
I
().
room
.
StocMessage_WaitingSide
(
r
);
case
StocMessage
.
ChangeSide
:
TcpHelper
.
SaveRecord
();
Program
.
I
().
room
.
StocMessage_ChangeSide
(
r
);
break
;
TcpHelper
.
SaveRecord
();
case
StocMessage
.
DeckCount
:
break
;
Program
.
I
().
room
.
StocMessage_DeckCount
(
r
);
case
StocMessage
.
WaitingSide
:
break
;
Program
.
I
().
room
.
StocMessage_WaitingSide
(
r
);
case
StocMessage
.
CreateGame
:
TcpHelper
.
SaveRecord
();
Program
.
I
().
room
.
StocMessage_CreateGame
(
r
);
break
;
break
;
case
StocMessage
.
DeckCount
:
case
StocMessage
.
JoinGame
:
Program
.
I
().
room
.
StocMessage_DeckCount
(
r
);
Program
.
I
().
room
.
StocMessage_JoinGame
(
r
);
break
;
break
;
case
StocMessage
.
CreateGame
:
case
StocMessage
.
TypeChange
:
Program
.
I
().
room
.
StocMessage_CreateGame
(
r
);
Program
.
I
().
room
.
StocMessage_TypeChange
(
r
);
break
;
break
;
case
StocMessage
.
JoinGame
:
case
StocMessage
.
LeaveGame
:
Program
.
I
().
room
.
StocMessage_JoinGame
(
r
);
Program
.
I
().
room
.
StocMessage_LeaveGame
(
r
);
break
;
break
;
case
StocMessage
.
TypeChange
:
case
StocMessage
.
DuelStart
:
Program
.
I
().
room
.
StocMessage_TypeChange
(
r
);
Program
.
I
().
room
.
StocMessage_DuelStart
(
r
);
break
;
break
;
case
StocMessage
.
LeaveGame
:
case
StocMessage
.
DuelEnd
:
Program
.
I
().
room
.
StocMessage_LeaveGame
(
r
);
Program
.
I
().
room
.
StocMessage_DuelEnd
(
r
);
break
;
TcpHelper
.
SaveRecord
();
case
StocMessage
.
DuelStart
:
break
;
Program
.
I
().
room
.
StocMessage_DuelStart
(
r
);
case
StocMessage
.
Replay
:
break
;
Program
.
I
().
room
.
StocMessage_Replay
(
r
);
case
StocMessage
.
DuelEnd
:
TcpHelper
.
SaveRecord
();
Program
.
I
().
room
.
StocMessage_DuelEnd
(
r
);
break
;
TcpHelper
.
SaveRecord
();
case
StocMessage
.
TimeLimit
:
break
;
Program
.
I
().
ocgcore
.
StocMessage_TimeLimit
(
r
);
case
StocMessage
.
Replay
:
break
;
Program
.
I
().
room
.
StocMessage_Replay
(
r
);
case
StocMessage
.
Chat
:
TcpHelper
.
SaveRecord
();
Program
.
I
().
room
.
StocMessage_Chat
(
r
);
break
;
break
;
case
StocMessage
.
TimeLimit
:
case
StocMessage
.
HsPlayerEnter
:
Program
.
I
().
ocgcore
.
StocMessage_TimeLimit
(
r
);
Program
.
I
().
room
.
StocMessage_HsPlayerEnter
(
r
);
break
;
break
;
case
StocMessage
.
Chat
:
case
StocMessage
.
HsPlayerChange
:
Program
.
I
().
room
.
StocMessage_Chat
(
r
);
Program
.
I
().
room
.
StocMessage_HsPlayerChange
(
r
);
break
;
break
;
case
StocMessage
.
HsPlayerEnter
:
case
StocMessage
.
HsWatchChange
:
Program
.
I
().
room
.
StocMessage_HsPlayerEnter
(
r
);
Program
.
I
().
room
.
StocMessage_HsWatchChange
(
r
);
break
;
break
;
case
StocMessage
.
HsPlayerChange
:
case
StocMessage
.
TeammateSurrender
:
Program
.
I
().
room
.
StocMessage_HsPlayerChange
(
r
);
Program
.
I
().
room
.
StocMessage_TeammateSurrender
(
r
);
break
;
break
;
case
StocMessage
.
HsWatchChange
:
case
YGOSharp
.
Network
.
Enums
.
StocMessage
.
RoomList
:
Program
.
I
().
room
.
StocMessage_HsWatchChange
(
r
);
((
Room
)
Program
.
I
().
room
).
StocMessage_RoomList
(
r
);
break
;
break
;
case
StocMessage
.
TeammateSurrender
:
default
:
Program
.
I
().
room
.
StocMessage_TeammateSurrender
(
r
);
break
;
break
;
case
YGOSharp
.
Network
.
Enums
.
StocMessage
.
RoomList
:
((
Room
)
Program
.
I
().
room
).
StocMessage_RoomList
(
r
);
break
;
default
:
break
;
}
}
catch
(
System
.
Exception
e
)
{
// Program.DEBUGLOG(e);
}
}
}
}
catch
(
System
.
Exception
e
)
datas
.
Clear
();
{
Monitor
.
Exit
(
datas
);
// Program.DEBUGLOG(e);
}
}
}
}
}
if
(
onDisConnected
==
true
)
if
(
onDisConnected
==
true
)
...
@@ -256,8 +227,6 @@ public static class TcpHelper
...
@@ -256,8 +227,6 @@ public static class TcpHelper
}
}
tcpClient
=
null
;
tcpClient
=
null
;
StopSendThread
();
if
(
Program
.
I
().
ocgcore
.
isShowed
==
false
)
if
(
Program
.
I
().
ocgcore
.
isShowed
==
false
)
{
{
if
(
Program
.
I
().
menu
.
isShowed
==
false
)
if
(
Program
.
I
().
menu
.
isShowed
==
false
)
...
@@ -288,61 +257,39 @@ public static class TcpHelper
...
@@ -288,61 +257,39 @@ public static class TcpHelper
}
}
}
}
static
Queue
<
Package
>
sendQueue
=
new
Queue
<
Package
>();
public
static
void
Send
(
Package
message
)
static
object
sendLock
=
new
object
();
static
Thread
sendThread
=
null
;
static
bool
sendThreadRunning
=
false
;
static
void
SendThreadFunc
()
{
{
while
(
sendThreadRunning
)
if
(
tcpClient
!=
null
&&
tcpClient
.
Connected
)
{
{
Package
pkg
=
null
;
Thread
t
=
new
Thread
(
sender
);
lock
(
sendLock
)
t
.
Start
(
message
);
{
if
(
sendQueue
.
Count
>
0
)
{
pkg
=
sendQueue
.
Dequeue
();
}
}
if
(
pkg
!=
null
)
{
try
{
lock
(
locker
)
{
byte
[]
data
=
pkg
.
Data
.
get
();
MemoryStream
memstream
=
new
MemoryStream
();
BinaryWriter
b
=
new
BinaryWriter
(
memstream
);
b
.
Write
(
BitConverter
.
GetBytes
((
Int16
)
data
.
Length
+
1
),
0
,
2
);
b
.
Write
(
BitConverter
.
GetBytes
((
byte
)
pkg
.
Fuction
),
0
,
1
);
b
.
Write
(
data
,
0
,
data
.
Length
);
byte
[]
s
=
memstream
.
ToArray
();
tcpClient
.
Client
.
Send
(
s
);
}
}
catch
(
Exception
e
)
{
onDisConnected
=
true
;
Program
.
DEBUGLOG
(
"onDisConnected 5"
);
}
}
else
{
Thread
.
Sleep
(
2
);
// 避免空转
}
}
}
}
}
public
static
void
Send
(
Package
message
)
static
object
locker
=
new
object
();
static
void
sender
(
object
o
)
{
{
if
(
tcpClient
!=
null
&&
tcpClient
.
Connected
)
try
{
{
lock
(
sendLock
)
lock
(
locker
)
{
{
sendQueue
.
Enqueue
(
message
);
Package
message
=
(
Package
)
o
;
byte
[]
data
=
message
.
Data
.
get
();
MemoryStream
memstream
=
new
MemoryStream
();
BinaryWriter
b
=
new
BinaryWriter
(
memstream
);
b
.
Write
(
BitConverter
.
GetBytes
((
Int16
)
data
.
Length
+
1
),
0
,
2
);
b
.
Write
(
BitConverter
.
GetBytes
((
byte
)
message
.
Fuction
),
0
,
1
);
b
.
Write
(
data
,
0
,
data
.
Length
);
byte
[]
s
=
memstream
.
ToArray
();
tcpClient
.
Client
.
Send
(
s
);
}
}
}
}
catch
(
Exception
e
)
{
onDisConnected
=
true
;
Program
.
DEBUGLOG
(
"onDisConnected 5"
);
}
}
}
public
static
void
CtosMessage_Response
(
byte
[]
response
)
public
static
void
CtosMessage_Response
(
byte
[]
response
)
...
...
README.md
View file @
df6a6060
# 介绍
这是个人修改版本的 KoishiPro2 iOS.
包含以下功能:
1.
结算界面卡顿问题修复;
2.
主界面卡顿问题修复,启动速度加快;
3.
调整的分辨率设置会保存,启动后默认使用上一次的分辨率设置。默认分辨率调整为 1600x900。
4.
服务器列表增加 EXP 服和 MYGO 超先行服;
5.
“设置”见面乱点无法关闭问题修复;
6.
双击添加卡牌修改为长按添加卡牌(腱鞘炎福音);
7.
下载代码规范化,使用官方异步下载写法,不影响主线程,让界面更流畅。
8.
暴力适配 ios 刘海屏,左侧卡片描述区域在刘海屏上减少遮挡
# Download game
# Download game
https://hexzhou.github.io/posts/00008-ygopro2ios-note/
https://koishi.pro/download.html
https://koishi.pro/download.html
# Notes for MyCard Helper
# Notes for MyCard Helper
...
...
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