|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.Events;
|
|
|
|
using QFrameworkCP;
|
|
|
|
using System;
|
|
|
|
|
|
|
|
namespace JXSoft {
|
|
|
|
public class UDPMangerArchitecture : Architecture<UDPMangerArchitecture>
|
|
|
|
{
|
|
|
|
protected override void Init()
|
|
|
|
{
|
|
|
|
this.RegisterUtility(new UDPUtility());
|
|
|
|
this.RegisterModel(new UDPClientModel());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class UDPClientView : MonoBehaviour, IController
|
|
|
|
{
|
|
|
|
public UnityEvent onRecievedOpenDevice;
|
|
|
|
public UnityEvent onUDPLinkSuccess;
|
|
|
|
public UnityEvent onUDPLinkFaild;
|
|
|
|
public UnityEvent onServerConnected;
|
|
|
|
public UnityEvent onUDPReLink;
|
|
|
|
|
|
|
|
private string UDPAddress;
|
|
|
|
private int UDPPort;
|
|
|
|
private int deviceId;
|
|
|
|
// Start is called before the first frame update
|
|
|
|
void Awake()
|
|
|
|
{
|
|
|
|
initUDPService();
|
|
|
|
DontDestroyOnLoad(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void initUDPService()
|
|
|
|
{
|
|
|
|
UDPAddress = "127.0.0.1";
|
|
|
|
UDPPort = 20000;
|
|
|
|
deviceId = 1;
|
|
|
|
|
|
|
|
GetArchitecture().RegisterEvent<UDPStateChangedEvent>(e => {
|
|
|
|
if (e.state == UDPLinkState.Linking)
|
|
|
|
{
|
|
|
|
Debug.Log("UDP开始链接");
|
|
|
|
this.GetModel<UDPClientModel>().linkServer();
|
|
|
|
}
|
|
|
|
if (e.state == UDPLinkState.LinkSucess)
|
|
|
|
{
|
|
|
|
Debug.Log("UDP链接成功");
|
|
|
|
this.GetModel<UDPClientModel>().sendRequest(new LinkUDPRequest(deviceId));
|
|
|
|
onUDPLinkSuccess.Invoke();
|
|
|
|
}
|
|
|
|
if (e.state == UDPLinkState.LinkFaild)
|
|
|
|
{
|
|
|
|
Debug.Log("UDP连接失败,请联系设备服务管理员");
|
|
|
|
onUDPLinkFaild.Invoke();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
this.GetModel<UDPClientModel>().setLinkState((int)UDPLinkState.NoIp);
|
|
|
|
this.GetModel<UDPClientModel>().setIP(UDPAddress, UDPPort);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void restartUDPService()
|
|
|
|
{
|
|
|
|
onUDPReLink.Invoke();
|
|
|
|
this.GetModel<UDPClientModel>().closeServer();
|
|
|
|
StartCoroutine(waitTwoSecond());
|
|
|
|
}
|
|
|
|
public IEnumerator waitTwoSecond()
|
|
|
|
{
|
|
|
|
yield return new WaitForSeconds(2.0f);
|
|
|
|
this.GetModel<UDPClientModel>().setLinkState((int)UDPLinkState.Linking);
|
|
|
|
}
|
|
|
|
public IArchitecture GetArchitecture()
|
|
|
|
{
|
|
|
|
return UDPMangerArchitecture.Interface;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public class LinkUDPRequest : IRequest
|
|
|
|
{
|
|
|
|
public string id;
|
|
|
|
public int type;
|
|
|
|
public LinkUDPRequest(int id)
|
|
|
|
{
|
|
|
|
this.id = id.ToString();
|
|
|
|
this.type = 1;
|
|
|
|
}
|
|
|
|
public string toProtocolData()
|
|
|
|
{
|
|
|
|
return JsonUtility.ToJson(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|