Beispiel #1
0
        protected internal virtual void Initialize(XmlSerializer serializer, Service service)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }
            else if (service == null)
            {
                throw new ArgumentNullException("service");
            }
            else if (service.ScpdUrl == null)
            {
                throw new ArgumentException("The service has no ScpdUrl.", "service");
            }
            else if (service.ControlUrl == null)
            {
                throw new ArgumentException("The service has no ControlUrl.", "service");
            }
            else if (service.EventUrl == null)
            {
                throw new ArgumentException("The service has no EventUrl.", "service");
            }

            scpd_server    = new DataServer(serializer.GetBytes(this), @"text/xml; charset=""utf-8""", service.ScpdUrl);
            control_server = new ControlServer(actions, service.Type.ToString(), service.ControlUrl, serializer);
            event_server   = new EventServer(state_variables.Values, service.EventUrl);

            foreach (var state_variable in state_variables.Values)
            {
                state_variable.Initialize(this);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ControlServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new ControlServer(Client, ProvisioningClient);
            }
            else
            {
                Extension = new ControlServer(Client);
            }

            Client.SetTag("ControlServer", Extension);

            Extension.OnGetControlParameters += (Node) =>
            {
                this.Model.ExternalEvent(Instance, "OnGetControlParameters",
                                         new KeyValuePair <string, object>("Node", Node),
                                         new KeyValuePair <string, object>("Client", Client));

                List <ControlParameter> Parameters = new List <ControlParameter>();

                foreach (ControlParameterNode Parameter in this.parameters)
                {
                    Parameter.AddParameters(Parameters, Instance);
                }

                return(Task.FromResult <ControlParameter[]>(Parameters.ToArray()));
            };

            return(Task.FromResult <object>(Extension));
        }
Beispiel #3
0
        public static void Main()
        {
            // Create the blocks
            var leftLight = new DigitalOutputPin(Pins.GPIO_PIN_D10)
            {
                Name = "LeftLight"
            };
            var rightLight = new DigitalOutputPin(Pins.GPIO_PIN_D11)
            {
                Name = "RightLight"
            };

            // Init
            leftLight.Input.Value  = 0;
            rightLight.Input.Value = 0;

            // Create the control server
            var serialPort = new SerialPort(SerialPorts.COM3, 57600, Parity.None, 8, StopBits.One);

            serialPort.Open();
            var server = new ControlServer(serialPort);

            // Expose the left and right lights to the control server
            leftLight.Input.ConnectTo(server, writeable: true);
            rightLight.Input.ConnectTo(server, writeable: true);

            // Do nothing
            for (; ;)
            {
                System.Threading.Thread.Sleep(1000);
            }
        }
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ControlServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new ControlServer(Client, ProvisioningClient);
            }
            else
            {
                Extension = new ControlServer(Client);
            }

            Client.SetTag("ControlServer", Extension);

            Extension.OnGetControlParameters += (Node) =>
            {
                this.Model.ExternalEvent(Instance, "OnGetControlParameters",
                                         new KeyValuePair <string, object>("Node", Node),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.FromResult <ControlParameter[]>(new ControlParameter[0]));
            };

            return(Task.CompletedTask);
        }
Beispiel #5
0
 public static void updateSettings(int webServerPort, int controlServerPort, string webServerRoot, string[] webServerDefaultPages, bool webServerDirectoryBrowsing)
 {
     webServer.close();
     controlServer.close();
     webServer     = new WebServer(webServerPort, webServerRoot, webServerDefaultPages, webServerDirectoryBrowsing);
     controlServer = new ControlServer(controlServerPort);
 }
Beispiel #6
0
        /// <summary>
        /// Performs the control operation.
        /// </summary>
        /// <returns>If the operation was successful or not.</returns>
        public override bool Set()
        {
            bool Result = this.parameter.Set(this.Node, this.value);

            if (!Result)
            {
                ControlServer.ParameterValueInvalid(this.parameter.Name, this.Request);
            }

            return(Result);
        }
Beispiel #7
0
        /// <summary>
        /// Performs the control operation.
        /// </summary>
        /// <returns>If the operation was successful or not.</returns>
        public override bool Set()
        {
            bool Result = this.parameter.SetStringValue(this.Node, this.value);

            if (!Result)
            {
                ControlServer.ParameterSyntaxError(this.parameter.Name, this.Request);
            }

            return(Result);
        }
Beispiel #8
0
        public static void Main()
        {
            //
            // Controls server
            //
            // initialize the serial port for COM1 (using D0 & D1)
            // initialize the serial port for COM3 (using D7 & D8)
            var serialPort = new SerialPort(SerialPorts.COM3, 57600, Parity.None, 8, StopBits.One);

            serialPort.Open();
            var server = new ControlServer(serialPort);

            //
            // Just some diagnostic stuff
            //
            var uptimeVar = server.RegisterVariable("Uptime (s)", 0);

            var lv  = false;
            var led = new Microsoft.SPOT.Hardware.OutputPort(Pins.ONBOARD_LED, lv);

            //
            // Make the robot
            //
            var leftMotor  = HBridgeMotor.CreateForNetduino(PWMChannels.PWM_PIN_D3, Pins.GPIO_PIN_D1, Pins.GPIO_PIN_D2);
            var rightMotor = HBridgeMotor.CreateForNetduino(PWMChannels.PWM_PIN_D6, Pins.GPIO_PIN_D4, Pins.GPIO_PIN_D5);

            var robot = new TwoWheeledRobot(leftMotor, rightMotor);

            //
            // Expose some variables to control it
            //
            robot.SpeedInput.ConnectTo(server, writeable: true, name: "Speed");
            robot.DirectionInput.ConnectTo(server, writeable: true, name: "Turn");

            leftMotor.SpeedInput.ConnectTo(server);
            rightMotor.SpeedInput.ConnectTo(server);

            //
            // Show diagnostics
            //
            for (var i = 0; true; i++)
            {
                uptimeVar.Value = i;

                led.Write(lv);
                lv = !lv;
                Thread.Sleep(1000);
            }
        }
