dezhou_client/wb_unity_pro/Assets/Scripts/LuaHelper/LuaNetClient.cs

268 lines
7.8 KiB
C#
Raw Normal View History

2025-12-17 21:08:27 +08:00
/*************************************************
NetClient lua
authorDaixiwei
**************************************************/
using LuaInterface;
using taurus.client;
namespace taurus.unity
{
public class LuaNetClient
{
const string PARAM_MSG = "msg";
const string PARAM_CODE = "code";
LuaFunction _eventFunc;
LuaFunction _connectFunc;
LuaFunction _callbackFunc;
LuaTable _obj;
TaurusClient _netClient;
public LuaNetClient(string host, string game, LuaTable obj, int protocol = (int)ConnectionProtocol.Tcp)
{
UnityEngine.Debug.Log("神奇的服务器地址:"+host+"=="+game+"=="+(ConnectionProtocol)protocol);
if(VerCheck.Instance.isGFF==false&&VerCheck.Instance.isDXYGFF==false)
{
//int portT = LoadNetP(host);
//if (isHttp)
//{
// host = "http://" + "8.134.59.224" + ":" + portT + "/";
//}
//else
//{
// host = "8.134.59.224" + ":" + portT;
//}
_netClient = new TaurusClient(host, game, (ConnectionProtocol)protocol);
_obj = obj;
_netClient.addEventListener(NetClientEvent.OnEvent, __OnEvent);
_netClient.addEventListener(NetClientEvent.Connect, __OnConnect);
}
else
{
int portT=LoadNetP(host);
// UnityEngine.Debug.LogError("LuaNetClient port==>>>" + portT);
if(portT!=0)
{
securityConnection connTem = LoadNet(portT);
if (connTem.ip!=null)
{
if (isHttp)
{
host = "http://" + connTem.ip + ":" + connTem.port + "/";
}
else
{
host = connTem.ip + ":" + connTem.port;
}
//UnityEngine.Debug.LogError("LuaNetClient host==>>>" + host);
_netClient = new TaurusClient(host, game, (ConnectionProtocol)protocol);
_obj = obj;
_netClient.addEventListener(NetClientEvent.OnEvent, __OnEvent);
_netClient.addEventListener(NetClientEvent.Connect, __OnConnect);
}
}
}
}
/// <summary>
/// 连接服务器
/// </summary>
public void Connect()
{
_netClient.connect();
}
public void Send(string cmd, string data, LuaFunction callback)
{
if (callback == null)
{
_netClient.sendText(cmd, data, null);
return;
}
// UnityEngine.Debug.LogError(data);
var msg = _netClient.sendText(cmd, data, __OnNetData);
msg.data = callback;
}
/// <summary>
/// 设置回调LUA函数
/// </summary>
/// <param name="func"></param>
public void SetCallBackListener(LuaFunction func)
{
_callbackFunc = func;
}
/// <summary>
/// 设置网络事件LUA函数
/// </summary>
/// <param name="func"></param>
public void SetNetEventListener(LuaFunction func)
{
_eventFunc = func;
}
/// <summary>
/// 设置网络连接状态LUA函数
/// </summary>
/// <param name="func"></param>
public void SetNetConnectListener(LuaFunction func)
{
_connectFunc = func;
}
void __OnNetData(MessageResponse msg)
{
if (_callbackFunc == null) return;
if (msg.messageData.data == null) return;
LuaFunction p = msg.messageData.data as LuaFunction;
_callbackFunc.BeginPCall();
_callbackFunc.Push(_obj);
_callbackFunc.Push(msg.messageData.command);
_callbackFunc.Push(msg.returnCode);
_callbackFunc.Push(msg.messageData.textParam);
_callbackFunc.Push(p);
_callbackFunc.PCall();
if (_callbackFunc == null) return;
_callbackFunc.EndPCall();
}
void __OnEvent(Event evt)
{
if (_eventFunc == null) return;
var msg = (Message)evt.getParameter(PARAM_MSG);
_eventFunc.BeginPCall();
_eventFunc.Push(_obj);
_eventFunc.Push(msg.command);
_eventFunc.Push(msg.textParam);
_eventFunc.PCall();
if (_eventFunc == null) return;
_eventFunc.EndPCall();
}
void __OnConnect(Event evt)
{
if (_connectFunc == null) return;
SocketCode code = (SocketCode)evt.getParameter(PARAM_CODE);
_connectFunc.BeginPCall();
_connectFunc.Push(_obj);
_connectFunc.Push((int)code);
_connectFunc.PCall();
if (_connectFunc == null) return;
_connectFunc.EndPCall();
}
public void ClearResponse()
{
if (_netClient == null) return;
_netClient.clearResponse();
}
public void Destroy()
{
NetManager.killConnection(_netClient.getId());
if (_callbackFunc != null) _callbackFunc.Dispose();
_callbackFunc = null;
if (_connectFunc != null) _connectFunc.Dispose();
_connectFunc = null;
if (_eventFunc != null) _eventFunc.Dispose();
_eventFunc = null;
if (_obj != null) _obj.Dispose();
_obj = null;
}
/// <summary>
/// 服务器Session字符
/// </summary>
public string Session
{
get
{
return _netClient.getSession();
}
set
{
_netClient.setSession(value);
}
}
/// <summary>
/// 延时
/// </summary>
public int AveragePingTime
{
get
{
return _netClient.getAveragePingTime();
}
}
/// <summary>
/// 网络是否已连接
/// </summary>
public bool IsConnected
{
get
{
return _netClient.isConnected();
}
}
bool isHttp = false;
private int LoadNetP(string host)
{
isHttp = false;
if (!string.IsNullOrEmpty(host))
{
string[] str = host.Split(':');
int len = str[str.Length-1].IndexOf("/");
string port = str[str.Length - 1];
if(len>0)
{
port = str[str.Length-1].Substring(0, len);
}
int curInt = System.Convert.ToInt32(port);
if (str.Length > 2)
isHttp = true;
return curInt;
}
return 0;
}
securityConnection conn1;
public securityConnection LoadNet(int port)
{
if (VerCheck.Instance.isGFF)
{
int rc1 = AppVest.getServerIPAndPort(ref conn1, "", port);
if (rc1 != 0)
{
UnityEngine.Debug.LogError("getServerIPAndPort failed");
}
}
else
{
conn1.ip = "127.0.0.1";
conn1.port = port;
}
return conn1;
}
}
}