using SpheroNET;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace SpheroConsole
{
public class SpheroModule : Nancy.NancyModule
{
static SpheroConnector spheroConnector = new SpheroConnector();
static Sphero sphero = null;
public SpheroModule()
{
Get[« / »] = _ =>
{
string s = « Novencia TS – WebSphero Proxy<br><br> »;
s += « Command List :<br/> »;
s += « <b>find<b> – Get port id Bluetooth devices<br/> »;
s += « <b>connect/{port}<b> – Connect to the given port id (see find)<br/> »;
s += « <b>sleep<b> – Sleep the Sphero<br/> »;
s += « <b>close<b> – Close the Sphero communication<br/> »;
s += « <b>setrgb/{red}/{green}/{blue}<b> -Change Sphero color<br/> »;
return s;
};
Get[« /find »] = _ =>
{
spheroConnector.Scan();
var deviceNames = spheroConnector.DeviceNames;
string result = « »;
for (int i = 0; i < deviceNames.Count; i++)
{
result += string.Format(« {0}: {1}<br/> », i, deviceNames[i]);
}
return result;
};
Get[« /connect/{port} »] = PortFinder;
Get[« /close »] = _ => { spheroConnector.Close(); return « OK »; };
Get[« /sleep »] = _ => { sphero.Sleep(); return « OK »; };
Get[« /setrgb/{red}/{green}/{blue} »] = SetRGBColor;
Get[« /setrgb/{colorName} »] = SetRGBColor;
Get[« /goroll/{h}/{s}/{g} »] = Goroll;
Get[« /goroll/{h}/{s}/{g}/{d} »] = GorollWithDelay;
Post[« / »] = _ => « Hello world! »;
}
public string Goroll(dynamic o)
{
int h, s, g;
if (!int.TryParse(o.h, out h)) throw new Exception(« Invalid parameter »);
if (!int.TryParse(o.s, out s)) throw new Exception(« Invalid parameter »);
if (!int.TryParse(o.g, out g)) throw new Exception(« Invalid parameter »);
var programLines = new List<string>();
programLines.Add(« 10 basflg 1\r »);
programLines.Add(string.Format(« 20 goroll {0},{1},{2}\r »,h,s,g));
var area = StorageArea.Temporary;
sphero.EraseOrbBasicStorage(area);
sphero.SendOrbBasicProgram(area, programLines);
sphero.ExecuteOrbBasicProgram(area, 10);
return « OK »;
}
public string GorollWithDelay(dynamic o)
{
int h, s, g, d;
if (!int.TryParse(o.h, out h)) throw new Exception(« Invalid parameter »);
if (!int.TryParse(o.s, out s)) throw new Exception(« Invalid parameter »);
if (!int.TryParse(o.g, out g)) throw new Exception(« Invalid parameter »);
if (!int.TryParse(o.d, out d)) throw new Exception(« Invalid parameter »);
var programLines = new List<string>();
programLines.Add(« 10 basflg 1\r »);
programLines.Add(string.Format(« 20 goroll {0},{1},{2}\r », h, s, g));
programLines.Add(string.Format(« 30 deelay {0}\r », d));
var area = StorageArea.Temporary;
sphero.EraseOrbBasicStorage(area);
sphero.SendOrbBasicProgram(area, programLines);
sphero.ExecuteOrbBasicProgram(area, 10);
return « OK »;
}
public string SetRGBColor(dynamic o)
{
byte r, g, b;
try
{
r = byte.Parse(o.red);
g = byte.Parse(o.green);
b = byte.Parse(o.blue);
}
catch
{
string name = o.colorName;
Color c = Color.FromName(name);
r = c.R;
g = c.G;
b = c.B;
}
sphero.SetRGBLEDOutput(r, g, b);
return « OK »;
}
public string PortFinder(dynamic o)
{
int index = –1;
if (int.TryParse(o.port, out index))
{
if (o.port < 0) return « invalid parameter »;
try
{
sphero = spheroConnector.Connect(index);
return « OK »;
}
catch (Exception ex)
{
return ex.Message;
}
}
else
{
return string.Format(« ‘{0}’ is not a valid device index. », o.port);
}
}
}
}