generate() private method

private generate ( MsgTypes t ) : IRosMessage
t MsgTypes
return IRosMessage
Exemplo n.º 1
0
 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]);
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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!");
                }
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 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);
     }
 }