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(); }
void root_changed(Topic sender, TopicChanged param) { if(!_verbose) { return; } var ir=param.Initiator; switch(param.Art) { case TopicChanged.ChangeArt.Add: if(ir==null) { Log.Debug("+ {0}[{1}]", sender.path, sender.valueType); } else { Log.Debug("+ {0}[{1}] : {2}", sender.path, sender.valueType, ir.name); } break; case TopicChanged.ChangeArt.Value: if(ir==null) { if(!sender.path.StartsWith("/dev/.clock/")) { Log.Debug("! {0}={1}", sender.path, sender.GetValue()); } } else if(!ir.path.StartsWith("/dev/.clock/")) { Log.Debug("! {0}={1} : {2}", sender.path, sender.GetValue(), ir.name); } break; case TopicChanged.ChangeArt.Remove: if(ir==null) { Log.Debug("- {0}", sender.path, param.Initiator); } else { Log.Debug("- {0} : {1}", sender.path, ir.name); } break; } }