Commit df6a6060 authored by hex's avatar hex

Rollback TcpHelper.cs; Updaete README.md

parent 835e3805
Pipeline #37860 failed
...@@ -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)
......
# 介绍
这是个人修改版本的 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment