public void TestWoopsaValueExtended() { string woopsaServer, woopsaItemPath; WoopsaValue v = WoopsaValue.WoopsaAbsoluteLink("http://woopsa.demo.org/", "/tunnel1/luftung"); v.DecodeWoopsaLink(out woopsaServer, out woopsaItemPath); Assert.AreEqual(woopsaServer, "http://woopsa.demo.org"); Assert.AreEqual(woopsaItemPath, "tunnel1/luftung"); Assert.AreEqual(v.Type, WoopsaValueType.WoopsaLink); v = WoopsaValue.WoopsaRelativeLink("/tunnel2/luftung"); v.DecodeWoopsaLink(out woopsaServer, out woopsaItemPath); Assert.AreEqual(woopsaServer, null); Assert.AreEqual(woopsaItemPath, "tunnel2/luftung"); Assert.AreEqual(v.Type, WoopsaValueType.WoopsaLink); v = WoopsaValue.WoopsaResourceUrl("http://www.woopsa.org/logo.png"); Assert.AreEqual(v.AsText, "http://www.woopsa.org/logo.png"); Assert.AreEqual(v.Type, WoopsaValueType.ResourceUrl); v = WoopsaValue.WoopsaJsonData("{\"Name\":\"Switzerland\" , \"Year\":1291}"); Assert.IsNotNull(v.JsonData); Assert.AreEqual(v.JsonData["Name"].ToString(), "Switzerland"); Assert.AreEqual(v.JsonData["Year"].ToInt16(), 1291); Assert.AreEqual(v.JsonData["Year"].ToInt32(), 1291); Assert.AreEqual(v.JsonData["Year"].ToInt64(), 1291); Assert.AreEqual(v.Type, WoopsaValueType.JsonData); }
public void TestWoopsaDynamicNotificationUnexistingProperty() { TestObjectServer objectServer = new TestObjectServer(); using (WoopsaServer server = new WoopsaServer(objectServer, TestingPort)) { // Solution with dynamic client using (dynamic dynamicClient = new WoopsaDynamicClient(TestingUrl)) { int channel = dynamicClient.SubscriptionService.CreateSubscriptionChannel(QUEUE_SIZE); // Subscription for an nonexistent variable (should work) dynamicClient.SubscriptionService.RegisterSubscription(channel, WoopsaValue.WoopsaRelativeLink("/Vote"), TimeSpan.FromMilliseconds(MONITOR_INTERVAL), TimeSpan.FromMilliseconds(PUBLISH_INTERVAL)); Stopwatch watch = new Stopwatch(); WoopsaValue lastNotifications; WoopsaJsonData jsonData; int lastNotificationId; watch.Start(); do { lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 0); Assert.AreEqual(lastNotifications.Type, WoopsaValueType.JsonData); jsonData = lastNotifications.JsonData; if (watch.ElapsedMilliseconds > 1000) { Assert.Fail("Timeout without receveiving any notification"); } }while (jsonData.Length == 0); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 1); // Get again the same notification lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 0); jsonData = lastNotifications.JsonData; Assert.IsTrue(jsonData.IsArray); Assert.AreEqual(jsonData.Length, 1); Assert.IsTrue(jsonData[0].IsDictionary); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 1); } } } //end TestWoopsaDynamicNotification
public void TestWoopsaWaitNotification() { TestObjectServer objectServer = new TestObjectServer(); using (WoopsaServer server = new WoopsaServer(objectServer, TestingPort)) { using (WoopsaClient client = new WoopsaClient(TestingUrl)) { WoopsaBoundClientObject root = client.CreateBoundRoot(); // Just to show how to see all items foreach (var item in root.Items) { Console.WriteLine("Item = " + item.Name); if (item.Name == "SubscriptionService") { Console.WriteLine("Trouvé"); } } // create a subscription object WoopsaObject subscription = root.Items.ByNameOrNull("SubscriptionService") as WoopsaObject; if (subscription != null) { int result = 0; WoopsaMethod methodCreateScubscriptionChannel = subscription.Methods.ByNameOrNull("CreateSubscriptionChannel"); if (methodCreateScubscriptionChannel != null) { // call the method "CreateSubscriptionChannel" on the server result = methodCreateScubscriptionChannel.Invoke(1000); // define the queue size } int channel = result; WoopsaMethod methodRegisterScubscription = subscription.Methods.ByNameOrNull("RegisterSubscription"); if (methodRegisterScubscription != null) { // call the method "registerScubscription" on the server result = methodRegisterScubscription.Invoke(channel, WoopsaValue.WoopsaRelativeLink("/Votes"), 0.01, 0.01); } int subscriptionNbr = result; WoopsaJsonData jData; WoopsaMethod methodWaitNotification = subscription.Methods.ByNameOrNull("WaitNotification"); if (methodWaitNotification != null) { Stopwatch watch = new Stopwatch(); watch.Start(); // call the method "WaitNotification" on the server Thread.Sleep(100); jData = methodWaitNotification.Invoke(channel, 0).JsonData; Assert.IsTrue(jData.Length > 0); int lastNotification; lastNotification = jData[0]["Id"]; Assert.AreEqual(lastNotification, 1); // Get notifications again Thread.Sleep(100); jData = methodWaitNotification.Invoke(channel, 0).JsonData; Assert.IsTrue(jData.Length > 0); lastNotification = jData[0]["Id"]; Assert.AreEqual(lastNotification, 1); } } } } }
public void TestWoopsaDynamicNotification() { TestObjectServer objectServer = new TestObjectServer(); using (WoopsaServer server = new WoopsaServer(objectServer, TestingPort)) { // Solution with dynamic client using (dynamic dynamicClient = new WoopsaDynamicClient(TestingUrl)) { int channel = dynamicClient.SubscriptionService.CreateSubscriptionChannel(QUEUE_SIZE); // Subscription for a valid variable dynamicClient.SubscriptionService.RegisterSubscription(channel, WoopsaValue.WoopsaRelativeLink("/Votes"), TimeSpan.FromMilliseconds(MONITOR_INTERVAL), TimeSpan.FromMilliseconds(PUBLISH_INTERVAL)); Stopwatch watch = new Stopwatch(); WoopsaValue lastNotifications; WoopsaJsonData jsonData; int lastNotificationId; watch.Start(); do { lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 0); Assert.AreEqual(lastNotifications.Type, WoopsaValueType.JsonData); jsonData = lastNotifications.JsonData; if (watch.ElapsedMilliseconds > 1000) { Assert.Fail("Timeout without receveiving any notification"); } }while (jsonData.Length == 0); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 1); // Get again the same notification lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 0); jsonData = lastNotifications.JsonData; Assert.IsTrue(jsonData.IsArray); Assert.AreEqual(jsonData.Length, 1); Assert.IsTrue(jsonData[0].IsDictionary); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 1); // Generate a new notification objectServer.Votes++; Thread.Sleep(PUBLISH_INTERVAL * 10); // Check we have now 2 lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 0); jsonData = lastNotifications.JsonData; Assert.IsTrue(jsonData.IsArray); Assert.AreEqual(jsonData.Length, 2); Assert.IsTrue(jsonData[0].IsDictionary); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 2); // Check we can remove 1 and still have 1 lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, 1); jsonData = lastNotifications.JsonData; Assert.AreEqual(jsonData.Length, 1); lastNotificationId = jsonData[jsonData.Length - 1]["Id"]; Assert.AreEqual(lastNotificationId, 2); // Enable the code below to test the wait of the timeout when they are 0 notifications pending /* * // Check we can remove 1 and have 0. This takes 5 seconds (we wait the timeout) * lastNotifications = dynamicClient.SubscriptionService.WaitNotification(channel, lastNotificationId); * jsonData = lastNotifications.JsonData; * Assert.AreEqual(jsonData.Length, 0); */ } } } //end TestWoopsaDynamicNotification