S’interfacer avec une Sphèro en remote avec NancyModule

 

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);

}

}

}

}