private static void getData(ref DateTime _refDate, ISerializer aSerializer, IDuplexBroker aBroker) { using (var connection = new SqlConnection(connectionString)) { connection.Open(); string cmdText = "SELECT id, usage, created_at FROM RealTimeChartWeb WHERE created_at > @created_at"; using (SqlCommand command = new SqlCommand(cmdText, connection)) { command.Parameters.Add("@created_at", SqlDbType.DateTime); command.Parameters["@created_at"].Value = _refDate; command.Notification = null; SqlDependency dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); if (connection.State == ConnectionState.Closed) { connection.Open(); } var reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { //json = reader[0].ToString(); var date = Convert.ToDateTime(reader["created_at"]); if (date > _refDate) { _refDate = date; DataUsage aMessage = new DataUsage(); aMessage.values = float.Parse(reader["usage"].ToString()); // Serialize the message. object aSerializedMessage = aSerializer.Serialize <DataUsage>(aMessage); // Notify subscribers via the broker. // Note: The broker will forward the message to subscribed clients. aBroker.SendMessage("MyUpdateData", aSerializedMessage); } } } reader.Close(); } } }
static async Task SendMonitoringMessages(IDuplexBroker broker, CancellationToken cancellationToken) { var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); ISerializer aSerializer = new DataContractJsonStringSerializer(); while (!cancellationToken.IsCancellationRequested) { CpuUpdateMessage aMessage = new CpuUpdateMessage(); aMessage.Usage = cpuCounter.NextValue(); object aSerializedMessage = aSerializer.Serialize<CpuUpdateMessage>(aMessage); broker.SendMessage("MyCpuUpdate", aSerializedMessage); try { await Task.Delay(500, cancellationToken); } catch (TaskCanceledException) { } } }
public void NotifySubscribers() { //EneterTrace.DetailLevel = EneterTrace.EDetailLevel.Debug; //EneterTrace.TraceLog = new StreamWriter("d:/tracefile.txt"); // Create channels IMessagingSystemFactory aMessagingSystem = new SynchronousMessagingSystemFactory(); IDuplexInputChannel aBrokerInputChannel = aMessagingSystem.CreateDuplexInputChannel("BrokerChannel"); IDuplexOutputChannel aSubscriber1ClientOutputChannel = aMessagingSystem.CreateDuplexOutputChannel("BrokerChannel"); IDuplexOutputChannel aSubscriber2ClientOutputChannel = aMessagingSystem.CreateDuplexOutputChannel("BrokerChannel"); IDuplexOutputChannel aSubscriber3ClientOutputChannel = aMessagingSystem.CreateDuplexOutputChannel("BrokerChannel"); IDuplexBrokerFactory aBrokerFactory = new DuplexBrokerFactory(); IDuplexBroker aBroker = aBrokerFactory.CreateBroker(); BrokerMessageReceivedEventArgs aBrokerReceivedMessage = null; aBroker.BrokerMessageReceived += (x, y) => { aBrokerReceivedMessage = y; }; aBroker.AttachDuplexInputChannel(aBrokerInputChannel); IDuplexBrokerClient aBrokerClient1 = aBrokerFactory.CreateBrokerClient(); BrokerMessageReceivedEventArgs aClient1ReceivedMessage = null; aBrokerClient1.BrokerMessageReceived += (x, y) => { aClient1ReceivedMessage = y; }; aBrokerClient1.AttachDuplexOutputChannel(aSubscriber1ClientOutputChannel); IDuplexBrokerClient aBrokerClient2 = aBrokerFactory.CreateBrokerClient(); BrokerMessageReceivedEventArgs aClient2ReceivedMessage = null; aBrokerClient2.BrokerMessageReceived += (x, y) => { aClient2ReceivedMessage = y; }; aBrokerClient2.AttachDuplexOutputChannel(aSubscriber2ClientOutputChannel); IDuplexBrokerClient aBrokerClient3 = aBrokerFactory.CreateBrokerClient(); BrokerMessageReceivedEventArgs aClient3ReceivedMessage = null; aBrokerClient3.BrokerMessageReceived += (x, y) => { aClient3ReceivedMessage = y; }; aBrokerClient3.AttachDuplexOutputChannel(aSubscriber3ClientOutputChannel); string[] aSubscription1 = { "TypeA", "TypeB" }; aBrokerClient1.Subscribe(aSubscription1); string[] aSubscription2 = { "TypeA" }; aBrokerClient2.Subscribe(aSubscription2); string[] aSubscription3 = { "MTypeC" }; aBrokerClient3.Subscribe(aSubscription3); aBroker.Subscribe("TypeA"); aBrokerClient3.SendMessage("TypeA", "Message A"); Assert.AreEqual("TypeA", aClient1ReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aClient1ReceivedMessage.Message); Assert.AreEqual(null, aClient1ReceivedMessage.ReceivingError); Assert.AreEqual("TypeA", aClient2ReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aClient2ReceivedMessage.Message); Assert.AreEqual(null, aClient2ReceivedMessage.ReceivingError); Assert.AreEqual(null, aClient3ReceivedMessage); Assert.AreEqual("TypeA", aBrokerReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aBrokerReceivedMessage.Message); Assert.AreEqual(null, aBrokerReceivedMessage.ReceivingError); aClient1ReceivedMessage = null; aClient2ReceivedMessage = null; aClient3ReceivedMessage = null; aBrokerReceivedMessage = null; aBrokerClient2.Unsubscribe(); aBrokerClient3.SendMessage("MTypeC", "Message MTC"); Assert.AreEqual(null, aClient1ReceivedMessage); Assert.AreEqual(null, aClient2ReceivedMessage); Assert.AreEqual("MTypeC", aClient3ReceivedMessage.MessageTypeId); Assert.AreEqual("Message MTC", (string)aClient3ReceivedMessage.Message); Assert.AreEqual(null, aClient3ReceivedMessage.ReceivingError); Assert.AreEqual(null, aBrokerReceivedMessage); aClient1ReceivedMessage = null; aClient2ReceivedMessage = null; aClient3ReceivedMessage = null; aBrokerReceivedMessage = null; aBroker.SendMessage("TypeA", "Message A"); Assert.AreEqual("TypeA", aClient1ReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aClient1ReceivedMessage.Message); Assert.AreEqual(null, aClient1ReceivedMessage.ReceivingError); Assert.AreEqual(null, aClient2ReceivedMessage); Assert.AreEqual(null, aClient3ReceivedMessage); Assert.AreEqual("TypeA", aBrokerReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aBrokerReceivedMessage.Message); Assert.AreEqual(null, aBrokerReceivedMessage.ReceivingError); aClient1ReceivedMessage = null; aClient2ReceivedMessage = null; aClient3ReceivedMessage = null; aBrokerReceivedMessage = null; aBroker.Unsubscribe("TypeA"); string[] aNewMessageType = { "TypeA" }; aBrokerClient3.Subscribe(aNewMessageType); aBrokerClient1.DetachDuplexOutputChannel(); aBrokerClient3.SendMessage("TypeA", "Message A"); Assert.AreEqual(null, aClient1ReceivedMessage); Assert.AreEqual(null, aClient2ReceivedMessage); Assert.AreEqual("TypeA", aClient3ReceivedMessage.MessageTypeId); Assert.AreEqual("Message A", (string)aClient3ReceivedMessage.Message); Assert.AreEqual(null, aClient3ReceivedMessage.ReceivingError); Assert.AreEqual(null, aBrokerReceivedMessage); }