/// <summary> /// /// </summary> /// <param name="re"></param> /// <param name="id"></param> private void ProcessTagPushByMemoryCopy(ByteBuffer re, int id) { var tag = mTagManager.GetTagById(id); //re.WriteInt(id); re.Write(id); re.Write((mTagConsumer as RealEnginer).MemoryHandle + (int)tag.ValueAddress, tag.ValueSize); //Buffer.BlockCopy((mTagConsumer as RealEnginer).Memory, (int)tag.ValueAddress, re.Array, re.ArrayOffset + re.WriterIndex, tag.ValueSize); //re.SetWriterIndex(re.WriterIndex + tag.ValueSize); }
/// <summary> /// /// </summary> /// <param name="block"></param> private void ProcessValueChangeNotify(string clientId, ByteBuffer block) { try { int minid = block.ReadInt(); int maxid = block.ReadInt(); HashSet <int> ids = new HashSet <int>(); for (int i = minid; i <= maxid; i++) { ids.Add(i); lock (mMonitors) { if (!mMonitors.ContainsKey(i)) { var vtag = mTagManager.GetTagById(i); if (vtag != null) { mtmp.Add(i, new MonitorTag() { Value = 0, RefCount = 1, Type = vtag.Type }); } } else { mMonitors[i].IncRef(); } } } if (mCallBackRegistorIds.ContainsKey(clientId)) { mCallBackRegistorIds[clientId] = ids; } else { mCallBackRegistorIds.Add(clientId, ids); } lock (mDataCounts) if (!mDataCounts.ContainsKey(clientId)) { mDataCounts.Add(clientId, 0); } Parent.AsyncCallback(clientId, ToByteBuffer(ApiFunConst.RealDataRequestFun, 1)); } catch (Exception ex) { Parent.AsyncCallback(clientId, ToByteBuffer(ApiFunConst.RealDataRequestFun, 0)); Debug.Print(ex.Message); } }