//----------------------------------------------- TCPRecvData ConvertRecvData(int cmdSize, byte[] data, int offset) { TCPRecvData trd = new TCPRecvData(); // trd.MainType = data[offset + 4]; trd.SubType = data[offset + 4]; trd.Data = new byte[cmdSize - CMD_HEADER_SIZE]; Array.Copy(data, offset + CMD_HEADER_SIZE, trd.Data, 0, trd.Data.Length); return(trd); }
static int GetFirstCmd(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); NewTCPClient obj = (NewTCPClient)ToLua.CheckObject <NewTCPClient>(L, 1); TCPRecvData o = obj.GetFirstCmd(); ToLua.PushObject(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int set_MainType(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); TCPRecvData obj = (TCPRecvData)o; byte arg0 = (byte)LuaDLL.luaL_checknumber(L, 2); obj.MainType = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index MainType on a nil value")); } }
static int get_Data(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); TCPRecvData obj = (TCPRecvData)o; byte[] ret = obj.Data; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index Data on a nil value")); } }
static int get_SubType(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); TCPRecvData obj = (TCPRecvData)o; byte ret = obj.SubType; LuaDLL.lua_pushnumber(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index SubType on a nil value")); } }
static int set_Data(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); TCPRecvData obj = (TCPRecvData)o; byte[] arg0 = ToLua.CheckByteBuffer(L, 2); obj.Data = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index Data on a nil value")); } }
static int _CreateTCPRecvData(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 0) { TCPRecvData obj = new TCPRecvData(); ToLua.PushObject(L, obj); return(1); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to ctor method: TCPRecvData.New")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
bool RecvData(ref int recvSize, ref int offset, byte[] buff, TCPClientData pclient) { while (recvSize >= 4) { uint recvID = BitConverter.ToUInt32(buff, offset); if (recvID == pclient.HearbeatID) { offset += 4; recvSize -= 4; } else if (recvSize >= CMD_HEADER_SIZE) { int cmdSize = (int)recvID; if (cmdSize == 0) { pclient.Status = TCPStatusType.ERR_CMD_SIZE_ZERO; //命令长度为0 return(false); } if (cmdSize > pclient.BuffSize) { pclient.Status = TCPStatusType.ERR_CMD_SIZE_OVERFLOW; //命令长度大于buffsize; return(false); } if (recvSize >= cmdSize) { // Debug.Log("Inner Recv Cmd Count:" + pclient.RecvList.Count()); if (pclient.RecvList.HasSpace()) { TCPRecvData trd = ConvertRecvData(cmdSize, buff, offset); //byte[] cmd = new byte[cmdSize]; //Array.Copy(cmd, 0, buff, offset, cmdSize); pclient.RecvList.AddItem(trd); offset += cmdSize; recvSize -= cmdSize; } else { Debug.Log("接收队列已经满了:" + pclient.RecvList.Count() + ", " + DateTime.Now.ToLongTimeString()); pclient.Status = TCPStatusType.ERR_CMD_OVERFLOW;//命令队列已满 return(false); } } else { break; } } else { break; } } int freeBuffSize = pclient.BuffSize - (offset + recvSize); if (freeBuffSize < 128) { if (recvSize > 0) { System.Array.Copy(buff, offset, buff, 0, recvSize); } offset = 0; } return(true); }