Beispiel #9
0
//        public static string GetProjectBuildFileName(IBuildDefinition definition)
//        {
//            return string.Format("{0}/{1}", definition.ConfigurationFolderPath, BUILD_FILE);
//        }

        public static Item GetProjectBuildFileItem(IBuildDefinition definition)
        {
            //string query = definition.ConfigurationFolderPath + "/" + BUILD_FILE;
            string  configurationFolderPath = definition.GetConfigurationFolderPath();
            string  query = configurationFolderPath + "/" + BUILD_FILE;
            ItemSet items = ControlServer.GetItems(query, VersionSpec.Latest,
                                                   RecursionType.Full, DeletedState.NonDeleted, ItemType.File);

            if (items.Items.Length == 1)
            {
                return(items.Items[0]);
            }

            return(null);
        }
Beispiel #10
0
        private static void initServer()
        {
            int           webPort = 0, controlPort = 0;
            string        webRoot;
            List <String> defaultpages = new List <String>();
            bool          directoryBrowsing;

            XmlDocument settingsDoc = new XmlDocument();

            settingsDoc.Load(settingsFilePath);

            XmlElement settingsElement = settingsDoc.DocumentElement;

            XmlNodeList settingsNodes = settingsElement.ChildNodes;

            XmlNode webServerNode = settingsElement.GetElementsByTagName("WebServer")[0];

            int.TryParse(webServerNode.Attributes[0].Value, out webPort);

            XmlNode controlServerNode = settingsElement.GetElementsByTagName("ControlServer")[0];

            int.TryParse(controlServerNode.Attributes[0].Value, out controlPort);

            XmlNode webbRootNode = settingsElement.GetElementsByTagName("WebRoot")[0];

            webRoot = webbRootNode.Attributes[0].Value;

            XmlNodeList defaultPagesNodeList = settingsElement.GetElementsByTagName("File");

            foreach (XmlNode fileNode in defaultPagesNodeList)
            {
                defaultpages.Add(fileNode.Attributes[0].Value);
            }

            XmlNode directoryBrowsingNode = settingsElement.GetElementsByTagName("DirectoryBrowsing")[0];

            bool.TryParse(directoryBrowsingNode.Attributes[0].Value, out directoryBrowsing);

            webServer = new WebServer(webPort, webRoot, defaultpages.ToArray(), directoryBrowsing);
            Console.WriteLine("Webserver (127.0.0.1:" + webPort + ") listening...");
            controlServer = new ControlServer(controlPort);
            Console.WriteLine("Controlserver (127.0.0.1: " + controlPort + ") listening...");

            Logger.Logger logger = Logger.Logger.Instance;
            Console.WriteLine("Logger started...");

            Console.Read();
        }
Beispiel #11
0
        public override void DisposeClients()
        {
            if (this.controlServer != null)
            {
                this.controlServer.Dispose();
                this.controlServer = null;
            }

            if (this.controlClient != null)
            {
                this.controlClient.Dispose();
                this.controlClient = null;
            }

            base.DisposeClients();
        }
        private void btn_set_me_Click(object sender, EventArgs e)
        {
            string        ip   = tbox_me_ip.Text;
            int           port = int.Parse(tbox_me_port.Text);
            ControlServer cs   = new ControlServer(ip, port);

            cs.AddedLine    += Cs_AddedLine;
            cs.AddedWafer   += Cs_AddedWafer;
            cs.AddedPR      += Cs_AddedPR;
            cs.SettedSpeed  += Cs_SettedSpeed;
            cs.SettedDrop   += Cs_SettedDrop;
            cs.EndedPR      += Cs_EndedPR;
            cs.EndedCoating += Cs_EndedCoating;
            cs.AsyncStart();
            fc.SendMyInfo(ip, port);
        }
Beispiel #13
0
        public void StartServer()
        {
            if (server != null)
            {
                server.Dispose();
            }
            int port = 0;

            if (!int.TryParse(tbPort.Text, out port) || port > 65536 || port < 1024)
            {
                port        = 9999;
                tbPort.Text = "9999";
            }
            server = new ControlServer(IPAddress.Any, port);
            if (cbKey.IsChecked == true && tbKey.Text.Length <= 12 && tbKey.Text.Length >= 2)
            {
                ipmserver.AuthenticationString = tbKey.Text;
                server.Executors.Add(new AuthenticateExecutor(tbKey.Text));
            }
            else
            {
                tbKey.Text = "";
                ipmserver.AuthenticationString = null;
                server.Executors.Add(new AuthenticateExecutor());
            }
            if (cbAllowMouse.IsChecked == true)
            {
                server.Executors.Add(new CommandExecutor());
            }
            if (cbAllowFileList.IsChecked == true)
            {
                server.Executors.Add(new FileListTransmissionExecutor());
            }
            if (cbAllowFileTrans.IsChecked == true)
            {
                server.Executors.Add(new FileTransmissionExecutor());
            }
            if (ipmserver.ServerStatus == ServerStatus.Stop)
            {
                ipmserver.Start();
            }
            server.Executors.Add(new DesktopTransportExecutor());
            server.Listen();
        }
Beispiel #14
0
        public override void ConnectClients()
        {
            base.ConnectClients();

            Assert.AreEqual(XmppState.Connected, this.client1.State);
            Assert.AreEqual(XmppState.Connected, this.client2.State);

            this.controlClient = new ControlClient(this.client1);
            this.controlServer = new ControlServer(this.client2,
                                                   new BooleanControlParameter("Bool", "Page1", "Bool:", "Boolean value",
                                                                               (sender) => Task.FromResult <bool?>(this.b),
                                                                               (sender, value) => { this.b = value; return(Task.CompletedTask); }),
                                                   new ColorControlParameter("Color", "Page1", "Color:", "Color value",
                                                                             (sender) => Task.FromResult <ColorReference>(this.cl),
                                                                             (sender, value) => { this.cl = value; return(Task.CompletedTask); }),
                                                   new DateControlParameter("Date", "Page1", "Date:", "Date value", DateTime.MinValue, DateTime.MaxValue,
                                                                            (sender) => Task.FromResult <DateTime?>(this.d),
                                                                            (sender, value) => { this.d = value; return(Task.CompletedTask); }),
                                                   new DateTimeControlParameter("DateTime", "Page1", "DateTime:", "DateTime value", DateTime.MinValue, DateTime.MaxValue,
                                                                                (sender) => Task.FromResult <DateTime?>(this.dt),
                                                                                (sender, value) => { this.dt = value; return(Task.CompletedTask); }),
                                                   new DoubleControlParameter("Double", "Page1", "Double:", "Double value",
                                                                              (sender) => Task.FromResult <double?>(this.db),
                                                                              (sender, value) => { this.db = value; return(Task.CompletedTask); }),
                                                   new DurationControlParameter("Duration", "Page1", "Duration:", "Duration value",
                                                                                (sender) => Task.FromResult <Duration>(this.dr),
                                                                                (sender, value) => { this.dr = value; return(Task.CompletedTask); }),
                                                   new EnumControlParameter("Enum", "Page1", "Enum:", "Enum value", typeof(TypeCode),
                                                                            (sender) => Task.FromResult <Enum>(this.e),
                                                                            (sender, value) => { this.e = (TypeCode)value; return(Task.CompletedTask); }),
                                                   new Int32ControlParameter("Int32", "Page1", "Int32:", "Int32 value",
                                                                             (sender) => Task.FromResult <int?>(this.i),
                                                                             (sender, value) => { this.i = value; return(Task.CompletedTask); }),
                                                   new Int64ControlParameter("Int64", "Page1", "Int64:", "Int64 value",
                                                                             (sender) => Task.FromResult <long?>(this.l),
                                                                             (sender, value) => { this.l = value; return(Task.CompletedTask); }),
                                                   new StringControlParameter("String", "Page1", "String:", "String value",
                                                                              (sender) => Task.FromResult <string>(this.s),
                                                                              (sender, value) => { this.s = value; return(Task.CompletedTask); }),
                                                   new TimeControlParameter("Time", "Page1", "Time:", "Time value",
                                                                            (sender) => Task.FromResult <TimeSpan?>(this.t),
                                                                            (sender, value) => { this.t = value; return(Task.CompletedTask); }));
        }
Beispiel #15
0
        public override void ConnectClients()
        {
            base.ConnectClients();

            Assert.AreEqual(XmppState.Connected, this.client1.State);
            Assert.AreEqual(XmppState.Connected, this.client2.State);

            this.controlClient = new ControlClient(this.client1);
            this.controlServer = new ControlServer(this.client2,
                                                   new BooleanControlParameter("Bool", "Page1", "Bool:", "Boolean value", (sender) => this.b, (sender, value) => this.b = value),
                                                   new ColorControlParameter("Color", "Page1", "Color:", "Color value", (sender) => this.cl, (sender, value) => this.cl = value),
                                                   new DateControlParameter("Date", "Page1", "Date:", "Date value", DateTime.MinValue, DateTime.MaxValue, (sender) => this.d, (sender, value) => this.d = value),
                                                   new DateTimeControlParameter("DateTime", "Page1", "DateTime:", "DateTime value", DateTime.MinValue, DateTime.MaxValue, (sender) => this.dt, (sender, value) => this.dt = value),
                                                   new DoubleControlParameter("Double", "Page1", "Double:", "Double value", (sender) => this.db, (sender, value) => this.db         = value),
                                                   new DurationControlParameter("Duration", "Page1", "Duration:", "Duration value", (sender) => this.dr, (sender, value) => this.dr = value),
                                                   new EnumControlParameter("Enum", "Page1", "Enum:", "Enum value", typeof(TypeCode), (sender) => this.e, (sender, value) => this.e = (TypeCode)value),
                                                   new Int32ControlParameter("Int32", "Page1", "Int32:", "Int32 value", (sender) => this.i, (sender, value) => this.i     = value),
                                                   new Int64ControlParameter("Int64", "Page1", "Int64:", "Int64 value", (sender) => this.l, (sender, value) => this.l     = value),
                                                   new StringControlParameter("String", "Page1", "String:", "String value", (sender) => this.s, (sender, value) => this.s = value),
                                                   new TimeControlParameter("Time", "Page1", "Time:", "Time value", (sender) => this.t, (sender, value) => this.t         = value));
        }
