コード例 #1
0
        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);
        }
コード例 #2
0
        static int UF_readstring(IntPtr L)
        {
            CBytesBuffer buffer = UF_getCBytesBufferInPool(L);
            string       str    = CBytesConvert.UF_readstring(buffer);

            LuaDLL.lua_pushstring(L, str);
            return(1);
        }
コード例 #3
0
        static int UF_readboolean(IntPtr L)
        {
            CBytesBuffer buffer = UF_getCBytesBufferInPool(L);
            bool         val    = CBytesConvert.UF_readboolean(buffer);

            LuaDLL.lua_pushboolean(L, val);
            return(1);
        }
コード例 #4
0
        static int UF_readnumber(IntPtr L)
        {
            CBytesBuffer buffer = UF_getCBytesBufferInPool(L);
            long         number = CBytesConvert.UF_readnumber(buffer);

            LuaDLL.lua_pushnumber(L, number);
            return(1);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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);
        }
コード例 #7
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);
        }
コード例 #8
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);
        }
コード例 #9
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);
        }
コード例 #10
0
        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);
        }
コード例 #11
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);
        }