override public void setBoolean(int byteadr, int bitadr, Boolean state) { if (connected) { try { if (state) { ps.Poke("%ix" + byteadr + "." + bitadr, "1", 60000); //Console.WriteLine("Write Bool: %ix"+ byteadr+"."+bitadr+" state="+state); } else { ps.Poke("%ix" + byteadr + "." + bitadr, "0", 60000); //Console.WriteLine("Write Bool: %ix" + byteadr + "." + bitadr+" state="+state); } } catch (Exception e) { Console.WriteLine("Write Bool:e=" + e); //return false; } } //return true; }
public void Test_Poke_Before_Connect() { using var server = new TestServer(ServiceName); server.Register(); using var client = new DdeClient(ServiceName, TopicName); Assert.Throws<InvalidOperationException>(() => client.Poke(ItemName, Encoding.ASCII.GetBytes(TestData), 1, Timeout)); }
public void Test_Poke_After_Dispose() { using var server = new TestServer(ServiceName); server.Register(); using var client = new DdeClient(ServiceName, TopicName); client.Connect(); client.Dispose(); Assert.Throws<ObjectDisposedException>(() => client.Poke(ItemName, Encoding.ASCII.GetBytes(TestData), 1, Timeout)); }
public void Test_Poke() { using var server = new TestServer(ServiceName); server.Register(); using var client = new DdeClient(ServiceName, TopicName); client.Connect(); client.Poke(ItemName, Encoding.ASCII.GetBytes(TestData), 1, Timeout); Assert.AreEqual(TestData, Encoding.ASCII.GetString(server.GetData(TopicName, ItemName, 1))); }
public void Test_Poke_Before_Connect() { using (TestServer server = new TestServer(ServiceName)) { server.Register(); using (DdeClient client = new DdeClient(ServiceName, TopicName)) { client.Poke(ItemName, Encoding.ASCII.GetBytes(TestData), 1, Timeout); } } }
public static void Main(string[] args) { // Wait for the user to press ENTER before proceding. Console.WriteLine("The Server sample must be running before the client can connect."); Console.WriteLine("Press ENTER to continue..."); Console.ReadLine(); try { // Create a client that connects to 'myapp|mytopic'. using (DdeClient client = new DdeClient("myapp", "mytopic")) { // Subscribe to the Disconnected event. This event will notify the application when a conversation has been terminated. client.Disconnected += OnDisconnected; // Connect to the server. It must be running or an exception will be thrown. client.Connect(); // Synchronous Execute Operation client.Execute("mycommand", 60000); // Synchronous Poke Operation client.Poke("myitem", DateTime.Now.ToString(), 60000); // Syncronous Request Operation Console.WriteLine("Request: " + client.Request("myitem", 60000)); // Asynchronous Execute Operation client.BeginExecute("mycommand", OnExecuteComplete, client); // Asynchronous Poke Operation client.BeginPoke("myitem", Encoding.ASCII.GetBytes(DateTime.Now.ToString() + "\0"), 1, OnPokeComplete, client); // Asynchronous Request Operation client.BeginRequest("myitem", 1, OnRequestComplete, client); // Advise Loop client.StartAdvise("myitem", 1, true, 60000); client.Advise += OnAdvise; // Wait for the user to press ENTER before proceding. Console.WriteLine("Press ENTER to quit..."); Console.ReadLine(); } } catch (Exception e) { Console.WriteLine(e.ToString()); Console.WriteLine("Press ENTER to quit..."); Console.ReadLine(); } }
override public void setBoolean(int byteadr, int bitadr, Boolean state) { if (connected) { // Mapping if (state) { if (byteadr == 4 && bitadr == 2) { outValue |= 1; } if (byteadr == 4 && bitadr == 3) { outValue |= 2; } if (byteadr == 4 && bitadr == 4) { outValue |= 4; } if (byteadr == 4 && bitadr == 5) { outValue |= 8; } if (byteadr == 5 && bitadr == 0) { outValue |= 16; } if (byteadr == 5 && bitadr == 1) { outValue |= 32; } if (byteadr == 5 && bitadr == 2) { outValue |= 64; } } else { if (byteadr == 4 && bitadr == 2) { outValue &= ~1; } if (byteadr == 4 && bitadr == 3) { outValue &= ~2; } if (byteadr == 4 && bitadr == 4) { outValue &= ~4; } if (byteadr == 4 && bitadr == 5) { outValue &= ~8; } if (byteadr == 5 && bitadr == 0) { outValue &= ~16; } if (byteadr == 5 && bitadr == 1) { outValue &= ~32; } if (byteadr == 5 && bitadr == 2) { outValue &= ~64; } } try { ps.Poke(inMarke, outValue.ToString(), 60000); } catch (Exception e) { Console.WriteLine("Write Bool:e=" + e); //return false; } } //return true; }
private static void T_Elapsed(object sender, ElapsedEventArgs e) { Hashtable fieldInputs; //Get a local copy of the field inputs lock (FieldInputsLock) { fieldInputs = _FieldInputs; } //Update inputs foreach (var pump in Pumps) { pump.UpdateInputs(fieldInputs); } //Run the pump logic foreach (var pump in Pumps) { pump.Run(); } foreach (var flowMeter in FlowMeters) { flowMeter.Run(Pumps); } Hashtable fieldOutputs = new Hashtable(); //Update outputs foreach (var pump in Pumps) { pump.UpdateOutputs(out Hashtable outputs); foreach (DictionaryEntry o in outputs) { if (!fieldOutputs.ContainsKey(o.Key)) { fieldOutputs.Add(o.Key, o.Value); } } } foreach (var flowMeter in FlowMeters) { flowMeter.UpdateOutputs(out Hashtable outputs); foreach (DictionaryEntry o in outputs) { if (!fieldOutputs.ContainsKey(o.Key)) { fieldOutputs.Add(o.Key, o.Value); } } } if (c != null && c.IsConnected) { foreach (DictionaryEntry o in fieldOutputs) { if (o.Key != null && o.Value != null) { Console.WriteLine("Poke: " + o.Key.ToString() + ": " + o.Value.ToString()); string res = o.Value.ToString() == "True" ? "1" : "0"; c.Poke(o.Key.ToString(), res, 1000); } } } }
public async Task <object> GetInvoker(IDictionary <string, object> input) { var services = (IDictionary <string, object>)input["services"]; var callbacks = (IDictionary <string, object>)input["callbacks"]; var clients = new List <DdeClient>(); foreach (string service in services.Keys) { var topics = (IDictionary <string, object>)services[service]; foreach (string topic in topics.Keys) { DdeClient client = new DdeClient(service, topic); clients.Add(client); } } var onDisconnected = (Func <object, Task <object> >)callbacks["OnDisconnected"]; foreach (DdeClient client in clients) { client.Disconnected += async(object sender, DdeDisconnectedEventArgs args) => { var obj = new Dictionary <string, object>(); obj["service"] = client.Service; obj["topic"] = client.Topic; obj["isDisposed"] = args.IsServerInitiated; obj["isServerInitiated"] = args.IsServerInitiated; await Task.Run(async() => await onDisconnected(obj)); }; } var onAdvise = (Func <object, Task <object> >)callbacks["OnAdvise"]; foreach (DdeClient client in clients) { client.Advise += async(object sender, DdeAdviseEventArgs args) => { var obj = new Dictionary <string, object>(); obj["service"] = client.Service; obj["topic"] = client.Topic; obj["item"] = args.Item; obj["text"] = Encoding.Default.GetString(args.Data).Trim('\0', ' ').ToString(); await Task.Run(async() => await onAdvise(obj)); }; } return((Func <object, Task <object> >)(async(i) => { var opts = (IDictionary <string, object>)i; var method = (string)opts["method"]; var command = opts.ContainsKey("command") ? (string)opts["command"] : null; var data = opts.ContainsKey("data") ? (string)opts["data"] : null; var format = opts.ContainsKey("format") ? (int)opts["format"] : 1; var timeout = opts.ContainsKey("timeout") ? (int)opts["timeout"] : 10000; var hot = opts.ContainsKey("hot") ? (bool)opts["hot"] : true; var callback = opts.ContainsKey("callback") ? (Func <object, Task <object> >)opts["callback"] : (o) => null; var results = new List <IDictionary <string, object> >(); /* * string item = null; * if (opts.ContainsKey("item")) * { * item = (string)opts["item"]; * } * * if (clients.Count == 1 && item != null) // a single client and only one 'item' is supplied. * { * var client = clients.First(); * ((IDictionary<string, object>)services[client.Service])[client.Topic] = new[] { item }; * * byte[] result = null; * * switch (method) * { * case "Request": * result = client.Request(item, format, timeout); * return Encoding.Default.GetString(result); * case "BeginExecute": * await Task.Run(() => * { * var tcs = new TaskCompletionSource<bool>(); * AsyncCallback cb = (ar) => { tcs.SetResult(true); }; * client.BeginExecute(command, cb, client); * var r = tcs.Task.Result; * }); * break; * case "BeginPoke": * await Task.Run(() => * { * var tcs = new TaskCompletionSource<bool>(); * AsyncCallback cb = (ar) => { tcs.SetResult(true); }; * var bytes = Encoding.Default.GetBytes((string)opts["data"] + "\0"); * client.BeginPoke(item, bytes, format, cb, client); * var r = tcs.Task.Result; * }); * break; * case "BeginRequest": * await Task.Run(() => * { * var tcs = new TaskCompletionSource<byte[]>(); * AsyncCallback cb = (ar) => * { * tcs.SetResult(client.EndRequest(ar)); * }; * client.BeginRequest(item, format, cb, client); * result = tcs.Task.Result; * }); * return Encoding.Default.GetString(result); * case "BeginStartAdvise": * await Task.Run(() => * { * var tcs = new TaskCompletionSource<bool>(); * AsyncCallback cb = (ar) => { tcs.SetResult(true); }; * client.BeginStartAdvise(item, format, hot, cb, client); * var r = tcs.Task.Result; * }); * break; * case "BeginStopAdvise": * await Task.Run(() => * { * var tcs = new TaskCompletionSource<bool>(); * AsyncCallback cb = (ar) => { tcs.SetResult(true); }; * client.BeginStopAdvise(item, cb, client); * var r = tcs.Task.Result; * }); * break; * case "Service": * return client.Service; * case "Topic": * return client.Topic; * case "Handle": * return client.Handle; * case "IsConnected": * return client.IsConnected; * case "IsPaused": * return client.IsPaused; * } * } */ if (clients.Count != 0) { switch (method) { case "Connect": clients.ForEach((c) => c.Connect()); break; case "Disconnect": clients.ForEach((c) => c.Disconnect()); break; case "Pause": clients.ForEach((c) => c.Pause()); break; case "Resume": clients.ForEach((c) => c.Resume()); break; case "Execute": clients.ForEach((c) => c.Execute(command, timeout)); break; case "Poke": foreach (DdeClient client in clients) { var topics = (IDictionary <string, object>)services[client.Service]; var items = (object[])topics[client.Topic]; foreach (string item_ in items) { client.Poke(item_, data, timeout); } } break; case "Request": foreach (DdeClient client in clients) { var topics = (IDictionary <string, object>)services[client.Service]; // var items = (object[])topics[client.Topic]; var items = (object[])opts["item"]; foreach (string item_ in items) { var result = client.Request(item_, format, timeout); var obj = new Dictionary <string, object>(); obj["service"] = client.Service; obj["topic"] = client.Topic; obj["item"] = item_; obj["result"] = Encoding.Default.GetString(result).Trim('\0', ' ').ToString(); results.Add(obj); } } return results.ToArray(); case "StartAdvise": foreach (DdeClient client in clients) { var topics = (IDictionary <string, object>)services[client.Service]; var items = (object[])topics[client.Topic]; foreach (string item_ in items) { client.StartAdvise(item_, format, hot, timeout); } } break; case "StopAdvise": foreach (DdeClient client in clients) { var topics = (IDictionary <string, object>)services[client.Service]; var items = (object[])topics[client.Topic]; foreach (string item_ in items) { client.StopAdvise(item_, timeout); } } break; case "Dispose": clients.ForEach((c) => c.Dispose()); break; case "Service": return clients.Select((c) => c.Service).ToArray(); case "Topic": return clients.Select((c) => c.Topic).Distinct().ToArray(); case "Handle": return clients.Select((c) => c.Handle).ToArray(); case "IsConnected": return clients.All((c) => c.IsConnected); case "IsPaused": return clients.All((c) => c.IsPaused); } } return null; })); }