private generate ( MsgTypes t ) : |
||
t | MsgTypes | |
return |
public static string Sum(MsgTypes m) { if (!md5memo.ContainsKey(m)) { IRosMessage irm = IRosMessage.generate(m); string hashme = PrepareToHash(irm); md5memo.Add(m, Sum(hashme)); } return(md5memo[m]); }
public static Type GetType(string s) { Type ret; MsgTypes mt = GetMessageType(s); if (mt == MsgTypes.Unknown) { ret = Type.GetType(s, true, true); } else { ret = IRosMessage.generate(mt).GetType(); } // Console.WriteLine(s + "=" + ret.Name); return(ret); }
public static IRosService generate <RequestType> (SrvTypes t) where RequestType : IRosMessage { lock ( constructors ) { if (constructors.ContainsKey(t)) { return(constructors [t].Invoke(t)); } Type thistype = typeof(IRosService); foreach (Type othertype in Assembly.GetAssembly(typeof(RequestType)).GetTypes()) { if (thistype == othertype || !othertype.IsSubclassOf(thistype) || othertype.IsAbstract || othertype.Name.Contains("Decorator")) { continue; } IRosService srv = Activator.CreateInstance(othertype) as IRosService; if (srv != null) { if (srv.srvtype() == SrvTypes.Unknown) { throw new Exception("OH NOES IRosService.generate is borked!"); } if (!_typeregistry.ContainsKey(srv.srvtype())) { _typeregistry.Add(srv.srvtype(), srv.GetType()); } if (!constructors.ContainsKey(srv.srvtype())) { constructors.Add(srv.srvtype(), T => Activator.CreateInstance(_typeregistry [T]) as IRosService); } srv.RequestMessage = IRosMessage.generate <RequestType> ((MsgTypes)Enum.Parse(typeof(MsgTypes), srv.srvtype().ToString() + "__Request")); srv.ResponseMessage = IRosMessage.generate <RequestType> ((MsgTypes)Enum.Parse(typeof(MsgTypes), srv.srvtype().ToString() + "__Response")); } } if (constructors.ContainsKey(t)) { return(constructors [t].Invoke(t)); } else { throw new Exception("OH NOES IRosService.generate is borked!"); } } }
public static bool IsSizeKnown(Type T, bool recurse) { if (T == typeof(string) || T == typeof(String) || (T.FullName != null && T.FullName.Contains("Messages.std_msgs.String")) /*|| T.IsArray ERIC*/) { return(false); } if (T.FullName.Contains("System.") || T.FullName.Contains("Messages.std_msgs.Time") || T.FullName.Contains("Messages.std_msgs.Duration")) { return(true); } if (!recurse || !T.FullName.Contains("Messages")) { return(true); } FieldInfo[] infos = T.GetFields(); bool b = true; foreach (FieldInfo info in infos) { string fullName = info.FieldType.FullName; if (fullName != null) { if (fullName.Contains("Messages.")) { MsgTypes MT = GetMessageType(info.FieldType); IRosMessage TI = IRosMessage.generate(MT); b &= IsSizeKnown(TI.GetType(), true); //TI.Fields[info.Name].Type != typeof(string) && TI.Fields[info.Name].Type != typeof(String) && (!TI.Fields[info.Name].IsArray || TI.Fields[info.Name].Length != -1); } else { b &= !info.FieldType.IsArray && info.FieldType != typeof(string); } } if (!b) { break; } } return(b); }
public static Type GetType(string s) { lock (GetTypeTypeMemo) { if (GetTypeTypeMemo.ContainsKey(s)) { return(GetTypeTypeMemo[s]); } Type ret; MsgTypes mt = GetMessageType(s); if (mt == MsgTypes.Unknown) { ret = Type.GetType(s, true, true); } else { ret = IRosMessage.generate(mt).GetType(); } return(GetTypeTypeMemo[s] = ret); } }