using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using DevelopEngine; using UnityEngine.Events; using XFramework.NetOuter; //网络通信管理类 public class TCPManager :Singleton { TcpClient tcpClient; TcpServer tcpServer; public void InitNetWork(TcpClient tcp) { tcpClient = tcp; } public void InitNetWork(TcpServer tcp) { this.tcpServer = tcp; } /// /// Unity主线程中循环调用解析数据 /// public void ExtractingMsg() { tcpClient?.ExtractingMsg(); tcpServer?.ExtractingMsg(); } #region 教师端调用 //某客户端断开事件 public void RegisterConnCloseEvent(UnityAction connCloseEvent) { tcpServer.connChangeEvent+=connCloseEvent; } //发送科目 public void SendSubject(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); } /// /// 发送导调命令 /// /// /// true 代表开始导调 false 结束导调 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 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, 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(); } }