using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using QFramework; using TCPClientTools; using System; public class TCPMangerArchitecture : Architecture<TCPMangerArchitecture> { protected override void Init() { this.RegisterUtility(new TCPUtility()); this.RegisterModel(new TCPEventModel()); } } public class TCPClientView : MonoBehaviour,IController,ICanSendEvent { public UnityEvent onRecievedOpenDevice; public UnityEvent onTCPLinkSuccess; public UnityEvent onTCPLinkFaild; public UnityEvent onServerConnected; public UnityEvent onTCPReLink; private string tcpAddress; private int tcpPort; private int deviceId; // Start is called before the first frame update void Awake() { initTCPService(); DontDestroyOnLoad(this); } public void initTCPService() { tcpAddress = "127.0.0.1"; tcpPort = 20000; deviceId = 1; GetArchitecture().RegisterEvent<TCPStateChangedEvent>(e => { if (e.state == TCPLinkState.Linking) { Debug.Log("TCP��ʼ����"); this.GetModel<TCPEventModel>().linkServer(); } if (e.state == TCPLinkState.LinkSucess) { Debug.Log("TCP���ӳɹ�"); this.GetModel<TCPEventModel>().onReceive<LinkSuccessResponse>(); this.GetModel<TCPEventModel>().sendRequestCommand(new LinkTCPRequest(deviceId)); onTCPLinkSuccess.Invoke(); } if (e.state == TCPLinkState.LinkFaild) { Debug.Log("TCP����ʧ�ܣ�����ϵ�豸�������Ա"); onTCPLinkFaild.Invoke(); } }); GetArchitecture().RegisterEvent<ResponseMsgEvent>(e => { if (e.res.GetType() == typeof(LinkSuccessResponse)) { Debug.Log("Link Server success"); this.GetModel<TCPEventModel>().offReceive<LinkSuccessResponse>(); onServerConnected.Invoke(); } }); this.GetModel<TCPEventModel>().setTCPState(TCPLinkState.NoIp); this.GetModel<TCPEventModel>().setIP(tcpAddress, tcpPort); } public void restartTCPService() { onTCPReLink.Invoke(); this.GetModel<TCPEventModel>().closeServer(); StartCoroutine(waitTwoSecond()); } public IEnumerator waitTwoSecond() { yield return new WaitForSeconds(2.0f); this.GetModel<TCPEventModel>().setTCPState(TCPLinkState.Linking); } public IArchitecture GetArchitecture() { return TCPMangerArchitecture.Interface; } } public class LinkSuccessResponse : AbstractResponse { public string code; public string data; public string msg; public LinkSuccessResponse() { this.code = ""; this.data = ""; this.msg = ""; } } public class LinkTCPRequest :IRequest{ public string id; public int type; public LinkTCPRequest(int id) { this.id = id.ToString(); this.type = 1; } public string toJson() { return JsonUtility.ToJson(this); } }