Пример #1
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        base.toReadBytesFull(stream);

        stream.startReadObj();

        BaseData frameT = stream.readDataFullNotNull();

        if (frameT != null)
        {
            if (frameT is FrameSyncData)
            {
                this.frame = (FrameSyncData)frameT;
            }
            else
            {
                this.frame = new FrameSyncData();
                if (!(frameT.GetType().IsAssignableFrom(typeof(FrameSyncData))))
                {
                    stream.throwTypeReadError(typeof(FrameSyncData), frameT.GetType());
                }
                this.frame.shadowCopy(frameT);
            }
        }
        else
        {
            this.frame = null;
        }

        stream.endReadObj();
    }
Пример #2
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if(!(data is FrameSyncData))
            return;

        FrameSyncData mData=(FrameSyncData)data;

        this.index=mData.index;
        this.commands=mData.commands;
    }
Пример #3
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        base.toReadBytesFull(stream);

        stream.startReadObj();

        int listLen = stream.readLen();

        if (this.list != null)
        {
            this.list.clear();
            this.list.ensureCapacity(listLen);
        }
        else
        {
            this.list = new SList <FrameSyncData>();
        }

        SList <FrameSyncData> listT = this.list;

        for (int listI = listLen - 1; listI >= 0; --listI)
        {
            FrameSyncData listV;
            BaseData      listVT = stream.readDataFullNotNull();
            if (listVT != null)
            {
                if (listVT is FrameSyncData)
                {
                    listV = (FrameSyncData)listVT;
                }
                else
                {
                    listV = new FrameSyncData();
                    if (!(listVT.GetType().IsAssignableFrom(typeof(FrameSyncData))))
                    {
                        stream.throwTypeReadError(typeof(FrameSyncData), listVT.GetType());
                    }
                    listV.shadowCopy(listVT);
                }
            }
            else
            {
                listV = null;
            }

            listT.add(listV);
        }

        stream.endReadObj();
    }
Пример #4
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if(!(data is FrameSyncData))
            return;

        FrameSyncData mData=(FrameSyncData)data;

        this.index=mData.index;

        if(mData.commands!=null)
        {
            if(this.commands!=null)
            {
                this.commands.clear();
                this.commands.ensureCapacity(mData.commands.size());
            }
            else
            {
                this.commands=new SList<FrameSyncCommandData>();
            }

            SList<FrameSyncCommandData> commandsT=this.commands;
            if(!mData.commands.isEmpty())
            {
                FrameSyncCommandData[] commandsVValues=mData.commands.getValues();
                for(int commandsVI=0,commandsVLen=mData.commands.length();commandsVI<commandsVLen;++commandsVI)
                {
                    FrameSyncCommandData commandsV=commandsVValues[commandsVI];
                    FrameSyncCommandData commandsU;
                    if(commandsV!=null)
                    {
                        commandsU=(FrameSyncCommandData)commandsV.clone();
                    }
                    else
                    {
                        commandsU=null;
                    }

                    commandsT.add(commandsU);
                }
            }
        }
        else
        {
            this.commands=null;
        }
    }
Пример #5
0
    /** 接收帧 */
    public void receiveFrame(FrameSyncData data)
    {
        _cacheQueue.offer(data);

        if (_waiting)
        {
            if (_cacheQueue.size() >= Global.frameSyncCacheFrames)
            {
                _waiting = false;
            }
        }

        while (_cacheQueue.Count > Global.frameSyncCacheFrames)
        {
            doFrame(ShineSetting.systemFrameDelay);
        }
    }
Пример #6
0
    /// <summary>
    /// 转文本输出
    /// </summary>
    protected override void toWriteDataString(DataWriter writer)
    {
        base.toWriteDataString(writer);

        writer.writeTabs();
        writer.sb.Append("list");
        writer.sb.Append(':');
        writer.sb.Append("List<FrameSyncData>");
        if (this.list != null)
        {
            SList <FrameSyncData> listT = this.list;
            int listLen = listT.size();
            writer.sb.Append('(');
            writer.sb.Append(listLen);
            writer.sb.Append(')');
            writer.writeEnter();
            writer.writeLeftBrace();
            for (int listI = 0; listI < listLen; ++listI)
            {
                FrameSyncData listV = listT.get(listI);
                writer.writeTabs();
                writer.sb.Append(listI);
                writer.sb.Append(':');
                if (listV != null)
                {
                    listV.writeDataString(writer);
                }
                else
                {
                    writer.sb.Append("FrameSyncData=null");
                }

                writer.writeEnter();
            }
            writer.writeRightBrace();
        }
        else
        {
            writer.sb.Append("=null");
        }

        writer.writeEnter();
    }
Пример #7
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        FrameSyncData mData=(FrameSyncData)data;
        if(this.index!=mData.index)
            return false;

        if(mData.commands!=null)
        {
            if(this.commands==null)
                return false;
            if(this.commands.size()!=mData.commands.size())
                return false;
            SList<FrameSyncCommandData> commandsT=this.commands;
            SList<FrameSyncCommandData> commandsR=mData.commands;
            int commandsLen=commandsT.size();
            for(int commandsI=0;commandsI<commandsLen;++commandsI)
            {
                FrameSyncCommandData commandsU=commandsT.get(commandsI);
                FrameSyncCommandData commandsV=commandsR.get(commandsI);
                if(commandsV!=null)
                {
                    if(commandsU==null)
                        return false;
                    if(!commandsU.dataEquals(commandsV))
                        return false;
                }
                else
                {
                    if(commandsU!=null)
                        return false;
                }

            }
        }
        else
        {
            if(this.commands!=null)
                return false;
        }

        return true;
    }
Пример #8
0
    private void doFrame(int delay)
    {
        if (_waiting)
        {
            return;
        }

        if (_cacheQueue.isEmpty())
        {
            _waiting = true;
        }
        else
        {
            FrameSyncData data = _cacheQueue.poll();

            if (data.commands != null && !data.commands.isEmpty())
            {
                data.commands.forEach(preExecuteCommand);
            }

            _scene.doFrame(delay);
        }
    }
Пример #9
0
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        base.toReadBytesSimple(stream);

        this.frame = (FrameSyncData)stream.readDataSimpleNotNull();
    }
Пример #10
0
    /// <summary>
    /// 回池
    /// </summary>
    protected override void toRelease(DataPool pool)
    {
        base.toRelease(pool);

        this.frame = null;
    }