Beispiel #16
0
        public static Workspace GetTemporaryWorkspace()
        {
            Workspace workspace = null;

            if (!string.IsNullOrEmpty(temporaryWorkspaceName))
            {
                workspace = ControlServer.GetWorkspace(temporaryWorkspaceName, ControlServer.AuthenticatedUser);
            }

            if (string.IsNullOrEmpty(temporaryWorkspaceName))
            {
                temporaryWorkspaceName = string.Format("tfsman_{0}", DateTime.Now.Ticks);
            }

            if (workspace == null)
            {
                workspace = ControlServer.CreateWorkspace(temporaryWorkspaceName, ControlServer.AuthenticatedUser);
            }

            return(workspace);
        }
Beispiel #17
0
        public static void Run()
        {
            // initialize the serial port for COM1 (using D0 & D1)
            // initialize the serial port for COM3 (using D7 & D8)
            var serialPort = new SerialPort(SerialPorts.COM3, 57600, Parity.None, 8, StopBits.One);

            serialPort.Open();

            var server = new ControlServer(serialPort);

            var led = new Microsoft.SPOT.Hardware.OutputPort(Pins.ONBOARD_LED, false);
            var lv  = false;

            var a0 = new AnalogInput(AnalogChannels.ANALOG_PIN_A0, -1);
            var a1 = new AnalogInput(AnalogChannels.ANALOG_PIN_A1, -1);

            var uptimeVar = server.RegisterVariable("Uptime (s)", 0);

            server.RegisterVariable("Speed", 0, v => { });
            server.RegisterVariable("Turn", 0, v => { });

            var a0Var = server.RegisterVariable("Analog 0", 0);
            var a1Var = server.RegisterVariable("Analog 1", 0);

            var magicCmd = server.RegisterCommand("Magic", () => {
                Debug.Print("MAAAGIIICC");
                return(42);
            });

            for (var i = 0; true; i++)
            {
                uptimeVar.Value = i;
                a0Var.Value     = a0.Read();
                a1Var.Value     = a1.Read();

                led.Write(lv);
                lv = !lv;
                Thread.Sleep(1000);
            }
        }
Beispiel #18
0
		private void SetupControlServer()
		{
			List<ControlParameter> Parameters = new List<ControlParameter>();

			foreach (KeyValuePair<GpioPin, KeyValuePair<TextBlock, TextBlock>> Pin in gpioPins.Values)
			{
				string s = Pin.Key.PinNumber.ToString();

				Parameters.Add(new BooleanControlParameter("GPIO" + s, "GPIO", "GPIO " + s + ".", "If the GPIO output should be high (checked) or low (unchecked).",
					(Node) => Pin.Key.Read() == GpioPinValue.High,
					(Node, Value) =>
					{
						Pin.Key.Write(Value ? GpioPinValue.High : GpioPinValue.Low);
						Log.Informational("GPIO " + s + " turned " + (Value ? "HIGH" : "LOW"));
					}));

				List<string> Options = new List<string>();

				foreach (GpioPinDriveMode Option in Enum.GetValues(typeof(GpioPinDriveMode)))
				{
					if (Pin.Key.IsDriveModeSupported(Option))
						Options.Add(Option.ToString());
				}

				if (Options.Count > 0)
				{
					Parameters.Add(new StringControlParameter("GPIO" + s + "Mode", "GPIO Mode", "GPIO " + s + " Drive Mode:",
						"The drive mode of the underlying hardware for the corresponding GPIO pin.", Options.ToArray(),
						(Node) => Pin.Key.GetDriveMode().ToString(),
						(Node, Value) =>
						{
							GpioPinDriveMode Mode = (GpioPinDriveMode)Enum.Parse(typeof(GpioPinDriveMode), Value);

							Pin.Key.SetDriveMode(Mode);
							Log.Informational("GPIO " + s + " drive mode set to " + Value);
						}));
				}
			}

			if (arduinoPins != null)
			{
				KeyValuePair<string, KeyValuePair<TextBlock, TextBlock>>[] ArduinoPins;

				lock (arduinoPins)
				{
					ArduinoPins = new KeyValuePair<string, KeyValuePair<TextBlock, TextBlock>>[arduinoPins.Count];
					arduinoPins.CopyTo(ArduinoPins, 0);
				}

				foreach (KeyValuePair<string, KeyValuePair<TextBlock, TextBlock>> Pin in ArduinoPins)
				{
					List<string> Options = new List<string>();
					byte Capabilities;

					if (Pin.Key.StartsWith("D"))
					{
						Parameters.Add(new BooleanControlParameter(Pin.Key, "Arduino D/O", "Arduino Digital Output on " + Pin.Key.ToString() + ".",
							"If the Arduino digitial output should be high (checked) or low (unchecked).",
							(Node) => arduino.digitalRead(byte.Parse(Pin.Key.Substring(1))) == PinState.HIGH,
							(Node, Value) =>
							{
								arduino.digitalWrite(byte.Parse(Pin.Key.Substring(1)), Value ? PinState.HIGH : PinState.LOW);
								Log.Informational("Arduino " + Pin.Key + " turned " + (Value ? "HIGH" : "LOW"));
							}));

						Capabilities = arduino.DeviceHardwareProfile.getPinCapabilitiesBitmask(byte.Parse(Pin.Key.Substring(1)));
					}
					else
					{
						Capabilities = arduino.DeviceHardwareProfile.getPinCapabilitiesBitmask((uint)(byte.Parse(Pin.Key.Substring(1)) + 
							arduino.DeviceHardwareProfile.AnalogOffset));
					}

					if ((Capabilities & (byte)PinCapability.ANALOG) != 0)
						Options.Add("ANALOG");

					if ((Capabilities & (byte)PinCapability.I2C) != 0)
						Options.Add("I2C");

					if ((Capabilities & (byte)PinCapability.INPUT) != 0)
						Options.Add("INPUT");

					if ((Capabilities & (byte)PinCapability.INPUT_PULLUP) != 0)
						Options.Add("PULLUP");

					if ((Capabilities & (byte)PinCapability.OUTPUT) != 0)
						Options.Add("OUTPUT");

					if ((Capabilities & (byte)PinCapability.PWM) != 0)
						Options.Add("PWM");

					if ((Capabilities & (byte)PinCapability.SERVO) != 0)
						Options.Add("SERVO");

					if (Options.Count > 0)
					{
						Parameters.Add(new StringControlParameter(Pin.Key + "Mode", "Arduino Mode", "Pin " + Pin.Key + " Drive Mode:",
							"The drive mode of the underlying hardware for the corresponding Arduino pin.", Options.ToArray(),
							(Node) => Pin.Key.StartsWith("D") ? arduino.getPinMode(byte.Parse(Pin.Key.Substring(1))).ToString() : arduino.getPinMode(Pin.Key).ToString(),
							(Node, Value) =>
							{
								PinMode Mode = (PinMode)Enum.Parse(typeof(PinMode), Value);

								if (Pin.Key.StartsWith("D"))
									arduino.pinMode(byte.Parse(Pin.Key.Substring(1)), Mode);
								else
									arduino.pinMode(Pin.Key, Mode);

								Log.Informational("Arduino " + Pin.Key + " drive mode set to " + Value);
							}));
					}
				}
			}

			this.controlServer = new ControlServer(this.xmppClient, Parameters.ToArray());
			this.bobClient = new BobClient(this.xmppClient, Path.Combine(Path.GetTempPath(), "BitsOfBinary"));
			this.chatServer = new ChatServer(this.xmppClient, this.bobClient, this.sensorServer, this.controlServer);
		}
