static int UF_readnumber64(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); long number = CBytesConvert.UF_readnumber(buffer); LuaDLL.lua_pushstring(L, Convert.ToString(number)); return(1); }
static int UF_readstring(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); string str = CBytesConvert.UF_readstring(buffer); LuaDLL.lua_pushstring(L, str); return(1); }
static int UF_readboolean(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); bool val = CBytesConvert.UF_readboolean(buffer); LuaDLL.lua_pushboolean(L, val); return(1); }
static int UF_readnumber(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); long number = CBytesConvert.UF_readnumber(buffer); LuaDLL.lua_pushnumber(L, number); return(1); }
/// <summary> /// 从缓存数据中读取包数据 /// 如果缓存数据中包含完整包数据,则从该缓存数据中取出,并读入到bodybuffer中 /// </summary> public bool UF_Read(CBytesBuffer rawBuffer) { m_TmpBufferToRead.UF_clear(); m_TmpBufferToRead.UF_write(rawBuffer); // CBytesBuffer tmpbuff = new CBytesBuffer(rawBuffer); CBytesBuffer tmpbuff = m_TmpBufferToRead; int packetsize = 0; if (tmpbuff.UF_getSize() < HEAD_SIZE) { //不是完整的协议数据包,等待下次读取 Debugger.UF_Warn(string.Format("NetPacket Buffer Size[{0}] not Long enought to read", tmpbuff.UF_getSize())); return(false); } //校验码比较 uint pMagic = CBytesConvert.UF_readuint32(tmpbuff); if (MAGIC != pMagic) { ///校验码不通过,丢弃该包缓存的全部数据 rawBuffer.UF_popBytes(rawBuffer.Length); Debugger.UF_Error(string.Format("discard package: magic<{0}> | MAGIC<{1}>,RawBuffer Clear", MAGIC, pMagic)); return(false); } //读出包头 this.id = (int)CBytesConvert.UF_readuint32(tmpbuff); this.retCode = (short)CBytesConvert.UF_readuint16(tmpbuff); this.corCode = (int)CBytesConvert.UF_readuint32(tmpbuff); this.size = (int)CBytesConvert.UF_readuint32(tmpbuff); packetsize += HEAD_SIZE; //包体不为0,读出包体 if (this.size > 0) { //buffer 比读出的size长 if (this.size > tmpbuff.UF_getSize()) { //不是完整的协议数据包,等待下次读取 return(false); } //写入到body中 this.m_BodyBuffer.UF_write(tmpbuff.Buffer, (int)this.size); packetsize += this.size; } //清空已经读取的RawBuffer rawBuffer.UF_popBytes(packetsize); return(true); }
static int UF_writeboolean(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); #if UNITY_EDITOR if (!LuaDLL.lua_isboolean(L, -1)) { LuaDLL.luaL_typerror(L, -1, "boolean"); } #endif bool val = LuaDLL.lua_toboolean(L, -1); CBytesConvert.UF_writeboolean(buffer, val); return(0); }
static int UF_writenumber(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); #if UNITY_EDITOR if (LuaDLL.lua_isnumber(L, -1) == 0) { LuaDLL.luaL_typerror(L, -1, "number"); } #endif ulong number = (ulong)LuaDLL.lua_tonumber(L, -1); CBytesConvert.UF_writenumber(buffer, number); return(0); }
static int UF_writenumber64(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); #if UNITY_EDITOR if (LuaDLL.lua_isstring(L, -1) == 0) { LuaDLL.luaL_typerror(L, -1, "string"); } #endif string str = LuaDLL.lua_tostring(L, -1); CBytesConvert.UF_writenumber(buffer, Convert.ToUInt64(str)); return(0); }
static int UF_readbytes(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); long len = CBytesConvert.UF_readnumber(buffer); byte[] value = CBytesConvert.UF_readbytes(buffer, (int)len); if (value != null) { uint uniqueCode = m_TableBytes.UF_Add(value); LuaDLL.lua_pushnumber(L, (double)uniqueCode); } else { LuaDLL.lua_pushnil(L); } return(1); }
static int UF_writebytes(IntPtr L) { CBytesBuffer buffer = UF_getCBytesBufferInPool(L); #if UNITY_EDITOR if (LuaDLL.lua_isnumber(L, -1) == 0) { LuaDLL.luaL_typerror(L, -1, "number"); } #endif uint uniqueCode = (uint)LuaDLL.lua_tonumber(L, -1); byte[] value = m_TableBytes[uniqueCode]; if (value != null) { CBytesConvert.UF_writebytes(buffer, value); } return(0); }
/// <summary> ///写入完整Raw协议数据,用于网络发送 ///处理大小包,小包<0xFF 大包>=0xFFFE ///如果包体body大于0xFFFE则分包 /// <returns>The raw buffer.</returns> /// <summary> public bool UF_Write(CBytesBuffer mRawBuffer) { if (mRawBuffer == null) { return(false); } size = m_BodyBuffer.UF_getSize(); CBytesConvert.UF_writeuint32(mRawBuffer, MAGIC); CBytesConvert.UF_writeuint32(mRawBuffer, (uint)id); CBytesConvert.UF_writeuint16(mRawBuffer, (ushort)retCode); CBytesConvert.UF_writeuint32(mRawBuffer, (uint)corCode); CBytesConvert.UF_writeuint32(mRawBuffer, (uint)size); //写入包体 mRawBuffer.UF_write(m_BodyBuffer.Buffer, size); return(true); }