Commit eea918a9 authored by hex's avatar hex

Optimized TcpHelper.cs

parent d2b594a5
Pipeline #38589 failed
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.IO;
using System.Net.Sockets;
using System.Text;
......@@ -12,10 +13,13 @@ public static class TcpHelper
{
public static TcpClient tcpClient = null;
static NetworkStream networkStream = null;
private static NetworkStream networkStream = null;
private static bool canjoin = true;
private static bool roomListChecking = false;
static bool canjoin = true;
static bool roomListChecking = false;
public static bool onDisConnected = false;
private static ConcurrentQueue<byte[]> datas = new ConcurrentQueue<byte[]>();
public static void join(
string ipString,
......@@ -89,123 +93,113 @@ public static class TcpHelper
public static void addDateJumoLine(byte[] data)
{
Monitor.Enter(datas);
// 不再需要手动加锁 Monitor.Enter/Exit
// ConcurrentQueue.Enqueue 本身就是线程安全的。
try
{
datas.Add(data);
datas.Enqueue(data);
}
catch (System.Exception e)
{
// 保留异常处理逻辑
UnityEngine.Debug.Log(e);
}
Monitor.Exit(datas);
}
public static bool onDisConnected = false;
static List<byte[]> datas = new List<byte[]>();
public static void preFrameFunction()
{
if (datas.Count > 0)
while (datas.TryDequeue(out byte[] data))
{
if (Monitor.TryEnter(datas))
try
{
for (int i = 0; i < datas.Count; i++)
MemoryStream memoryStream = new MemoryStream(data);
BinaryReader r = new BinaryReader(memoryStream);
var ms = (StocMessage)(r.ReadByte());
switch (ms)
{
try
{
MemoryStream memoryStream = new MemoryStream(datas[i]);
BinaryReader r = new BinaryReader(memoryStream);
var ms = (StocMessage)(r.ReadByte());
switch (ms)
{
case StocMessage.GameMsg:
Program.I().room.StocMessage_GameMsg(r);
break;
case StocMessage.ErrorMsg:
Program.I().room.StocMessage_ErrorMsg(r);
break;
case StocMessage.SelectHand:
Program.I().room.StocMessage_SelectHand(r);
break;
case StocMessage.SelectTp:
Program.I().room.StocMessage_SelectTp(r);
break;
case StocMessage.HandResult:
Program.I().room.StocMessage_HandResult(r);
break;
case StocMessage.TpResult:
Program.I().room.StocMessage_TpResult(r);
break;
case StocMessage.ChangeSide:
Program.I().room.StocMessage_ChangeSide(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.WaitingSide:
Program.I().room.StocMessage_WaitingSide(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.DeckCount:
Program.I().room.StocMessage_DeckCount(r);
break;
case StocMessage.CreateGame:
Program.I().room.StocMessage_CreateGame(r);
break;
case StocMessage.JoinGame:
Program.I().room.StocMessage_JoinGame(r);
break;
case StocMessage.TypeChange:
Program.I().room.StocMessage_TypeChange(r);
break;
case StocMessage.LeaveGame:
Program.I().room.StocMessage_LeaveGame(r);
break;
case StocMessage.DuelStart:
Program.I().room.StocMessage_DuelStart(r);
break;
case StocMessage.DuelEnd:
Program.I().room.StocMessage_DuelEnd(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.Replay:
Program.I().room.StocMessage_Replay(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.TimeLimit:
Program.I().ocgcore.StocMessage_TimeLimit(r);
break;
case StocMessage.Chat:
Program.I().room.StocMessage_Chat(r);
break;
case StocMessage.HsPlayerEnter:
Program.I().room.StocMessage_HsPlayerEnter(r);
break;
case StocMessage.HsPlayerChange:
Program.I().room.StocMessage_HsPlayerChange(r);
break;
case StocMessage.HsWatchChange:
Program.I().room.StocMessage_HsWatchChange(r);
break;
case StocMessage.TeammateSurrender:
Program.I().room.StocMessage_TeammateSurrender(r);
break;
case YGOSharp.Network.Enums.StocMessage.RoomList:
((Room)Program.I().room).StocMessage_RoomList(r);
break;
default:
break;
}
}
catch (System.Exception e)
{
// Program.DEBUGLOG(e);
}
case StocMessage.GameMsg:
Program.I().room.StocMessage_GameMsg(r);
break;
case StocMessage.ErrorMsg:
Program.I().room.StocMessage_ErrorMsg(r);
break;
case StocMessage.SelectHand:
Program.I().room.StocMessage_SelectHand(r);
break;
case StocMessage.SelectTp:
Program.I().room.StocMessage_SelectTp(r);
break;
case StocMessage.HandResult:
Program.I().room.StocMessage_HandResult(r);
break;
case StocMessage.TpResult:
Program.I().room.StocMessage_TpResult(r);
break;
case StocMessage.ChangeSide:
Program.I().room.StocMessage_ChangeSide(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.WaitingSide:
Program.I().room.StocMessage_WaitingSide(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.DeckCount:
Program.I().room.StocMessage_DeckCount(r);
break;
case StocMessage.CreateGame:
Program.I().room.StocMessage_CreateGame(r);
break;
case StocMessage.JoinGame:
Program.I().room.StocMessage_JoinGame(r);
break;
case StocMessage.TypeChange:
Program.I().room.StocMessage_TypeChange(r);
break;
case StocMessage.LeaveGame:
Program.I().room.StocMessage_LeaveGame(r);
break;
case StocMessage.DuelStart:
Program.I().room.StocMessage_DuelStart(r);
break;
case StocMessage.DuelEnd:
Program.I().room.StocMessage_DuelEnd(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.Replay:
Program.I().room.StocMessage_Replay(r);
// TcpHelper.SaveRecord();
break;
case StocMessage.TimeLimit:
Program.I().ocgcore.StocMessage_TimeLimit(r);
break;
case StocMessage.Chat:
Program.I().room.StocMessage_Chat(r);
break;
case StocMessage.HsPlayerEnter:
Program.I().room.StocMessage_HsPlayerEnter(r);
break;
case StocMessage.HsPlayerChange:
Program.I().room.StocMessage_HsPlayerChange(r);
break;
case StocMessage.HsWatchChange:
Program.I().room.StocMessage_HsWatchChange(r);
break;
case StocMessage.TeammateSurrender:
Program.I().room.StocMessage_TeammateSurrender(r);
break;
case YGOSharp.Network.Enums.StocMessage.RoomList:
((Room)Program.I().room).StocMessage_RoomList(r);
break;
default:
break;
}
datas.Clear();
Monitor.Exit(datas);
}
catch (System.Exception e)
{
// Program.DEBUGLOG(e);
}
}
if (onDisConnected == true)
{
onDisConnected = false;
......
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