unityzgy/Assets/Scripts/Managers/TCPManager.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

170 lines
4.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DevelopEngine;
using UnityEngine.Events;
using XFramework.NetOuter;
//网络通信管理类
public class TCPManager :Singleton<TCPManager>
{
TcpClient tcpClient;
TcpServer tcpServer;
public void InitNetWork(TcpClient tcp)
{
tcpClient = tcp;
}
public void InitNetWork(TcpServer tcp)
{
this.tcpServer = tcp;
}
/// <summary>
/// Unity主线程中循环调用解析数据
/// </summary>
public void ExtractingMsg()
{
tcpClient?.ExtractingMsg();
tcpServer?.ExtractingMsg();
}
#region
//某客户端断开事件
public void RegisterConnCloseEvent(UnityAction<string,bool> connCloseEvent)
{
tcpServer.connChangeEvent+=connCloseEvent;
}
//发送科目
public void SendSubject<T>(string ip, NetSubNameEnum subName,T record) where T: class
{
ProtocolByte protocol = new ProtocolByte();
protocol.AddString(NetMsgName.Subject.ToString());
protocol.AddInt((int)subName);
protocol.AddClass(record);
tcpServer.Send(ip, protocol);
}
//发送教员评价
public void SendAppraise(string ip, NetAppraiseData appraise)
{
ProtocolByte protocol = new ProtocolByte();
protocol.AddString(NetMsgName.AppraiseResult.ToString());
protocol.AddClass(appraise);
tcpServer.Send(ip, protocol);
}
/// <summary>
/// 发送导调命令
/// </summary>
/// <param name="ip"></param>
/// <param name="startOrQuit">true 代表开始导调 false 结束导调</param>
public void SendAdjusting(string ip,bool startOrQuit)
{
ProtocolByte protocol = new ProtocolByte();
protocol.AddString(NetMsgName.AdjustingToStu.ToString());
protocol.AddBool(startOrQuit);
tcpServer.Send(ip, protocol);
}
//发送登录检查结果到对应的学员端
public void SendLoginResult(bool result, string ip, NetLoginFailureMsg errorMsg)
{
//返回登录结果
ProtocolByte proto = new ProtocolByte();
proto.AddString(NetMsgName.LoginResult.ToString());
if (result)//登陆成功
proto.AddInt(0);
else
{
proto.AddInt(1);
}
proto.AddInt((int)errorMsg);
tcpServer.Send(ip, proto);
}
//发送新增或减少突发事件指令
internal void SendChangeTuFa(string ip,bool value, TuFaData data)
{
IProtoBuilder protoBuilder = new ChangeTufaBuilder(value,data);
tcpServer.Send(ip, protoBuilder.GetProto());
}
//发送科目结束指令
public void SendEndCommand(string ip)
{
ProtocolByte protocol = new ProtocolByte();
protocol.AddString(NetMsgName.EndCommand.ToString());
tcpServer.Send(ip,protocol);
}
//public void Send
internal void RemoveCloseEnvet(UnityAction<string,bool> studentQuit)
{
tcpServer.connChangeEvent -= studentQuit;
}
#endregion
#region
public void RegisterConnectChanged()
{
}
//发送当前学员所处的科目阶段 涉及到是否能够开始导调
public void SendSubStage(NetSubStage netSubStage)
{
SendInt(NetMsgName.ChangeStudentStage, (int)netSubStage);
}
//发送当前学员所处的学习阶段 关系到是否能够再次下发科目
public void SendSubState(LearnState state )
{
SendInt(NetMsgName.StuChangeState, (int)state);
}
private void SendInt(NetMsgName msgName,int value)
{
ProtocolByte protoco = new ProtocolByte();
protoco.AddString(msgName.ToString());
protoco.AddInt((int)value);
tcpClient.Send(protoco);
}
//发送数据类
public void SendNetMsg<T>(T t, NetMsgName msgName) where T : class
{
ProtocolByte protoco = new ProtocolByte();
protoco.AddString(msgName.ToString());
protoco.AddClass(t);
tcpClient.Send(protoco);
}
//发送一个事件消息
public void SendNetMsg(NetMsgName msgName)
{
ProtocolByte protoco = new ProtocolByte();
protoco.AddString(msgName.ToString());
tcpClient.Send(protoco);
}
#endregion
//断开链接
public void Close()
{
tcpClient?.Close();
tcpServer?.Close();
}
}