internal static byte[] Serialize(Topic t) {
List<byte> ret=new List<byte>();
switch(Type.GetTypeCode(t.valueType)) {
case TypeCode.Boolean:
ret.Add((byte)((t as DVar<bool>).value?1:0));
break;
case TypeCode.Int64: {
long vo=(t as DVar<long>).value;
long v=vo;
do {
ret.Add((byte)v);
v=v>>8;
} while(vo<0?(v<-1 || (ret[ret.Count-1]&0x80)==0):(v>0 || (ret[ret.Count-1]&0x80)!=0));
}
break;
//case TypeCode.Double:
case TypeCode.String: {
string v=(string)t.GetValue();
if(!string.IsNullOrEmpty(v)) {
ret.AddRange(Encoding.Default.GetBytes(v));
}
}
break;
case TypeCode.Object:
if(t.valueType==typeof(PLC.ByteArray) && t.GetValue()!=null) {
ret.AddRange(((PLC.ByteArray)t.GetValue()).GetBytes());
}
break;
}
return ret.ToArray();
}
public static void ProcessInPacket(IMsGate gate, byte[] addr, byte[] buf, int start, int end) {