public override bool WriteInternal <T>(List <T> value, Dictionary <string, string> parm) { lock (lockObject) { try { int address = -1; if (parm.ContainsKey("Start")) { address = All.Class.Num.ToUshort(parm["Start"]); } if (parm.ContainsKey("Address")) { address = All.Class.Num.ToUshort(parm["Address"]); } if (address < 0) { All.Class.Error.Add("当前写入数据,起始地址不存在,无法写入"); return(false); } SSMeter.SSWriteMeter.WriteDataStyle ds = new SSMeter.SSWriteMeter.WriteDataStyle( All.Class.TypeUse.GetType <T>(), address, value); byte[] readBuff; if (WriteAndRead <byte[], byte[]>(ds.GetBytes <T>(), 6, out readBuff, parm)) { SSMeter.SSWriteMeter.WriteResultStyle rs = SSMeter.SSWriteMeter.WriteResultStyle.Parse(readBuff); if (rs == null || rs.Random != ds.Random || !rs.Result) { return(false); } } else { return(false); } } catch (Exception e) { All.Class.Error.Add(e); return(false); } return(true); } }
private void Parent_GetArgs(object sender, Communicate.Base.Base.ReciveArgs reciveArgs) { lock (lockObject) { Communicate.Communicate parent = (Communicate.Communicate)sender; int len = parent.DataRecive; byte[] buff; if (len > 0 && this.Read <byte[]>(len, out buff)) { SSMeter.SSWriteMeter.WriteDataStyle ds = SSMeter.SSWriteMeter.WriteDataStyle.Parse(buff); if (ds == null) { return; } SSMeter.SSWriteMeter.WriteResultStyle rs = new SSMeter.SSWriteMeter.WriteResultStyle(ds.Random, false); if (ds.Value != null) { rs.Result = true; switch (ds.Type) { case Class.TypeUse.TypeList.Boolean: tmpBool = (List <bool>)ds.Value; for (int i = ds.Start; i < boolValue.Length && i < ds.Start + tmpBool.Count; i++) { boolValue[i] = tmpBool[i - ds.Start]; } break; case Class.TypeUse.TypeList.Byte: tmpByte = (List <byte>)ds.Value; for (int i = ds.Start; i < byteValue.Length && i < ds.Start + tmpByte.Count; i++) { byteValue[i] = tmpByte[i - ds.Start]; } break; case Class.TypeUse.TypeList.DateTime: tmpDateTime = (List <DateTime>)ds.Value; for (int i = ds.Start; i < dateTimeValue.Length && i < ds.Start + tmpDateTime.Count; i++) { dateTimeValue[i] = tmpDateTime[i - ds.Start]; } break; case Class.TypeUse.TypeList.Double: tmpDouble = (List <double>)ds.Value; for (int i = ds.Start; i < doubleValue.Length && i < ds.Start + tmpDouble.Count; i++) { doubleValue[i] = tmpDouble[i - ds.Start]; } break; case Class.TypeUse.TypeList.Float: tmpFloat = (List <float>)ds.Value; for (int i = ds.Start; i < floatValue.Length && i < ds.Start + tmpFloat.Count; i++) { floatValue[i] = tmpFloat[i - ds.Start]; } break; case Class.TypeUse.TypeList.Int: tmpInt = (List <int>)ds.Value; for (int i = ds.Start; i < intValue.Length && i < ds.Start + tmpInt.Count; i++) { intValue[i] = tmpInt[i - ds.Start]; } break; case Class.TypeUse.TypeList.Long: tmpLong = (List <long>)ds.Value; for (int i = ds.Start; i < longValue.Length && i < ds.Start + tmpLong.Count; i++) { longValue[i] = tmpLong[i - ds.Start]; } break; case Class.TypeUse.TypeList.String: tmpString = (List <string>)ds.Value; for (int i = ds.Start; i < stringValue.Length && i < ds.Start + tmpString.Count; i++) { stringValue[i] = tmpString[i - ds.Start]; } break; case Class.TypeUse.TypeList.UShort: tmpUshort = (List <ushort>)ds.Value; for (int i = ds.Start; i < ushortValue.Length && i < ds.Start + tmpUshort.Count; i++) { ushortValue[i] = tmpUshort[i - ds.Start]; } break; } } if (parent is Communicate.Udp) { Dictionary <string, string> parm = new Dictionary <string, string>(); parm.Add("RemotHost", reciveArgs.RemotIP); parm.Add("RemotPort", reciveArgs.RemotPort.ToString()); parent.Send <byte[]>(rs.GetBytes(), parm); } else { parent.Send <byte[]>(rs.GetBytes()); } } } }