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"); }
/// <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()); } } }
// 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()); }
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"); } }