Skip to content

Instantly share code, notes, and snippets.

@DevJohnC
Created July 13, 2014 05:17
Show Gist options
  • Select an option

  • Save DevJohnC/62d0126d0519652cce93 to your computer and use it in GitHub Desktop.

Select an option

Save DevJohnC/62d0126d0519652cce93 to your computer and use it in GitHub Desktop.
Demoing light control on an AdjutantFramework network.
//
// Author: John Carruthers (johnc@frag-labs.com)
//
// Copyright (C) 2014 John Carruthers
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.Collections.Generic;
using System.Linq;
using AdjutantFramework;
using AdjutantFramework.Modules.Lights.Devices;
namespace LightsDemo
{
class Program
{
private static List<ILight> Lights { get; set; }
static void Main()
{
Lights = new List<ILight>();
var config = FrameworkConfig.CreateDecentralizedDefault();
var startupInfo = Framework.Bootstrap(config);
startupInfo.Config.DeviceManager.DeviceQueryCompleted += (sender, args) =>
{
lock (Lights)
{
var deviceLights = args.NetworkNode.Devices.OfType<ILight>().ToArray();
foreach (var light in deviceLights)
{
light.PropertyChanged += (o, eventArgs) => RefreshUI();
}
Lights.AddRange(deviceLights);
RefreshUI();
}
};
var lights = startupInfo.Bundle.DeviceRepository.Local.Devices.OfType<ILight>();
foreach (var light in lights)
{
light.PropertyChanged += (sender, args) => RefreshUI();
}
Lights.AddRange(lights);
RefreshUI();
while (true)
{
var strLightIndex = Console.ReadLine();
int lightIndex;
if (!int.TryParse(strLightIndex, out lightIndex))
{
RefreshUI();
Console.WriteLine();
Console.WriteLine("Invalid input, please enter a number.");
continue;
}
if (lightIndex < 0 || lightIndex > Lights.Count)
{
RefreshUI();
Console.WriteLine();
Console.WriteLine("Invalid input, please enter a number higher than -1 and less than {0}.", Lights.Count);
continue;
}
var light = Lights[lightIndex];
if (light.LightState == LightState.On)
{
light.TurnOff();
}
else
{
light.TurnOn();
}
}
}
private static void RefreshUI()
{
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.WriteLine("Light Control Demo");
lock (Lights)
{
if (Lights.Count == 0)
{
Console.WriteLine("\tNo lights connected.");
}
else
{
for (var i = 0; i < Lights.Count; i++)
{
Console.WriteLine("\t{0}. {1} {2}", i, Lights[i].LightState.ToString().PadRight(3), Lights[i].DeviceName);
}
Console.WriteLine();
Console.Write("Enter light to toggle: ");
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment