示例#1
0
        public void TestAppDependencySerialization()
        {
            var dep = new AppDependency();
            dep.Dependencies = new Dictionary<string, Dictionary<string, string>>();
            var inner = new Dictionary<string, string>();
            inner["GoogleTV"] = "in use";
            dep.Dependencies["Video"] = inner;

            string json = dep.Serialize();

            Assert.IsTrue(json.IndexOf("\"GoogleTV\":\"in use\"") > 0, "should have google tv in use");
        }
示例#2
0
        /// <summary>
        /// Notify dependencies that the app has gone down
        /// </summary>
        /// <param name="registry"></param>
        public override void VisitRegistry(Registry registry)
        {
            Log.Info(String.Format(
                "{0} {1} is now \"{2}\"",
                instance.DisplayName,
                instance.InstanceId,
                instance.AppStatus.ToString()
            ));

            var capabilities = instance.Capabilities;

            // apps that depend on this, mapped to the capabilities they expect it to use
            var apps = new Dictionary<AppInstance, List<string>>();

            // Build the list of things that depend on this
            foreach (var capability in capabilities)
            {
                foreach (var app in registry.GetDependents(capability))
                {
                    if(!apps.ContainsKey(app))
                    {
                        apps[app] = new List<string>();
                    }
                    apps[app].Add(capability.Name);
                }
            }

            // Assemble the message that gets sent for each app
            foreach (var app in apps)
            {
                var message = new AppDependency();
                message.Dependencies = new Dictionary<string, Dictionary<string, string>>();
                foreach(var capability in app.Value)
                {
                    message.Dependencies[capability] = new Dictionary<string, string>()
                    {
                        { instance.InstanceId, instance.AppStatus.ToString() }
                    };
                }

                if (message.Dependencies.Count > 0)
                {
                    app.Key.Send("APP_DEPENDENCY " + message.Serialize());
                }
            }
        }
示例#3
0
        // Generate the dependency list
        public override void VisitRegistry(Registry registry)
        {
            var dependencies = instance.Dependencies;

            var message = new AppDependency();
            foreach (var capability in dependencies)
            {
                var capabilityList = new Dictionary<string, string>();

                foreach(var appInstance in registry.GetProviders(capability))
                {
                    capabilityList.Add(appInstance.InstanceId, appInstance.AppStatus.ToString());
                }

                message.Dependencies[capability.Name] = capabilityList;
            }

            instance.Send("APP_DEPENDENCY " + message.Serialize());
        }
示例#4
0
        public static new DataPacket Deserialize(string json)
        {
            try
            {
                var ret = new AppDependency();
                ret.Dependencies = new Dictionary<string, Dictionary<string, string>>();

                dynamic obj = Json.Decode(json);
                DynamicJsonObject djobj = obj as DynamicJsonObject;

                // iterate over each of the capabilities
                foreach (string capability in djobj.GetDynamicMemberNames())
                {
                    // iterate over each of the instance ids for this capability
                    DynamicJsonObject inner = obj[capability] as DynamicJsonObject;
                    if (inner == null)
                    {
                        throw new ParseException(json, "JSON not structured correctly");
                    }
                    ret.Dependencies[capability] = new Dictionary<string, string>();
                    foreach (string instanceId in inner.GetDynamicMemberNames())
                    {
                        string status = obj[capability][instanceId];
                        ret.Dependencies[capability][instanceId] = status;
                    }
                }
                return ret;
            }
            catch (System.ArgumentException)
            {
                throw new ParseException(json, "Invalid JSON");
            }
            catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
            {
                throw new ParseException(json, "Valid JSON but invalid content");
            }
        }