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) ); }
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) )); }
/// <summary>この変数がオブジェクト型であると想定し、値を設定します。</summary> /// <param name="obj">設定する値</param> /// <returns>設定に成功した場合はtrue</returns> public bool SetValue(QiObject obj) => QiApiValue.SetObject(NonDynamicValue, obj);
internal QiMethod(QiObject obj, IEnumerable<QiMethodInfo> overloads) { _obj = obj; Name = overloads.First().Name; Overloads = new ReadOnlyList<QiMethodInfo>(overloads.ToList()); }
/// <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); }
internal QiMethods(QiObject qiObj) { _methods = GetMethods(qiObj); }
/// <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)); }
internal QiMethod(QiObject obj, IEnumerable <QiMethodInfo> overloads) { _obj = obj; Name = overloads.First().Name; Overloads = new ReadOnlyList <QiMethodInfo>(overloads.ToList()); }