summaryrefslogtreecommitdiff
path: root/IvyTransduct/IvyTransduct.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IvyTransduct/IvyTransduct.cs')
-rw-r--r--IvyTransduct/IvyTransduct.cs105
1 files changed, 105 insertions, 0 deletions
diff --git a/IvyTransduct/IvyTransduct.cs b/IvyTransduct/IvyTransduct.cs
new file mode 100644
index 0000000..b8fc366
--- /dev/null
+++ b/IvyTransduct/IvyTransduct.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using IvyBus;
+using Gnu;
+using System.Xml;
+
+namespace IvyTransduct
+{
+ class IvyTransduct
+ {
+ public const String helpmsg =
+ "usage: IvyProbe [options] filename\n" +
+ "\t-b BUS\tspecifies the Ivy bus domain\n" +
+ "\t-n ivyname (default IvyTransduct)\n" +
+ "\t-d\tdebug\n" +
+ "\t-h\thelp\n\n" +
+ "\t-f filename ( message to transduct)";
+ static Ivy bus;
+ static bool debug = false;
+
+ static void resentCB(object sender, IvyMessageEventArgs args)
+ {
+ IvyApplicationBinding binding = sender as IvyApplicationBinding;
+ foreach (string msg in (List<string>)binding.CallbackArguments[0])
+ {
+ try
+ {
+ string msg_out = string.Format(msg, args.GetArguments());
+ if (debug)
+ Console.WriteLine("resent msg: {0} => {1}", args, msg_out);
+ bus.SendMsg(msg_out);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("Error sending msg {0} : {1}", msg, ex.Message);
+ }
+ }
+
+ }
+ static void Main(string[] args)
+ {
+ string domain = Ivy.GetDomain(null);
+
+ string name = "IvyTransduct";
+
+ GetOpt opt = new GetOpt(args, "n:b:dh");
+ Arg a;
+ while ((a = opt.NextArg()) != null)
+ {
+ switch (a.Flag)
+ {
+ case 'd':
+ debug = true;
+ break;
+
+ case 'b':
+ domain = a.Parameter;
+ break;
+
+ case 'n':
+ name = a.Parameter;
+ break;
+
+ case 'h':
+ default:
+ System.Console.Out.WriteLine(helpmsg);
+ System.Environment.Exit(0);
+ break;
+
+ }
+ }
+ bus = new Ivy(name, name + " ready");
+
+ foreach (string filename in opt.Extras)
+ {
+ if (debug)
+ Console.WriteLine("Read File {0}", filename);
+ try
+ {
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.Load(filename);
+ foreach (XmlElement msg in xmlDoc.SelectNodes("/transduct/message"))
+ {
+ string msg_in = msg.SelectSingleNode("input").Attributes["bind"].Value;
+ if (debug) Console.WriteLine("message: " + msg_in);
+ List<string> outputs = new List<string>();
+ foreach ( XmlElement item in msg.SelectNodes( "output/item" ) )
+ {
+ string msg_out = item.Attributes["msg"].Value;
+ if (debug) Console.WriteLine("\t out: " + msg_out);
+ outputs.Add(msg_out);
+ }
+ bus.BindMsg(msg_in, resentCB, outputs);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("Error reading file {0} : {1}", filename, ex.Message);
+ }
+ }
+ bus.Start(domain);
+ }
+ }
+}