/// <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(); }
/// <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; }
/// <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(); }
/// <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; } }
/** 接收帧 */ 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); } }
/// <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(); }
/// <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; }
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); } }
/// <summary> /// 读取字节流(简版) /// </summary> protected override void toReadBytesSimple(BytesReadStream stream) { base.toReadBytesSimple(stream); this.frame = (FrameSyncData)stream.readDataSimpleNotNull(); }
/// <summary> /// 回池 /// </summary> protected override void toRelease(DataPool pool) { base.toRelease(pool); this.frame = null; }