diff --git a/Assets/LuaFramework/Scripts/Network/SocketClient.cs b/Assets/LuaFramework/Scripts/Network/SocketClient.cs index 0bd89e8e13..ceb3316858 100644 --- a/Assets/LuaFramework/Scripts/Network/SocketClient.cs +++ b/Assets/LuaFramework/Scripts/Network/SocketClient.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using System; using System.IO; using System.Net; @@ -20,6 +20,7 @@ public enum NetworkStateType Disconnect, } + static class IPAddressExtensions { public static IPAddress MapToIPv6(this IPAddress addr) @@ -81,7 +82,7 @@ public class SocketClient } } - static readonly int HeaderSize= sizeof(ushort)+sizeof(int); + static readonly int HeaderSize = sizeof(ushort) + sizeof(int); private const int MAX_READ = 8192; private byte[] byteBuffer = new byte[MAX_READ]; static TEA crypto = new TEA(); @@ -105,24 +106,23 @@ public class SocketClient // Use this for initialization public SocketClient(string ipAddress, int port) { + + //Debug.Log("****Socket*********************创建一个Socket ---" + ipAddress); IpAddress = ipAddress; Port = port; _memStream = new MemoryStream(); _reader = new BinaryReader(_memStream); - - Debug.Log("SocketClient SocketClient ipAddress: " + ipAddress + " port: " + port); } public void SetIpAddress(string ipAddress, int port) { - Debug.Log("SocketClient SetIpAddress ipAddress: " + ipAddress + " port: " + port); if (!IsConnected()) { IpAddress = ipAddress; Port = port; m_indicationSid = 0; m_serialId = 1; - } + } } /// @@ -130,8 +130,8 @@ public class SocketClient /// public void Connect() { + //Debug.Log("****Socket*********************Connect ---" + IpAddress); Close(); - Debug.Log("SocketClient Connect ipAddress: " + IpAddress); try { var ipType = GetIPAddressType(IpAddress); @@ -145,13 +145,14 @@ public class SocketClient catch (Exception e) { OnConnectFail(); - Debug.LogError("SocketClient Connect catch: " + e.Message); + Debug.LogWarning(e.Message); } } public void OnConnectFail() { - AddStateInfo(NetworkStateType.ConnectFail, "OnConnectFail"); + //Debug.Log("****Socket*********************OnConnectFail ---" + IpAddress); + AddStateInfo(NetworkStateType.ConnectFail, null); } /// @@ -159,10 +160,35 @@ public class SocketClient /// void OnConnect(IAsyncResult asr) { - Debug.LogError("SocketClient OnConnect"); - outStream = client.GetStream(); - client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); - AddStateInfo(NetworkStateType.Connected, "OnConnect"); + //Debug.Log("****Socket*********************OnConnect ---" + IpAddress); + //outStream = client.GetStream(); + //client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); + //AddStateInfo(NetworkStateType.Connected, null); + + m_isConnecting = false; + + //检测是否成功的建立了链接。.. + if (client == null || !client.Connected) + { + Debug.Log("****Socket*********************OnConnect FAILED ---" + IpAddress); + return; + } + try + { + //完成本次链接 + client.EndConnect(asr); + + // 记录链接的成功事件。 + outStream = client.GetStream(); + client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); + AddStateInfo(NetworkStateType.Connected, null); + Debug.Log("****Socket*********************OnConnect SUCCESS ---" + IpAddress); + } + catch (Exception e) + { + Debug.Log("****Socket*********************OnConnect FAILED ---" + e.Message); + } + } /// @@ -174,7 +200,7 @@ public class SocketClient using (ms = new MemoryStream()) { ms.Position = 0; - + BinaryWriter writer = new BinaryWriter(ms); short msglen = (short)message.Length; @@ -196,7 +222,7 @@ public class SocketClient } else { - Debug.LogError("SocketClient WriteMessage !connected"); + Debug.Log("client.connected----->>false"); } } } @@ -208,7 +234,7 @@ public class SocketClient void OnRead(IAsyncResult asr) { int bytesRead = 0; - //try + try { lock (client.GetStream()) { @@ -229,12 +255,15 @@ public class SocketClient Array.Clear(byteBuffer, 0, byteBuffer.Length); //清空数组 client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); } + + Debug.Log("SocketClient.OnRead " + byteBuffer.ToString()); + } + catch (Exception ex) + { + Debug.LogError("SocketClient.OnRead " + ex.ToString()); + //Lnhbuc_PrintBytes(); + AddStateInfo(NetworkStateType.Exception, ex.Message); } - //catch (Exception ex) - //{ - // //PrintBytes(); - // AddStateInfo(NetworkStateType.Exception, ex.Message); - //} } /// @@ -246,21 +275,20 @@ public class SocketClient info.type = dis; info.msg = msg; stateInfoStack.Push(info); - Debug.Log("SocketClient AddStateInfo dis: " + dis + " msg: " + msg); } /// /// 打印字节 /// /// - void PrintBytes() + void Lnhbuc_PrintBytes() { string returnStr = string.Empty; for (int i = 0; i < byteBuffer.Length; i++) { returnStr += byteBuffer[i].ToString("X2"); } - Debug.LogError("SocketClient PrintBytes Str: " + returnStr); + Debug.LogError(returnStr); } /// @@ -272,14 +300,14 @@ public class SocketClient { MemoryStream stream = (MemoryStream)r.AsyncState; outStream.EndWrite(r); - if(stream!=null) + if (stream != null) { stream.Close(); } } catch (Exception ex) { - Debug.LogError("SocketClient OnWrite catch: " + ex.Message.ToString()); + Debug.LogError("OnWrite--->>>" + ex.Message); } } @@ -288,6 +316,8 @@ public class SocketClient /// void OnReceive(byte[] bytes, int length) { + + //Debug.Log("****Socket*********************OnReceive ---" + IpAddress); try { var stream = CurMemoryStream; @@ -298,14 +328,14 @@ public class SocketClient //Reset to beginning stream.Seek(0, SeekOrigin.Begin); - while (RemainingBytes() > 4) + while (Bkupkw_RemainingBytes() > 4) { short messageLen = reader.ReadInt16(); messageLen = IPAddress.NetworkToHostOrder(messageLen); //memStream.Seek(0, SeekOrigin.Begin); //TEA解密需要补齐8位 int decodeMessageLen = (messageLen + 7) / 8 * 8; - if (RemainingBytes() >= decodeMessageLen) //粘包处理 + if (Bkupkw_RemainingBytes() >= decodeMessageLen) //粘包处理 { var msgBytes = reader.ReadBytes(decodeMessageLen); if (crypto != null) @@ -320,13 +350,13 @@ public class SocketClient } } //Create a new stream with any leftover bytes - byte[] leftover = reader.ReadBytes((int)RemainingBytes()); + byte[] leftover = reader.ReadBytes((int)Bkupkw_RemainingBytes()); stream.SetLength(0); //Clear stream.Write(leftover, 0, leftover.Length); } catch (Exception e) { - Debug.LogError("SocketClient OnReceive catch: " + e.ToString()); + Debug.LogError("Network Read Exception: " + e.ToString()); AddStateInfo(NetworkStateType.Disconnect, "Network Read Exception: " + e.ToString()); } } @@ -334,7 +364,7 @@ public class SocketClient /// /// 剩余的字节 /// - private long RemainingBytes() + private long Bkupkw_RemainingBytes() { return CurMemoryStream.Length - CurMemoryStream.Position; } @@ -348,7 +378,7 @@ public class SocketClient //user id buffer.ReadIntToByte(); //token - buffer.ReadIntToByte(); + buffer.ReadIntToByte(); //协议号 int msgid = buffer.ReadIntToByte(); @@ -368,12 +398,13 @@ public class SocketClient lock (mEvents) { mEvents.Enqueue(new NetMsg(msgid, sId, result, buffer)); - } + } } - private void indicationErrorAction(ByteBuffer buffer) + private void Ygqmgx_indicationErrorAction(ByteBuffer buffer) { - Debug.Log("SocketClient indicationErrorAction"); + + //Debug.Log("****Socket*********************indicationErrorAction ---" + IpAddress); Util.CallMethod("SocketManager", "ReceiveErrorInfo", this, buffer); } @@ -383,8 +414,8 @@ public class SocketClient /// public void Close() { - Debug.Log("SocketClient Close"); - UnregistNetMessage(INDICATION_ERROR_CODE, indicationErrorAction); + Debug.Log("****Socket*********************Close ---" + IpAddress); + UnregistNetMessage(INDICATION_ERROR_CODE, Ygqmgx_indicationErrorAction); m_isConnected = false; m_isConnecting = false; @@ -401,9 +432,6 @@ public class SocketClient client.Close(); client = null; } - else { - Debug.Log("SocketClient Close client==null"); - } if (_memStream != null) { @@ -421,6 +449,13 @@ public class SocketClient bool testConnect; public void Update() { + // FHF DEBUG + //TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; + //System.Diagnostics.Stopwatch stw = new System.Diagnostics.Stopwatch(); + //stw.Start(); + + + if (stateInfoStack.Count > 0) { var info = stateInfoStack.Pop(); @@ -428,7 +463,7 @@ public class SocketClient if (info.type == NetworkStateType.Connected) { m_isConnected = true; - RegistNetMessage(INDICATION_ERROR_CODE, indicationErrorAction); + RegistNetMessage(INDICATION_ERROR_CODE, Ygqmgx_indicationErrorAction); Util.CallMethod("SocketManager", "OnConnect", this); } else if (info.type == NetworkStateType.ConnectFail) @@ -438,7 +473,7 @@ public class SocketClient else if (info.type == NetworkStateType.Reconnected) { m_isConnected = true; - RegistNetMessage(INDICATION_ERROR_CODE, indicationErrorAction); + RegistNetMessage(INDICATION_ERROR_CODE, Ygqmgx_indicationErrorAction); Util.CallMethod("SocketManager", "OnReconnect", this); } else if (info.type == NetworkStateType.ReconnectFail) @@ -447,20 +482,21 @@ public class SocketClient } else if (info.type == NetworkStateType.Disconnect) { - Disconnect(); + Disconnect(" NetworkStateType.Disconnect"); } else if (info.type == NetworkStateType.Exception) { - Disconnect(); - } + Disconnect("NetworkStateType.Exception"); + } return; } - + // int _CCC = 0; lock (mEvents) { while (mEvents.Count > 0) { DispatchMessage(mEvents.Dequeue()); + // _CCC++; } } @@ -468,7 +504,7 @@ public class SocketClient if (testConnect) { - Debug.Log("~~~~~~~~~~~~~测试掉线~~~~~~~~~~~~~~~"); + UnityEngine.Debug.Log("~~~~~~~~~~~~~测试掉线~~~~~~~~~~~~~~~"); } if (m_isConnecting && !testConnect) @@ -478,8 +514,14 @@ public class SocketClient if ((testConnect || !IsConnected()) && m_isConnected) { - Disconnect(); + Disconnect("TEST"); } + + + //FHF Debug time preform + // stw.Stop(); + // if(_CCC>0) + // UnityEngine.Debug.Log("NET EVENT HANDLE: " + _CCC.ToString()+"@"+(stw.ElapsedTicks).ToString()); } void DispatchMessage(NetMsg _event) @@ -487,16 +529,20 @@ public class SocketClient int msgId = _event.msgId; ByteBuffer msg = _event.msg; + //Debug.LogError("msgId:" + msgId); + //Debug.LogError("m_indicationSid:" + m_indicationSid); + //Debug.LogError("sid:" + _event.sid); + //处理心跳包回调 if (msgId == 1001) { Util.CallMethod("SocketManager", "ReceiveClientHeartBeat", this, msg); return; } + //处理错误码 if (_event.result == 0) { - Debug.Log("SocketClient DispatchMessage result == 0 msgID: " + msgId + " msg: " + msg); m_serialId++; Util.CallMethod("SocketManager", "ReceiveErrorInfo", this, msg); if (callbacks.ContainsKey(msgId)) @@ -513,11 +559,12 @@ public class SocketClient m_indicationSid++; if (!dispatchers[msgId].Process(msg)) { - Debug.Log("SocketClient DispatchMessage Failed to process message. msgId : " + msgId); + UnityEngine.Debug.LogErrorFormat("Failed to process message. msgId : {0}", msgId); } } if (_event.sid <= m_indicationSid) { + //Debug.LogError("INDICATION_RESPONSE" + msgId); m_SendMessage(INDICATION_RESPONSE, null, _event.sid); } } @@ -529,29 +576,29 @@ public class SocketClient m_serialId++; if (!call.Process(msg)) { - Debug.Log("SocketClient DispatchMessage Failed to process message2. msgId : " + msgId); + UnityEngine.Debug.LogErrorFormat("Failed to process message. msgId : {0}", msgId); } } } - - public void Disconnect() + public string Error; + public void Disconnect(string _err) { - Debug.Log("SocketClient Disconnect"); - Close(); //关掉客户端链接 - Util.CallMethod("SocketManager", "OnDisconnect", this); + Error = _err; + Debug.Log("****Socket*********************Disconnect [" + Error + "] ---" + IpAddress); + Close(); + Util.CallMethod("SocketManager", "OnDisconnect", this, _err); } private Coroutine checkConnect_co; IEnumerator CheckConnect_Co() { yield return new WaitForEndOfFrame(); - Debug.Log("SocketClient CheckConnect_Co IP: " + IpAddress + " Port: " + Port); + Debug.LogWarning("Start Connecting IP: " + IpAddress + " Port: " + Port); Connect(); m_isConnecting = true; yield return new WaitForSeconds(AppConst.ConnectTimeout); if (!IsConnected()) { - Debug.Log("SocketClient CheckConnect_Co connect Fail"); OnConnectFail(); } @@ -563,9 +610,9 @@ public class SocketClient /// public void TryConnect() { + //Debug.Log("****Socket*********************TryConnect ---" + IpAddress); if (IsConnected()) { - Debug.Log("SocketClient TryConnect isConnected"); NetworkStateInfo info = new NetworkStateInfo(); info.type = NetworkStateType.Connected; info.msg = null; @@ -573,58 +620,53 @@ public class SocketClient return; } if (m_isConnecting) - { - Debug.Log("SocketClient TryConnect m_isConnecting"); return; - } if (checkConnect_co != null) { - Debug.Log("SocketClient TryConnect checkConnect_co != nul"); netMgr.StopCoroutine(checkConnect_co); } + checkConnect_co = netMgr.StartCoroutine(CheckConnect_Co()); } private Coroutine reconnect_co; IEnumerator CheckReconnect_Co() { - Debug.Log("SocketClient TryConnect CheckReconnect_Co"); - yield return new WaitForEndOfFrame(); - Reconnect(); + m_isConnecting = true; + + yield return new WaitForEndOfFrame(); + + Reconnect(); yield return new WaitForSeconds(AppConst.ConnectTimeout); if (!IsConnected()) - { - Debug.Log("SocketClient CheckReconnect_Co connect Fail"); OnReconnectFail(); - } m_isConnecting = false; reconnect_co = null; } - + float _LastReconectime = 0; public void TryReconnect() { + if (Time.time - _LastReconectime < AppConst.ConnectTimeout + 1) + return; + + _LastReconectime = Time.time; + + Debug.Log("****Socket*********************TryReconnect ---" + IpAddress); if (IsConnected()) { - Debug.Log("SocketClient TryReconnect IsConnected"); NetworkStateInfo info = new NetworkStateInfo(); info.type = NetworkStateType.Reconnected; info.msg = null; stateInfoStack.Push(info); return; } - if (m_isConnecting) - { - Debug.Log("SocketClient TryReconnect m_isConnecting"); - return; - } - + if (reconnect_co != null) { - Debug.Log("SocketClient TryReconnect reconnect_co != nul"); netMgr.StopCoroutine(reconnect_co); } reconnect_co = netMgr.StartCoroutine(CheckReconnect_Co()); @@ -632,10 +674,10 @@ public class SocketClient public void Reconnect() { + Debug.Log("****Socket*********************Reconnect ---" + IpAddress); Close(); try { - Debug.Log("SocketClient Reconnect"); var ipType = GetIPAddressType(IpAddress); client = null; client = new TcpClient(ipType); @@ -646,7 +688,7 @@ public class SocketClient } catch (Exception e) { - Debug.Log("SocketClient Reconnect catch :" + e.Message); + Debug.LogError(e.Message); OnReconnectFail(); } } @@ -678,7 +720,7 @@ public class SocketClient } catch (Exception ex) { - Debug.Log("SocketClient GetIPAddressType catch :" + ex.Message); + Debug.LogWarning("Network GetIPAddressType Exception: " + ex); return AddressFamily.InterNetwork; } @@ -693,26 +735,48 @@ public class SocketClient public void OnReconnectFail() { - AddStateInfo(NetworkStateType.ReconnectFail, "OnReconnectFail"); + //Debug.Log("****Socket*********************OnReconnectFail ---" + IpAddress); + AddStateInfo(NetworkStateType.ReconnectFail, null); } void OnReconnect(IAsyncResult result) { - outStream = client.GetStream(); - client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); - AddStateInfo(NetworkStateType.Reconnected, "OnReconnect"); + m_isConnecting = false; + + //检测是否成功的建立了链接。.. + if (client == null || !client.Connected) + { + Debug.Log("****Socket*********************OnReconnect FAILED ---" + IpAddress); + return; + } + try + { + //完成本次链接 + client.EndConnect(result); + + // 记录链接的成功事件。 + outStream = client.GetStream(); + client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), null); + AddStateInfo(NetworkStateType.Reconnected, null); + Debug.Log("****Socket*********************OnReconnect SUCCESS ---" + IpAddress); + } + catch (Exception e) + { + Debug.Log("****Socket*********************OnReconnect FAILED ---" + e.Message); + } } + /// /// 发送消息 /// public void SendMessage(int msgId, ByteBuffer msg) { - Debug.Log("SocketClient SendMessage msgID: " + msgId); m_serialId++; m_SendMessage(msgId, msg, m_serialId); } + void m_SendMessage(int msgId, ByteBuffer msg, int sn) { if (!IsConnected()) @@ -733,6 +797,9 @@ public class SocketClient WriteMessage(buffer.ToBytes()); buffer.Close(); + + + //UnityEngine.Debug.Log("SocketClient.m_SendMessage..."+ msgId); } /// @@ -758,6 +825,7 @@ public class SocketClient { if (!dispatchers.ContainsKey(msgId)) dispatchers.Add(msgId, new SimpleDispatcher()); + //XDebug.Log.l("++++++++++++++++RegistNetMessage================================", msgId, IpAddress, Port); SimpleDispatcher find = (SimpleDispatcher)dispatchers[msgId]; find.processor += handle; } @@ -766,6 +834,7 @@ public class SocketClient { if (!dispatchers.ContainsKey(msgId)) return; + XDebug.Log.l("-------------------UnregistNetMessage================================", msgId, IpAddress, Port); SimpleDispatcher find = (SimpleDispatcher)dispatchers[msgId]; find.processor -= handle; } @@ -773,7 +842,6 @@ public class SocketClient public void SendMessageWithCallBack(int msgId, int receiveMsgId, ByteBuffer message, LuaFunction callback) { - Debug.Log("SocketClient SendMessageWithCallBack msgID:" + msgId.ToString()); if (!IsConnected()) { UnityEngine.Debug.LogErrorFormat("Try to send message with invalid connection."); @@ -781,6 +849,7 @@ public class SocketClient } else { + SimpleDispatcher cb = new SimpleDispatcher(); cb.processor += b => callback.Call(b); if (!callbacks.ContainsKey(receiveMsgId)) @@ -791,6 +860,4 @@ public class SocketClient } } - - } diff --git a/Assets/ManagedResources/~Lua/Logic/Network.lua b/Assets/ManagedResources/~Lua/Logic/Network.lua index c1ca059e48..1137a189cf 100644 --- a/Assets/ManagedResources/~Lua/Logic/Network.lua +++ b/Assets/ManagedResources/~Lua/Logic/Network.lua @@ -1,4 +1,4 @@ -require "Message/CommonProto_pb" +require "Message/CommonProto_pb" require "Message/MessageTypeProto_pb" require "Base/Queue" Network = {} @@ -57,14 +57,14 @@ function Network:OnException() end --连接中断,或者被踢掉-- -function Network:OnDisconnect() +function Network:OnDisconnect(err) self.reconnectFlag = true self.isConnected = false self.bIsStartListenHeartBeat = false Game.GlobalEvent:DispatchEvent(Protocal.Disconnect, self) - RequestPanel.Show("您已掉线,正在请求重连") + RequestPanel.Show("您已掉线,正在请求重连")--..err) self.socket:TryReconnect() end @@ -85,6 +85,8 @@ function Network:OnReconnect() RequestPanel.Show("重连成功!等待服务器响应") self.re_resendTimes = 0 self.reconnectFlag = false + + self.socket:SendMessageWithCallBack(MessageTypeProto_pb.RECONNECT_REQUEST, MessageTypeProto_pb.RECONNECT_RESPONSE, nil, function(b) Log("已经重连!!") RequestPanel.Hide() @@ -92,6 +94,15 @@ function Network:OnReconnect() self.bIsStartListenHeartBeat = true Game.GlobalEvent:DispatchEvent(Protocal.Connect, self) end) + + coroutine.start(function() + coroutine.wait(2) + + if not self.isConnected then + Log("没有收到 重连信息,重新设置链接!!") + self.socket:Disconnect() + end + end) end function Network:Reset() diff --git a/Assets/ManagedResources/~Lua/Logic/SocketManager.lua b/Assets/ManagedResources/~Lua/Logic/SocketManager.lua index be20df68f0..ca33ec4ad6 100644 --- a/Assets/ManagedResources/~Lua/Logic/SocketManager.lua +++ b/Assets/ManagedResources/~Lua/Logic/SocketManager.lua @@ -99,9 +99,9 @@ function SocketManager.OnException(socket) end --连接中断,或者被踢掉-- -function SocketManager.OnDisconnect(socket) +function SocketManager.OnDisconnect(socket, _err) if SocketManager.SocketDic[socket] then - SocketManager.SocketDic[socket]:OnDisconnect() + SocketManager.SocketDic[socket]:OnDisconnect(_err) end end diff --git a/Assets/Source/Generate/SocketClientWrap.cs b/Assets/Source/Generate/SocketClientWrap.cs index 5a562cf577..5b1d42fb21 100644 --- a/Assets/Source/Generate/SocketClientWrap.cs +++ b/Assets/Source/Generate/SocketClientWrap.cs @@ -28,6 +28,7 @@ public class SocketClientWrap L.RegFunction("New", _CreateSocketClient); L.RegFunction("__tostring", ToLua.op_ToString); L.RegVar("netMgr", get_netMgr, set_netMgr); + L.RegVar("Error", get_Error, set_Error); L.RegVar("CurMemoryStream", get_CurMemoryStream, null); L.RegVar("CurReader", get_CurReader, null); L.RegVar("IpAddress", get_IpAddress, null); @@ -166,9 +167,10 @@ public class SocketClientWrap { try { - ToLua.CheckArgsCount(L, 1); + ToLua.CheckArgsCount(L, 2); SocketClient obj = (SocketClient)ToLua.CheckObject(L, 1); - obj.Disconnect(); + string arg0 = ToLua.CheckString(L, 2); + obj.Disconnect(arg0); return 0; } catch (Exception e) @@ -385,6 +387,25 @@ public class SocketClientWrap } } + [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] + static int get_Error(IntPtr L) + { + object o = null; + + try + { + o = ToLua.ToObject(L, 1); + SocketClient obj = (SocketClient)o; + string ret = obj.Error; + LuaDLL.lua_pushstring(L, ret); + return 1; + } + catch(Exception e) + { + return LuaDLL.toluaL_exception(L, e, o, "attempt to index Error on a nil value"); + } + } + [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int get_CurMemoryStream(IntPtr L) { @@ -479,5 +500,24 @@ public class SocketClientWrap return LuaDLL.toluaL_exception(L, e, o, "attempt to index netMgr on a nil value"); } } + + [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] + static int set_Error(IntPtr L) + { + object o = null; + + try + { + o = ToLua.ToObject(L, 1); + SocketClient obj = (SocketClient)o; + string arg0 = ToLua.CheckString(L, 2); + obj.Error = arg0; + return 0; + } + catch(Exception e) + { + return LuaDLL.toluaL_exception(L, e, o, "attempt to index Error on a nil value"); + } + } }