金铉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.

124 lines
3.6 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using QFrameworkCP;
namespace JXSoft {
public class UDPEventModel : DataEventModel
{
private UDPLinkState udpState = UDPLinkState.NoIp;
private string udpAddress = "";
private int udpPort = 0;
public string myAddress = "";
protected override void OnInit()
{
this.RegisterEvent<onUDPLinkException>(e => {
setLinkState((int)UDPLinkState.LinkTimeOut);
this.GetUtility<UDPUtility>().CloseUDPClient();
});
this.RegisterEvent<RequestMsgEvent>(e => {
if (this.GetUtility<UDPUtility>().isOpenUDP)
{
this.GetUtility<UDPUtility>().sendData(e.req.toProtocolData());
}
else
{
Debug.LogWarning("请先开启UDP链接");
}
});
}
public override void setLinkState(int linkStatus)
{
this.udpState = (UDPLinkState)linkStatus;
this.SendEvent(new LinkStateChangedEvent(linkStatus));
}
public override int getLinkState()
{
return (int)this.udpState;
}
/// <summary>
/// 设置对应IP,设置完毕后,自动进入链接状态(此时需要用户手动监听是否要进行链接服务器)
/// </summary>
/// <param name="ip">ip地址</param>
/// <param name="port">端口号</param>
public void setIP(string ip, int port)
{
this.udpAddress = ip;
this.udpPort = port;
//此处可以加ip校验
Debug.LogWarning("此处未进行ip以及端口号校验,日后有需求可以增加");
setLinkState((int)UDPLinkState.Linking);
}
/// <summary>
/// 与服务端建立链接
/// </summary>
public void linkServer()
{
if (udpState == UDPLinkState.Linking)
{
if (!this.GetUtility<UDPUtility>().isOpenUDP)
{
bool isSuccess = this.GetUtility<UDPUtility>().StartUDPClient(udpAddress, udpPort);
if (isSuccess)
{
setLinkState((int)UDPLinkState.LinkSucess);
}
else
{
setLinkState((int)UDPLinkState.LinkFaild);
}
}
}
}
/// <summary>
/// 与服务端断开链接
/// </summary>
public void closeServer()
{
if (udpState == UDPLinkState.LinkSucess)
{
if (this.GetUtility<UDPUtility>().isOpenUDP)
{
this.GetUtility<UDPUtility>().CloseUDPClient();
setLinkState((int)UDPLinkState.NoIp);
}
}
}
}
#region enum
public enum UDPLinkState
{
NoIp = 0,
Linking = 1,
LinkFaild = 2,
LinkSucess = 3,
LinkTimeOut = 4
}
#endregion
#region event
public struct UDPStateChangedEvent
{
public UDPLinkState state;
public UDPStateChangedEvent(UDPLinkState state_)
{
state = state_;
}
}
public struct onUDPLinkException
{
public string exceptionMsg;
public onUDPLinkException(string exceptionMsg_)
{
exceptionMsg = exceptionMsg_;
}
}
#endregion
}