Beispiel #19
0
		/// <summary>
		/// Invoked when application execution is being suspended.  Application state is saved
		/// without knowing whether the application will be terminated or resumed with the contents
		/// of memory still intact.
		/// </summary>
		/// <param name="sender">The source of the suspend request.</param>
		/// <param name="e">Details about the suspend request.</param>
		private void OnSuspending(object sender, SuspendingEventArgs e)
		{
			var deferral = e.SuspendingOperation.GetDeferral();

			if (arduino != null)
			{
				arduino.digitalWrite(13, PinState.LOW);
				arduino.pinMode(13, PinMode.INPUT);    // Onboard LED.

				arduino.Dispose();
				arduino = null;
			}

			if (arduinoUsb != null)
			{
				arduinoUsb.end();
				arduinoUsb.Dispose();
				arduinoUsb = null;
			}

			if (gpioPins != null)
			{
				foreach (KeyValuePair<GpioPin, KeyValuePair<TextBlock, TextBlock>> Pin in gpioPins.Values)
					Pin.Key.Dispose();

				gpioPins = null;
			}

			if (this.sampleTimer != null)
			{
				this.sampleTimer.Dispose();
				this.sampleTimer = null;
			}

			if (this.chatServer != null)
			{
				this.chatServer.Dispose();
				this.chatServer = null;
			}

			if (this.bobClient != null)
			{
				this.bobClient.Dispose();
				this.bobClient = null;
			}

			if (this.controlServer != null)
			{
				this.controlServer.Dispose();
				this.controlServer = null;
			}

			if (this.sensorServer != null)
			{
				this.sensorServer.Dispose();
				this.sensorServer = null;
			}

			if (this.provisioningClient != null)
			{
				this.provisioningClient.Dispose();
				this.provisioningClient = null;
			}

			if (this.thingRegistryClient != null)
			{
				this.thingRegistryClient.Dispose();
				this.thingRegistryClient = null;
			}

			if (this.xmppClient != null)
			{
				this.xmppClient.Dispose();
				this.xmppClient = null;
			}

			Log.Terminate();

			deferral.Complete();
		}
