金铉Unity插件库 Unity版本2018.4.32f 目前包含本地化存储功能(根据类名存储读写),TCP客户端监听类型功能
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.

106 lines
2.9 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using QFramework;
using System;
public class UDPMangerArchitecture : Architecture<UDPMangerArchitecture>
{
protected override void Init()
{
this.RegisterUtility(new UDPUtility());
this.RegisterModel(new UDPEventModel());
}
}
public class UDPClientView : MonoBehaviour, IController, ICanSendEvent
{
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<UDPEventModel>().linkServer();
}
if (e.state == UDPLinkState.LinkSucess)
{
Debug.Log("UDP链接成功");
this.GetModel<UDPEventModel>().onReceive<LinkSuccessResponse>();
this.GetModel<UDPEventModel>().sendRequestCommand(new LinkUDPRequest(deviceId));
onUDPLinkSuccess.Invoke();
}
if (e.state == UDPLinkState.LinkFaild)
{
Debug.Log("UDP连接失败,请联系设备服务管理员");
onUDPLinkFaild.Invoke();
}
});
GetArchitecture().RegisterEvent<ResponseMsgEvent>(e =>
{
if (e.res.GetType() == typeof(LinkSuccessResponse))
{
Debug.Log("Link Server success");
this.GetModel<UDPEventModel>().offReceive<LinkSuccessResponse>();
onServerConnected.Invoke();
}
});
this.GetModel<UDPEventModel>().setUDPState(UDPLinkState.NoIp);
this.GetModel<UDPEventModel>().setIP(UDPAddress, UDPPort);
}
public void restartUDPService()
{
onUDPReLink.Invoke();
this.GetModel<UDPEventModel>().closeServer();
StartCoroutine(waitTwoSecond());
}
public IEnumerator waitTwoSecond()
{
yield return new WaitForSeconds(2.0f);
this.GetModel<UDPEventModel>().setUDPState(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 toJson()
{
return JsonUtility.ToJson(this);
}
}