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

268 lines
7.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*************************************************
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;
}
}
}