268 lines
7.8 KiB
C#
268 lines
7.8 KiB
C#
/*************************************************
|
||
NetClient lua 中转
|
||
author:Daixiwei
|
||
**************************************************/
|
||
|
||
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;
|
||
|
||
}
|
||
|
||
}
|
||
} |