示例#1
0
    //-----------------------------------------------
    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);
    }
示例#2
0
 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));
     }
 }
示例#3
0
    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"));
        }
    }
示例#4
0
    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"));
        }
    }
示例#5
0
    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"));
        }
    }
示例#6
0
    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"));
        }
    }
示例#7
0
    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));
        }
    }
示例#8
0
    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);
    }