Qiのオブジェクト(基本的にサービスモジュールと同じ)を表します。
Beispiel #1
0
        private static IDictionary<string, QiMethod> GetMethods(QiObject qiObj)
        {
            //観察事実としてmObjは4要素タプルであり、第0要素にメソッド一覧が入ってる
            var mObj = qiObj.MetaObject;
            if (mObj.Count == 0)
            {
                throw new InvalidOperationException("meta object does not contains info");
            }

            var qKeys = mObj[0].GetKeys();
            var methodInfos = Enumerable
                .Range(0, qKeys.Count)
                .Select(i => qKeys[i])
                .Select(k => new QiMethodInfo(mObj[0][k]));

            var methodOverloads = new Dictionary<string, List<QiMethodInfo>>();
            foreach (var mi in methodInfos)
            {
                if (methodOverloads.ContainsKey(mi.Name))
                {
                    methodOverloads[mi.Name].Add(mi);
                }
                else
                {
                    methodOverloads[mi.Name] = new List<QiMethodInfo>() { mi };
                }
            }

            return methodOverloads.ToDictionary(
                p => p.Key,
                p => new QiMethod(qiObj, p.Value)
                );
        }
Beispiel #2
0
        private static IDictionary <string, QiMethod> GetMethods(QiObject qiObj)
        {
            //観察事実としてmObjは4要素タプルであり、第0要素にメソッド一覧が入ってる
            var mObj = qiObj.MetaObject;

            if (mObj.Count == 0)
            {
                throw new InvalidOperationException("meta object does not contains info");
            }

            var qKeys       = mObj[0].GetKeys();
            var methodInfos = Enumerable
                              .Range(0, qKeys.Count)
                              .Select(i => qKeys[i])
                              .Select(k => new QiMethodInfo(mObj[0][k]));

            var methodOverloads = new Dictionary <string, List <QiMethodInfo> >();

            foreach (var mi in methodInfos)
            {
                if (methodOverloads.ContainsKey(mi.Name))
                {
                    methodOverloads[mi.Name].Add(mi);
                }
                else
                {
                    methodOverloads[mi.Name] = new List <QiMethodInfo>()
                    {
                        mi
                    };
                }
            }

            return(methodOverloads.ToDictionary(
                       p => p.Key,
                       p => new QiMethod(qiObj, p.Value)
                       ));
        }
Beispiel #3
0
 /// <summary>この変数がオブジェクト型であると想定し、値を設定します。</summary>
 /// <param name="obj">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(QiObject obj) => QiApiValue.SetObject(NonDynamicValue, obj);
Beispiel #4
0
 internal QiMethod(QiObject obj, IEnumerable<QiMethodInfo> overloads)
 {
     _obj = obj;
     Name = overloads.First().Name;
     Overloads = new ReadOnlyList<QiMethodInfo>(overloads.ToList());
 }
Beispiel #5
0
 /// <summary>この変数がオブジェクト型であると想定し、値を設定します。</summary>
 /// <param name="obj">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(QiObject obj) => QiApiValue.SetObject(NonDynamicValue, obj);
Beispiel #6
0
 /// <summary>サービスに名前を付けて登録します。</summary>
 /// <param name="name">サービス名</param>
 /// <param name="obj">サービスの実体</param>
 /// <returns>未確認(たぶんサービスのID)</returns>
 public QiFuture RegisterService(string name, QiObject obj)
 {
     ThrowIfNotConnected();
     return QiApiSession.RegisterService(this, name, obj);
 }
Beispiel #7
0
 internal QiMethods(QiObject qiObj)
 {
     _methods = GetMethods(qiObj);
 }
Beispiel #8
0
 /// <summary>サービスに名前を付けて登録します。</summary>
 /// <param name="name">サービス名</param>
 /// <param name="obj">サービスの実体</param>
 /// <returns>未確認(たぶんサービスのID)</returns>
 public QiFuture RegisterService(string name, QiObject obj)
 {
     ThrowIfNotConnected();
     return(QiApiSession.RegisterService(this, name, obj));
 }
Beispiel #9
0
 internal QiMethod(QiObject obj, IEnumerable <QiMethodInfo> overloads)
 {
     _obj      = obj;
     Name      = overloads.First().Name;
     Overloads = new ReadOnlyList <QiMethodInfo>(overloads.ToList());
 }
Beispiel #10
0
 internal QiMethods(QiObject qiObj)
 {
     _methods = GetMethods(qiObj);
 }