Beispiel #20
0
        private void AttachFeatures()
        {
            this.controlServer = new ControlServer(this.xmppClient,
                                                   new BooleanControlParameter("Output", "Actuator", "Output:", "Digital output.",
                                                                               (Node) => this.output,
                                                                               async(Node, Value) =>
            {
                try
                {
                    await this.SetOutput(Value, "XMPP");
                }
                catch (Exception ex)
                {
                    Log.Critical(ex);
                }
            }));

            this.sensorServer = new SensorServer(this.xmppClient, true);
            this.sensorServer.OnExecuteReadoutRequest += (sender, e) =>
            {
                try
                {
                    Log.Informational("Performing readout.", this.xmppClient.BareJID, e.Actor);

                    List <Field> Fields = new List <Field>();
                    DateTime     Now    = DateTime.Now;

                    if (e.IsIncluded(FieldType.Identity))
                    {
                        Fields.Add(new StringField(ThingReference.Empty, Now, "Device ID", this.deviceId, FieldType.Identity, FieldQoS.AutomaticReadout));
                    }

                    if (this.output.HasValue)
                    {
                        Fields.Add(new BooleanField(ThingReference.Empty, Now, "Output", this.output.Value,
                                                    FieldType.Momentary, FieldQoS.AutomaticReadout, true));
                    }

                    e.ReportFields(true, Fields);
                }
                catch (Exception ex)
                {
                    Log.Critical(ex);
                }
            };

            this.xmppClient.OnError           += (Sender, ex) => Log.Error(ex);
            this.xmppClient.OnPasswordChanged += (Sender, e) => Log.Informational("Password changed.", this.xmppClient.BareJID);

            this.xmppClient.OnPresenceSubscribe += (Sender, e) =>
            {
                Log.Informational("Accepting friendship request.", this.xmppClient.BareJID, e.From);
                e.Accept();
            };

            this.xmppClient.OnPresenceUnsubscribe += (Sender, e) =>
            {
                Log.Informational("Friendship removed.", this.xmppClient.BareJID, e.From);
                e.Accept();
            };

            this.xmppClient.OnPresenceSubscribed   += (Sender, e) => Log.Informational("Friendship request accepted.", this.xmppClient.BareJID, e.From);
            this.xmppClient.OnPresenceUnsubscribed += (Sender, e) => Log.Informational("Friendship removal accepted.", this.xmppClient.BareJID, e.From);

            this.bobClient  = new BobClient(this.xmppClient, Path.Combine(Path.GetTempPath(), "BitsOfBinary"));
            this.chatServer = new ChatServer(this.xmppClient, this.bobClient, this.sensorServer, this.controlServer);

            // XEP-0054: vcard-temp: http://xmpp.org/extensions/xep-0054.html
            this.xmppClient.RegisterIqGetHandler("vCard", "vcard-temp", this.QueryVCardHandler, true);
        }
