You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
4.7 KiB
147 lines
4.7 KiB
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.Events; |
|
using QFrameworkCP; |
|
using JXSoft; |
|
using System; |
|
using System.Threading; |
|
using UnityEngine.UI; |
|
|
|
namespace JXSoft { |
|
public class TCPMangerArchitecture : Architecture<TCPMangerArchitecture> |
|
{ |
|
protected override void Init() |
|
{ |
|
this.RegisterUtility(new TCPUtility()); |
|
this.RegisterModel(new TCPEventModel()); |
|
} |
|
} |
|
public class TCPClientView : MonoBehaviour,IController,ICanRegisterEvent |
|
{ |
|
//Printer&MsgGetter |
|
private TCPUtility tcpUtil; |
|
public Transform tcpMsgContent; |
|
public GameObject tcpMsgItem; |
|
|
|
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); |
|
tcpUtil = GetArchitecture().GetUtility<TCPUtility>(); |
|
} |
|
|
|
public void initTCPService() { |
|
tcpAddress = "127.0.0.1"; |
|
tcpPort = 20000; |
|
deviceId = 1; |
|
|
|
this.RegisterEvent<LinkStateChangedEvent>(e => { |
|
if (e.linkState == (int)TCPLinkState.Linking) |
|
{ |
|
Debug.Log("TCP¿ªÊ¼Á´½Ó"); |
|
this.GetModel<TCPEventModel>().linkServer(); |
|
} |
|
if (e.linkState == (int)TCPLinkState.LinkSucess) |
|
{ |
|
Debug.Log("TCPÁ´½Ó³É¹¦"); |
|
this.GetModel<TCPEventModel>().onReceive<LinkSuccessResponse>(); |
|
this.GetModel<TCPEventModel>().sendRequestCommand(new LinkTCPRequest(deviceId)); |
|
onTCPLinkSuccess.Invoke(); |
|
} |
|
if (e.linkState == (int)TCPLinkState.LinkFaild) |
|
{ |
|
Debug.Log("TCPÁ¬½Óʧ°Ü£¬ÇëÁªÏµÉ豸·þÎñ¹ÜÀíÔ±"); |
|
onTCPLinkFaild.Invoke(); |
|
} |
|
}); |
|
|
|
this.RegisterEvent<ResponseMsgEvent>(e => |
|
{ |
|
if (e.res.GetType() == typeof(LinkSuccessResponse)) |
|
{ |
|
Debug.Log("Link Server success"); |
|
this.GetModel<TCPEventModel>().offReceive<LinkSuccessResponse>(); |
|
onServerConnected.Invoke(); |
|
} |
|
}); |
|
|
|
this.GetModel<TCPEventModel>().setLinkState((int)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>().setLinkState((int)TCPLinkState.Linking); |
|
} |
|
|
|
// Update is called once per frame |
|
void Update() |
|
{ |
|
//Debug.Log(tcpUtil.Read_TCPClient()); |
|
if (tcpUtil != null && !"".Equals(tcpUtil.getReceivedValue())) |
|
{ |
|
GameObject item = Instantiate(tcpMsgItem, tcpMsgContent); |
|
item.GetComponentInChildren<Text>().text = tcpUtil.receivedData; |
|
this.GetModel<TCPEventModel>().onDataRecived.Invoke(tcpUtil.receivedData); |
|
} |
|
if (tcpUtil.getTimeOutState() && tcpUtil.isOpenTCP) |
|
{ |
|
this.SendEvent(new onLinkException(tcpUtil.exceptionData)); |
|
tcpUtil.isOpenTCP = false; |
|
} |
|
} |
|
private void OnDestroy() |
|
{ |
|
if (tcpUtil.reciveT != null && tcpUtil.reciveT.ThreadState == ThreadState.Running) |
|
{ |
|
tcpUtil.reciveT.Abort(); |
|
} |
|
} |
|
|
|
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 toProtocolData() |
|
{ |
|
return JsonUtility.ToJson(this); |
|
} |
|
} |
|
} |
|
|
|
|