Beispiel #21
0
        static void Main(string[] args)
        {
            try
            {
                Console.ForegroundColor = ConsoleColor.White;

                Console.Out.WriteLine("Welcome to the Mock Temperature sensor application.");
                Console.Out.WriteLine(new string('-', 79));
                Console.Out.WriteLine("This application will simulate an outside temperature sensor.");
                Console.Out.WriteLine("Values will be published over XMPP using the interface defined in the IEEE XMPP IoT extensions.");
                Console.Out.WriteLine("You can also chat with the sensor.");

                Log.Register(new ConsoleEventSink());
                Log.RegisterExceptionToUnnest(typeof(System.Runtime.InteropServices.ExternalException));
                Log.RegisterExceptionToUnnest(typeof(System.Security.Authentication.AuthenticationException));

                credentials = SimpleXmppConfiguration.GetConfigUsingSimpleConsoleDialog("xmpp.config",
                                                                                        Guid.NewGuid().ToString().Replace("-", string.Empty), // Default user name.
                                                                                        Guid.NewGuid().ToString().Replace("-", string.Empty), // Default password.
                                                                                        typeof(Program).Assembly);

                using (XmppClient Client = new XmppClient(credentials, "en", typeof(Program).Assembly))
                {
                    if (credentials.Sniffer)
                    {
                        Client.Add(new ConsoleOutSniffer(BinaryPresentationMethod.ByteCount, LineEnding.PadWithSpaces));
                    }

                    if (!string.IsNullOrEmpty(credentials.Events))
                    {
                        Log.Register(new XmppEventSink("XMPP Event Sink", Client, credentials.Events, false));
                    }

                    if (!string.IsNullOrEmpty(credentials.ThingRegistry))
                    {
                        thingRegistryClient = new ThingRegistryClient(Client, credentials.ThingRegistry);

                        thingRegistryClient.Claimed += (sender, e) =>
                        {
                            ownerJid = e.JID;
                            Log.Informational("Thing has been claimed.", ownerJid, new KeyValuePair <string, object>("Public", e.IsPublic));
                        };

                        thingRegistryClient.Disowned += (sender, e) =>
                        {
                            Log.Informational("Thing has been disowned.", ownerJid);
                            ownerJid = string.Empty;
                            Register();
                        };

                        thingRegistryClient.Removed += (sender, e) =>
                        {
                            Log.Informational("Thing has been removed from the public registry.", ownerJid);
                        };
                    }

                    ProvisioningClient ProvisioningClient = null;
                    if (!string.IsNullOrEmpty(credentials.Provisioning))
                    {
                        ProvisioningClient = new ProvisioningClient(Client, credentials.Provisioning);
                    }

                    Timer ConnectionTimer = new Timer((P) =>
                    {
                        if (Client.State == XmppState.Offline || Client.State == XmppState.Error || Client.State == XmppState.Authenticating)
                        {
                            try
                            {
                                Client.Reconnect();
                            }
                            catch (Exception ex)
                            {
                                Log.Critical(ex);
                            }
                        }
                    }, null, 60000, 60000);

                    bool Connected = false;
                    bool ImmediateReconnect;

                    Client.OnStateChanged += (sender, NewState) =>
                    {
                        switch (NewState)
                        {
                        case XmppState.Connected:
                            Connected = true;

                            if (!registered && thingRegistryClient != null)
                            {
                                Register();
                            }
                            break;

                        case XmppState.Offline:
                            ImmediateReconnect = Connected;
                            Connected          = false;

                            if (ImmediateReconnect)
                            {
                                Client.Reconnect();
                            }
                            break;
                        }
                    };

                    Client.OnPresenceSubscribe += (sender, e) =>
                    {
                        e.Accept();                             // TODO: Provisioning

                        RosterItem Item = Client.GetRosterItem(e.FromBareJID);
                        if (Item is null || Item.State == SubscriptionState.None || Item.State == SubscriptionState.From)
                        {
                            Client.RequestPresenceSubscription(e.FromBareJID);
                        }

                        Client.SetPresence(Availability.Chat);
                    };

                    Client.OnPresenceUnsubscribe += (sender, e) =>
                    {
                        e.Accept();
                    };

                    Client.OnRosterItemUpdated += (sender, e) =>
                    {
                        if (e.State == SubscriptionState.None && e.PendingSubscription != PendingSubscription.Subscribe)
                        {
                            Client.RemoveRosterItem(e.BareJid);
                        }
                    };

                    bool SwitchOn = false;

                    SensorServer SensorServer = new SensorServer(Client, ProvisioningClient, false);
                    SensorServer.OnExecuteReadoutRequest += (Sender, Request) =>
                    {
                        DateTime Now = DateTime.Now;

                        Log.Informational("Readout requested", string.Empty, Request.Actor);

                        Request.ReportFields(true, new BooleanField(ThingReference.Empty, Now, "Lamp", SwitchOn, FieldType.Momentary, FieldQoS.AutomaticReadout));
                    };

                    ControlServer ControlServer = new ControlServer(Client,
                                                                    new BooleanControlParameter("Lamp", "Control", "Lamp switch on.", "If checked, lamp is turned on.",
                                                                                                (Node) => SwitchOn,
                                                                                                (Node, Value) =>
                    {
                        SwitchOn = Value;
                        Log.Informational(Environment.NewLine + Environment.NewLine + "Lamp turned " + (SwitchOn ? "ON" : "OFF") + Environment.NewLine + Environment.NewLine);
                    }));

                    BobClient  BobClient  = new BobClient(Client, Path.Combine(Path.GetTempPath(), "BitsOfBinary"));
                    ChatServer ChatServer = new ChatServer(Client, BobClient, SensorServer, ControlServer, ProvisioningClient);

                    InteroperabilityServer InteroperabilityServer = new InteroperabilityServer(Client);
                    InteroperabilityServer.OnGetInterfaces += (sender, e) =>
                    {
                        e.Add("XMPP.IoT.Actuator.Lamp");
                    };

                    Client.Connect();

                    while (true)
                    {
                        Thread.Sleep(1000);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Out.WriteLine(ex.Message);
            }
            finally
            {
                Log.Terminate();
            }
        }
Beispiel #22
0
        private async void StartActuator()
        {
            try
            {
                Log.Informational("Starting application.");

                SimpleXmppConfiguration xmppConfiguration = SimpleXmppConfiguration.GetConfigUsingSimpleConsoleDialog("xmpp.config",
                                                                                                                      Guid.NewGuid().ToString().Replace("-", string.Empty), // Default user name.
                                                                                                                      Guid.NewGuid().ToString().Replace("-", string.Empty), // Default password.
                                                                                                                      FormSignatureKey, FormSignatureSecret, typeof(App).GetTypeInfo().Assembly);

                Log.Informational("Connecting to XMPP server.");

                xmppClient = xmppConfiguration.GetClient("en", typeof(App).GetTypeInfo().Assembly, false);
                xmppClient.AllowRegistration(FormSignatureKey, FormSignatureSecret);

                if (xmppConfiguration.Sniffer && MainPage.Sniffer != null)
                {
                    xmppClient.Add(MainPage.Sniffer);
                }

                if (!string.IsNullOrEmpty(xmppConfiguration.Events))
                {
                    Log.Register(new XmppEventSink("XMPP Event Sink", xmppClient, xmppConfiguration.Events, false));
                }

                if (!string.IsNullOrEmpty(xmppConfiguration.ThingRegistry))
                {
                    thingRegistryClient = new ThingRegistryClient(xmppClient, xmppConfiguration.ThingRegistry);

                    thingRegistryClient.Claimed += (sender, e) =>
                    {
                        ownerJid = e.JID;
                        Log.Informational("Thing has been claimed.", ownerJid, new KeyValuePair <string, object>("Public", e.IsPublic));
                        this.RaiseOwnershipChanged();
                    };

                    thingRegistryClient.Disowned += (sender, e) =>
                    {
                        Log.Informational("Thing has been disowned.", ownerJid);
                        ownerJid = string.Empty;
                        this.Register();                            // Will call this.OwnershipChanged() after successful registration.
                    };

                    thingRegistryClient.Removed += (sender, e) =>
                    {
                        Log.Informational("Thing has been removed from the public registry.", ownerJid);
                    };
                }

                if (!string.IsNullOrEmpty(xmppConfiguration.Provisioning))
                {
                    provisioningClient = new ProvisioningClient(xmppClient, xmppConfiguration.Provisioning);
                }

                Timer ConnectionTimer = new Timer((P) =>
                {
                    if (xmppClient.State == XmppState.Offline || xmppClient.State == XmppState.Error || xmppClient.State == XmppState.Authenticating)
                    {
                        try
                        {
                            Log.Informational("Reconnecting.");
                            xmppClient.Reconnect();
                        }
                        catch (Exception ex)
                        {
                            Log.Critical(ex);
                        }
                    }
                }, null, 60000, 60000);

                xmppClient.OnStateChanged += (sender, NewState) =>
                {
                    Log.Informational(NewState.ToString());

                    switch (NewState)
                    {
                    case XmppState.Connected:
                        connected = true;

                        if (!registered && thingRegistryClient != null)
                        {
                            Register();
                        }
                        break;

                    case XmppState.Offline:
                        immediateReconnect = connected;
                        connected          = false;

                        if (immediateReconnect)
                        {
                            xmppClient.Reconnect();
                        }
                        break;
                    }
                };

                xmppClient.OnPresenceSubscribe += (sender, e) =>
                {
                    Log.Informational("Subscription request received from " + e.From + ".");

                    e.Accept();                         // TODO: Provisioning

                    RosterItem Item = xmppClient.GetRosterItem(e.FromBareJID);
                    if (Item == null || Item.State == SubscriptionState.None || Item.State == SubscriptionState.From)
                    {
                        xmppClient.RequestPresenceSubscription(e.FromBareJID);
                    }

                    xmppClient.SetPresence(Availability.Chat);
                };

                xmppClient.OnPresenceUnsubscribe += (sender, e) =>
                {
                    Log.Informational("Unsubscription request received from " + e.From + ".");
                    e.Accept();
                };

                xmppClient.OnRosterItemUpdated += (sender, e) =>
                {
                    if (e.State == SubscriptionState.None && e.PendingSubscription != PendingSubscription.Subscribe)
                    {
                        xmppClient.RemoveRosterItem(e.BareJid);
                    }
                };

                bool SwitchOn = false;

                sensorServer = new SensorServer(xmppClient, provisioningClient, false);
                sensorServer.OnExecuteReadoutRequest += (Sender, Request) =>
                {
                    DateTime Now = DateTime.Now;

                    Log.Informational("Readout requested", string.Empty, Request.Actor);

                    Request.ReportFields(true, new BooleanField(ThingReference.Empty, Now, "Lamp", SwitchOn, FieldType.Momentary, FieldQoS.AutomaticReadout));
                };

                controlServer = new ControlServer(xmppClient,
                                                  new BooleanControlParameter("Lamp", "Control", "Lamp switch on.", "If checked, lamp is turned on.",
                                                                              (Node) => SwitchOn,
                                                                              (Node, Value) =>
                {
                    SwitchOn = Value;
                    Log.Informational("Lamp turned " + (SwitchOn ? "ON" : "OFF"));
                    UpdateMainWindow(SwitchOn);
                }));

                this.bobClient  = new BobClient(this.xmppClient, Path.Combine(Path.GetTempPath(), "BitsOfBinary"));
                this.chatServer = new ChatServer(xmppClient, this.bobClient, this.sensorServer, this.controlServer);

                interoperabilityServer = new InteroperabilityServer(xmppClient);
                interoperabilityServer.OnGetInterfaces += (sender, e) =>
                {
                    e.Add("XMPP.IoT.Actuator.Lamp");
                };

                xmppClient.Connect();
            }
            catch (Exception ex)
            {
                Log.Emergency(ex);

                MessageDialog Dialog = new MessageDialog(ex.Message, "Error");
                await Dialog.ShowAsync();
            }
        }
Beispiel #23
0
        /// <summary>
        /// Invoked when application execution is being suspended.  Application state is saved
        /// without knowing whether the application will be terminated or resumed with the contents
        /// of memory still intact.
        /// </summary>
        /// <param name="sender">The source of the suspend request.</param>
        /// <param name="e">Details about the suspend request.</param>
        private void OnSuspending(object sender, SuspendingEventArgs e)
        {
            var deferral = e.SuspendingOperation.GetDeferral();

            if (this.sampleTimer != null)
            {
                this.sampleTimer.Dispose();
                this.sampleTimer = null;
            }

            if (this.interoperabilityServer != null)
            {
                this.interoperabilityServer.Dispose();
                this.interoperabilityServer = null;
            }

            if (this.chatServer != null)
            {
                this.chatServer.Dispose();
                this.chatServer = null;
            }

            if (this.bobClient != null)
            {
                this.bobClient.Dispose();
                this.bobClient = null;
            }

            if (this.controlServer != null)
            {
                this.controlServer.Dispose();
                this.controlServer = null;
            }

            if (this.sensorServer != null)
            {
                this.sensorServer.Dispose();
                this.sensorServer = null;
            }

            if (this.provisioningClient != null)
            {
                this.provisioningClient.Dispose();
                this.provisioningClient = null;
            }

            if (this.thingRegistryClient != null)
            {
                this.thingRegistryClient.Dispose();
                this.thingRegistryClient = null;
            }

            if (this.xmppClient != null)
            {
                this.xmppClient.Dispose();
                this.xmppClient = null;
            }

            Log.Terminate();

            deferral.Complete();
        }