public virtual IEnumerator<ITask> HttpPostHandler(HttpPost httpPost) { Fault fault = null; NameValueCollection parameters = new NameValueCollection(); ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); // Wait for result yield return Arbiter.Choice( readForm.ResultPort, delegate(NameValueCollection col) { parameters = col; }, delegate(Exception e) { fault = Fault.FromException(e); } ); if(fault != null) { httpPost.ResponsePort.Post(fault); yield break; } if (!string.IsNullOrEmpty(parameters["NewMode"])) { int mod = int.Parse(parameters["NewMode"]); _biclops.setMode(mod); } if(!string.IsNullOrEmpty(parameters["pos1"])) { double newr = double.Parse(parameters["pos1"]); _biclops.setJointPosition(0, newr); } if(!string.IsNullOrEmpty(parameters["pos2"])) { double newr = double.Parse(parameters["pos2"]); _biclops.setJointPosition(1, newr); } HttpResponseType rsp = new HttpResponseType(HttpStatusCode.OK, _state, _transform); httpPost.ResponsePort.Post(rsp); SaveState(_state); }
public virtual IEnumerator<ITask> HttpPostHandler(HttpPost httpPost) { string ErrorMessage = String.Empty; Fault fault = null; NameValueCollection parameters = new NameValueCollection(); // use helper to read from data ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); //wait for result yield return Arbiter.Choice( readForm.ResultPort, delegate(NameValueCollection col) { parameters = col; }, delegate(Exception e) { fault = Fault.FromException(e); LogError(null, "Error Processing from data", fault); ErrorMessage += e; } ); if (fault != null) { httpPost.ResponsePort.Post(fault); yield break; } bool validDelta = false; double[] _delta = new double[2]; if (!string.IsNullOrEmpty(parameters["delta"])) { try { _delta[0] = double.Parse(parameters["delta"]); _delta[1] = double.Parse(parameters["delta"]); validDelta = true; } catch (Exception e) { string msg = "Could not parse Desired MaxDelta ref value: " + e.Message; LogError(msg); ErrorMessage += msg; } } if (validDelta) { _state.MaxDelta.dat[0] = _delta[0]; _state.MaxDelta.dat[1] = _delta[1]; } double[] _ref = new double[2]; bool validValues = true; if (!string.IsNullOrEmpty(parameters["DesPan"])) { try { _ref[0] = double.Parse(parameters["DesPan"]); } catch (Exception e) { string msg = "Could not parse Desired Pan ref value: " + e.Message; LogError(msg); ErrorMessage += msg; validValues = validValues && false; } } if (!string.IsNullOrEmpty(parameters["DesTilt"])) { try { _ref[1] = double.Parse(parameters["DesTilt"]); } catch (Exception e) { string msg = "Could not parse Desired Tilt ref value: " + e.Message; LogError(msg); ErrorMessage += msg; validValues = validValues && false; } } if (!string.IsNullOrEmpty(parameters["lock"])) { try { _state.Lock = true; } catch (Exception e) { string msg = "Could not parse Lock check: " + e.Message; LogError(msg); ErrorMessage += msg; } } else { Console.WriteLine("Lock set to false"); _state.Lock = false; newDesiredJointPositions = true; } if (validValues) { // scale down here... _state.DesiredJointAngles.dat[0] = _ref[0]; _state.DesiredJointAngles.dat[1] = _ref[1]; } if (!string.IsNullOrEmpty(parameters["Home"])) { /* Console.WriteLine("BiclopsRightCameraJointConfiguration::Home()"); _biclopsPort.Post(new biclops.Home()); _state.Lock = true; Activate( Arbiter.Choice( _biclopsPort.Home(new biclops.HomeRequest()), delegate(DefaultUpdateResponseType response) { LogError(LogGroups.Console, "got response from Bicops.Home"); //Console.WriteLine("got response from Biclops.Home"); }, delegate(W3C.Soap.Fault failure) { LogError(LogGroups.Console, "Fault posting Bicops.Home"); //Console.WriteLine("Fault posting SetJointPositionReference"); })); */ } if (!string.IsNullOrEmpty(parameters["Park"])) { /* Console.WriteLine("BiclopsRightCameraJointConfiguration::Park()"); _biclopsPort.Post(new biclops.Park()); */ } if (ErrorMessage == string.Empty) { httpPost.ResponsePort.Post(new HttpResponseType(HttpStatusCode.OK, _state, _transform)); } else { fault = Fault.FromCodeSubcodeReason(FaultCodes.Receiver, DsspFaultCodes.OperationFailed, ErrorMessage); httpPost.ResponsePort.Post(new Fault()); } yield break; }
public IEnumerator<ITask> HttpPostHandler(HttpPost httpPost) { // Use helper to read form data ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); // Wait for result Activate(Arbiter.Choice(readForm.ResultPort, delegate(NameValueCollection parameters) { if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "MicrosoftGpsConfig" ) { if (parameters["buttonOk"] == "Search") { FindGpsConfig findConfig = new FindGpsConfig(); _mainPort.Post(findConfig); Activate( Arbiter.Choice( Arbiter.Receive<MicrosoftGpsConfig>(false, findConfig.ResponsePort, delegate(MicrosoftGpsConfig response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, findConfig.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Connect and Update") { MicrosoftGpsConfig config = (MicrosoftGpsConfig)_state.MicrosoftGpsConfig.Clone(); int port; if (int.TryParse(parameters["CommPort"], out port) && port >= 0) { config.CommPort = port; config.PortName = "COM" + port.ToString(); } int baud; if (int.TryParse(parameters["BaudRate"], out baud) && GpsConnection.ValidBaudRate(baud)) { config.BaudRate = baud; } config.CaptureHistory = ((parameters["CaptureHistory"] ?? "off") == "on"); config.CaptureNmea = ((parameters["CaptureNmea"] ?? "off") == "on"); config.RetrackNmea = ((parameters["RetrackNmea"] ?? "off") == "on"); Console.WriteLine(string.Format("Switches: CaptureHistory={0} CaptureNmea={1} RetrackNmea={2}", config.CaptureHistory, config.CaptureNmea, config.RetrackNmea)); Configure configure = new Configure(config); _mainPort.Post(configure); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, configure.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, configure.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } } else { HttpPostFailure(httpPost, null); } }, delegate(Exception Failure) { LogError(Failure.Message); }) ); yield break; }
public IEnumerator<ITask> HttpPostHandler(HttpPost httpPost) { // Use helper to read form data ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); // Wait for result Activate(Arbiter.Choice(readForm.ResultPort, delegate(NameValueCollection parameters) { if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ChrUm6OrientationSensorConfig" ) { if (parameters["buttonOk"] == "Search") { FindChrConfig findConfig = new FindChrConfig(); _mainPort.Post(findConfig); Activate( Arbiter.Choice( Arbiter.Receive<ChrUm6OrientationSensorConfig>(false, findConfig.ResponsePort, delegate(ChrUm6OrientationSensorConfig response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, findConfig.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Connect") { ChrUm6OrientationSensorConfig config = (ChrUm6OrientationSensorConfig)_state.ChrUm6OrientationSensorConfig.Clone(); int port; if (int.TryParse(parameters["CommPort"], out port) && port >= 0) { config.CommPort = port; config.PortName = "COM" + port.ToString(); } int baud; if (int.TryParse(parameters["BaudRate"], out baud) && ChrConnection.ValidBaudRate(baud)) { config.BaudRate = baud; } Configure configure = new Configure(config); _mainPort.Post(configure); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, configure.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, configure.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Refresh Data") { HttpPostSuccess(httpPost); } else if (parameters["buttonOk"] == "Set Accelerometer Reference Vector") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "SetAccelRefVector" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Set Magnetometer Reference Vector") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "SetMagnRefVector" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Zero Rate Gyros") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "ZeroRateGyros" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } } else { HttpPostFailure(httpPost, null); } }, delegate(Exception Failure) { LogError(Failure.Message); }) ); yield break; }
public IEnumerator <ITask> HttpPostHandler(HttpPost httpPost) { // Use helper to read form data ReadFormData readForm = new ReadFormData(httpPost.Body.Context); _httpUtilities.Post(readForm); // Wait for result Activate(Arbiter.Choice(readForm.ResultPort, delegate(NameValueCollection parameters) { if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerConfig") { if (parameters["buttonOk"] == "Change" && _state.Connected) { SetNameBody newname = new SetNameBody(parameters["Name"]); SetName newnamemessage = new SetName(newname); _mainPort.Post(newnamemessage); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, newnamemessage.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, newnamemessage.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } else if (parameters["buttonOk"] == "Connect" && _state.Connected) { //close down this connection to make a new connection below PollTimer.Close(); System.Threading.Thread.Sleep(100); _scribblerCom.Close(); _state.Connected = false; } if (parameters["buttonOk"] == "Connect" && !_state.Connected) { int port = 0; int.TryParse(parameters["ComPort"], out port); string name = parameters["Name"]; if (!string.IsNullOrEmpty(name) && name.Length > 8) { name = name.Substring(0, 8); } _state.ComPort = port; _state.RobotName = name; //open Scribbler Communications port if (ConnectToScribbler()) { // Listen for a single Serial port request with an acknowledgement Activate(Arbiter.ReceiveWithIterator <SendScribblerCommand>(false, _scribblerComPort, SendScribblerCommandHandler)); PollTimer = new System.Timers.Timer(); PollTimer.Interval = TimerDelay; PollTimer.AutoReset = true; PollTimer.Elapsed += new System.Timers.ElapsedEventHandler(PollTimer_Elapsed); PollTimer.Start(); //play startup tone PlayToneBody startTone = new PlayToneBody(200, 1000, 2000); PlayTone playToneMessage = new PlayTone(startTone); _mainPort.Post(playToneMessage); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, playToneMessage.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, playToneMessage.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } else { HttpPostFailure(httpPost, "Connection to Scribbler failed"); } } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerSensors") { if (parameters["buttonOk"] == "Poll" && _state.Connected) { ScribblerCommand cmd = new ScribblerCommand((byte)ScribblerHelper.Commands.GET_ALL); SendScribblerCommand sendcmd = new SendScribblerCommand(cmd); _scribblerComPort.Post(sendcmd); Activate( Arbiter.Choice( Arbiter.Receive <ScribblerResponse>(false, sendcmd.ResponsePort, delegate(ScribblerResponse response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, sendcmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerMotors") { if (parameters["buttonOk"] == "Set" && _state.Connected) { int left = _state.MotorLeft; int right = _state.MotorRight; int.TryParse(parameters["LeftMotor"], out left); int.TryParse(parameters["RightMotor"], out right); SetMotorsBody setMotorsBody = new SetMotorsBody(left, right); SetMotors setMotorsRequest = new SetMotors(setMotorsBody); _mainPort.Post(setMotorsRequest); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, setMotorsRequest.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } else if (parameters["buttonOk"] == "All Stop" && _state.Connected) { SetMotorsBody setMotorsBody = new SetMotorsBody(100, 100); SetMotors setMotorsRequest = new SetMotors(setMotorsBody); _mainPort.Post(setMotorsRequest); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, setMotorsRequest.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerLEDs") { if (parameters["buttonOk"] == "Set" && _state.Connected) { bool left = ((parameters["LeftLED"] ?? "off") == "on"); bool center = ((parameters["CenterLED"] ?? "off") == "on"); bool right = ((parameters["RightLED"] ?? "off") == "on"); SetAllLedsBody leds = new SetAllLedsBody(left, center, right); SetAllLEDs setAllLeds = new SetAllLEDs(leds); _mainPort.Post(setAllLeds); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, setAllLeds.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, setAllLeds.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerSpeaker") { if (parameters["buttonOk"] == "Play" && _state.Connected) { int tone1 = 0; int tone2 = 0; int duration = 0; int.TryParse(parameters["Tone1"], out tone1); int.TryParse(parameters["Tone2"], out tone2); int.TryParse(parameters["Duration"], out duration); PlayToneBody playTone = new PlayToneBody(duration, tone1, tone2); PlayTone playToneMessage = new PlayTone(playTone); _mainPort.Post(playToneMessage); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, playToneMessage.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, playToneMessage.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else { HttpPostFailure(httpPost, "Unknown Http Post"); } }, delegate(Exception Failure) { LogError(Failure.Message); }) ); yield break; }
public IEnumerator <ITask> HttpPostHandler(HttpPost httpPost) { // Use helper to read form data ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); // Wait for result Activate(Arbiter.Choice(readForm.ResultPort, delegate(NameValueCollection parameters) { if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ChrUm6OrientationSensorConfig" ) { if (parameters["buttonOk"] == "Search") { FindChrConfig findConfig = new FindChrConfig(); _mainPort.Post(findConfig); Activate( Arbiter.Choice( Arbiter.Receive <ChrUm6OrientationSensorConfig>(false, findConfig.ResponsePort, delegate(ChrUm6OrientationSensorConfig response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, findConfig.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Connect") { ChrUm6OrientationSensorConfig config = (ChrUm6OrientationSensorConfig)_state.ChrUm6OrientationSensorConfig.Clone(); int port; if (int.TryParse(parameters["CommPort"], out port) && port >= 0) { config.CommPort = port; config.PortName = "COM" + port.ToString(); } int baud; if (int.TryParse(parameters["BaudRate"], out baud) && ChrConnection.ValidBaudRate(baud)) { config.BaudRate = baud; } Configure configure = new Configure(config); _mainPort.Post(configure); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, configure.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, configure.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Refresh Data") { HttpPostSuccess(httpPost); } else if (parameters["buttonOk"] == "Set Accelerometer Reference Vector") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "SetAccelRefVector" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Set Magnetometer Reference Vector") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "SetMagnRefVector" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } else if (parameters["buttonOk"] == "Zero Rate Gyros") { ChrUm6OrientationSensorCommand cmd = new ChrUm6OrientationSensorCommand() { Command = "ZeroRateGyros" }; SendChrUm6OrientationSensorCommand sCmd = new SendChrUm6OrientationSensorCommand(cmd); _mainPort.Post(sCmd); Activate( Arbiter.Choice( Arbiter.Receive <DefaultUpdateResponseType>(false, sCmd.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive <Fault>(false, sCmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f); }) ) ); } } else { HttpPostFailure(httpPost, null); } }, delegate(Exception Failure) { LogError(Failure.Message); }) ); yield break; }
public IEnumerator <ITask> HttpPostHandler(HttpPost httpPost) { ReadFormData readForm = new ReadFormData(httpPost); _utilities.Post(readForm); PortSet <NameValueCollection, Exception> readFormResponsePort = readForm.ResultPort; yield return((Choice)readFormResponsePort); Exception exception = (Exception)readFormResponsePort; if (exception != null) { LogError(exception); httpPost.ResponsePort.Post(Fault.FromException(exception)); yield break; } NameValueCollection collection = (NameValueCollection)readFormResponsePort; string voice = collection["Voice"]; string rate = collection["Rate"]; string volume = collection["Volume"]; string speechText = collection["SpeechText"]; PortSet <DefaultUpdateResponseType, Fault> responsePort = null; if (!string.IsNullOrEmpty(voice)) { SetVoice setVoice = new SetVoice(new SetVoiceRequest(voice)); SpawnIterator(setVoice, SetVoiceHandler); responsePort = setVoice.ResponsePort; } else if (!string.IsNullOrEmpty(rate)) { int rateInt; if (int.TryParse(rate, out rateInt)) { SetRate setRate = new SetRate(); setRate.Body.Rate = rateInt; SpawnIterator(setRate, SetRateHandler); responsePort = setRate.ResponsePort; } } else if (!string.IsNullOrEmpty(volume)) { int volumeInt; if (int.TryParse(volume, out volumeInt)) { SetVolume setVolume = new SetVolume(); setVolume.Body.Volume = volumeInt; SpawnIterator(setVolume, SetVolumeHandler); responsePort = setVolume.ResponsePort; } } else if (!string.IsNullOrEmpty(speechText)) { SayText sayText = new SayText(new SayTextRequest(speechText)); SpawnIterator(sayText, SayTextHandler); responsePort = sayText.ResponsePort; } if (responsePort != null) { yield return((Choice)responsePort); Fault fault = (Fault)responsePort; if (fault != null) { LogError("Unable to perform post operation", fault); httpPost.ResponsePort.Post(fault); yield break; } } httpPost.ResponsePort.Post(new HttpResponseType( HttpStatusCode.OK, _state, base.StateTransformPath // Use the transform declared on the State )); yield break; }
public IEnumerator <ITask> HttpPostHandler(HttpPost post) { Fault fault = null; NameValueCollection collection = null; ReadFormData readForm = new ReadFormData(post); _utilitiesPort.Post(readForm); yield return(Arbiter.Choice( readForm.ResultPort, delegate(NameValueCollection col) { collection = col; }, delegate(Exception e) { fault = Fault.FromException(e); LogError(null, "Error processing form data", fault); } )); if (fault != null) { post.ResponsePort.Post(fault); yield break; } if (!string.IsNullOrEmpty(collection["ChangeCamera"])) { string device = string.Empty; try { device = collection["Camera"]; } catch (Exception e) { fault = Fault.FromException(e); LogError(null, "Error reading form data", fault); } if (fault != null) { post.ResponsePort.Post(fault); yield break; } UpdateDeviceRequest request = new UpdateDeviceRequest(); request.Selected.DevicePath = device; UpdateDevice update = new UpdateDevice(); update.Body = request; SpawnIterator(update, UpdateDeviceHandler); yield return(Arbiter.Choice( update.ResponsePort, delegate(DefaultUpdateResponseType success) { SaveState(_state); }, delegate(Fault f) { fault = f; LogError(null, "Unable to change camera", fault); } )); } else if (!string.IsNullOrEmpty(collection["ChangeFormat"])) { int formatIndex = 0; Format format = null; try { formatIndex = int.Parse(collection["CaptureFormat"]); format = _state.Selected.SupportedFormats[formatIndex - 1]; } catch (Exception e) { fault = Fault.FromException(e); LogError(null, "Error parsing form data", fault); } if (fault != null) { post.ResponsePort.Post(fault); yield break; } UpdateFormat update = new UpdateFormat(); update.Body = format; SpawnIterator(update, UpdateFormatHandler); yield return(Arbiter.Choice( update.ResponsePort, delegate(DefaultUpdateResponseType success) { SaveState(_state); }, delegate(Fault f) { fault = f; LogError(null, "Unable to change format", fault); } )); } if (fault != null) { post.ResponsePort.Post(fault); yield break; } post.ResponsePort.Post(new HttpResponseType(HttpStatusCode.OK, _state, _transform)); yield break; }
public IEnumerator <ITask> OnHttpPost(HttpPost httpPost) { HttpListenerContext context = httpPost.Body.Context; NameValueCollection parameters = null; Fault fault = null; try { ReadFormData readForm = new ReadFormData(httpPost); _utilitiesPort.Post(readForm); yield return(Arbiter.Choice( readForm.ResultPort, delegate(NameValueCollection success) { parameters = success; }, delegate(Exception e) { LogError("Error reading form data", e); fault = Fault.FromException(e); } )); if (fault != null) { yield break; } string name = string.Empty; string deleteName = null; string expandName = null; int left = 0; int top = 0; int width = 0; int height = 0; int deleteY = 0; int deleteCb = 0; int deleteCr = 0; double threshold = 1.0; int minBlobSize = 0; bool showPartial = false; bool despeckle = false; bool updateSettings = false; bool save = false; foreach (string key in parameters.Keys) { if (key.StartsWith("Delete.")) { string[] segments = key.Split('.'); deleteName = segments[1]; deleteY = int.Parse(segments[2]); deleteCb = int.Parse(segments[3]); deleteCr = int.Parse(segments[4]); } else if (key.StartsWith("ExpandY.")) { string[] segments = key.Split('.'); expandName = segments[1]; deleteY = int.Parse(segments[2]); deleteCb = int.Parse(segments[3]); deleteCr = int.Parse(segments[4]); } else { switch (key) { case "Save": save = true; break; case "Threshold": threshold = double.Parse(parameters[key]); break; case "ShowPartial": showPartial = parameters[key] == "on"; break; case "Despeckle": despeckle = parameters[key] == "on"; break; case "UpdateSettings": updateSettings = true; break; case "MinBlobSize": minBlobSize = int.Parse(parameters[key]); break; case "New.Left": left = int.Parse(parameters[key]); break; case "New.Top": top = int.Parse(parameters[key]); break; case "New.Width": width = int.Parse(parameters[key]); break; case "New.Height": height = int.Parse(parameters[key]); break; case "New.Name": name = parameters[key].Trim(); break; default: break; } } } if (save) { yield return(Arbiter.Choice( SaveState(_state.SmallCopy), EmptyHandler, EmptyHandler )); } else if (!string.IsNullOrEmpty(deleteName)) { ColorDefinition definition = new ColorDefinition(deleteName, deleteY, deleteCb, deleteCr); RemoveColorDefinition remove = new RemoveColorDefinition(definition); OnRemoveColorDefinition(remove); } else if (!string.IsNullOrEmpty(expandName)) { ColorDefinition definition = new ColorDefinition(expandName, deleteY, deleteCb, deleteCr); ColorSet set = _state.Colors.Find(definition.Compare); if (set != null) { ColorDefinition existing = set.Colors.Find(definition.CompareColor); definition.SigmaCb = existing.SigmaCb; definition.SigmaCr = existing.SigmaCr; if (existing.SigmaY < 1) { definition.SigmaY = 2; } else { definition.SigmaY = 3 * existing.SigmaY / 2; } } UpdateColorDefinition update = new UpdateColorDefinition(definition); OnUpdateColorDefinition(update); } else if (updateSettings) { UpdateSettings update = new UpdateSettings( new Settings( threshold, showPartial, despeckle, minBlobSize ) ); OnUpdateSettings(update); } else { webcam.QueryFrameResponse response = null; yield return(Arbiter.Choice( _webcamPort.QueryFrame(), delegate(webcam.QueryFrameResponse success) { response = success; }, delegate(Fault failure) { LogError("Unable to query frame for update", failure); } )); if (response == null) { yield break; } int right = left + width; int bottom = top + height; byte[] data = response.Frame; int stride = data.Length / response.Size.Height; int rowOffset = left * 3; int offset; int r, g, b; int[] yProjection = new int[256]; int[] cbProjection = new int[256]; int[] crProjection = new int[256]; int count = 0; double yMean = 0; double cbMean = 0; double crMean = 0; for (int y = top; y < bottom; y++) { offset = rowOffset + y * stride; for (int x = left; x < right; x++) { b = data[offset++]; g = data[offset++]; r = data[offset++]; ColorDefinition pixel = new ColorDefinition(r, g, b, "pixel"); yProjection[pixel.Y]++; cbProjection[pixel.Cb]++; crProjection[pixel.Cr]++; count++; yMean += pixel.Y; cbMean += pixel.Cb; crMean += pixel.Cr; } } if (count <= 16) { LogError("The area was too small to generalize a color"); yield break; } yMean /= count; cbMean /= count; crMean /= count; double ySigma = CalculateStdDev(yMean, yProjection, count); double cbSigma = CalculateStdDev(cbMean, cbProjection, count); double crSigma = CalculateStdDev(crMean, crProjection, count); ColorDefinition definition = new ColorDefinition( name, (int)Math.Round(yMean), (int)Math.Round(cbMean), (int)Math.Round(crMean) ); definition.SigmaY = (int)Math.Max(1, Math.Round(2 * ySigma)); definition.SigmaCb = (int)Math.Max(1, Math.Round(2 * cbSigma)); definition.SigmaCr = (int)Math.Max(1, Math.Round(2 * crSigma)); if (!string.IsNullOrEmpty(expandName)) { definition.Name = expandName; UpdateColorDefinition update = new UpdateColorDefinition(definition); OnUpdateColorDefinition(update); } else { AddColorDefinition add = new AddColorDefinition(definition); OnAddColorDefinition(add); } } } finally { httpPost.ResponsePort.Post(new HttpResponseType(HttpStatusCode.OK, _state.SmallCopy, _transform)); } }
public IEnumerator <ITask> OnHttpPost(HttpPost post) { Fault fault = null; NameValueCollection parameters = null; ReadFormData readForm = new ReadFormData(post); _utilities.Post(readForm); yield return(Arbiter.Choice( readForm.ResultPort, delegate(NameValueCollection success) { parameters = success; }, delegate(Exception e) { fault = Fault.FromException(e); } )); string operation = parameters["Operation"]; if (operation == "UpdateControl") { UpdateControl message = new UpdateControl(); FlexControl update = message.Body; update.Id = parameters["ID"]; update.Value = parameters["Value"]; update.Text = parameters["Text"]; FlexControl control = _state.Controls.Find(update.CompareId); if (control == null) { post.ResponsePort.Post(Fault.FromCodeSubcodeReason( FaultCodes.Receiver, DsspFaultCodes.UnknownEntry, "Cannot find control with ID: " + update.Id )); yield break; } update.ControlType = control.ControlType; yield return(Arbiter.ExecuteToCompletion( TaskQueue, new IterativeTask <UpdateControl>(message, OnUpdateControl) )); post.ResponsePort.Post(new HttpResponseType(DefaultUpdateResponseType.Instance)); } else if (operation == "ButtonPress") { ButtonPress message = new ButtonPress(); ButtonPressRequest request = message.Body; request.Id = parameters["ID"]; request.Pressed = bool.Parse(parameters["Pressed"]); OnButtonPress(message); post.ResponsePort.Post(new HttpResponseType(DefaultUpdateResponseType.Instance)); } else { fault = Fault.FromCodeSubcodeReason( FaultCodes.Receiver, DsspFaultCodes.MessageNotSupported, "Unknown operation: " + operation ); } if (fault != null) { post.ResponsePort.Post(fault); yield break; } }
/// <summary> /// Http Post Handler. Handles http form inputs /// </summary> //[ServiceHandler(ServiceHandlerBehavior.Concurrent)] public IEnumerator<ITask> HttpPostHandler(HttpPost httpPost) { // Use helper to read form data ReadFormData readForm = new ReadFormData(httpPost); _httpUtilities.Post(readForm); // Read form data NameValueCollection parameters = null; yield return Arbiter.Choice(readForm.ResultPort, delegate(NameValueCollection p) { parameters = p; }, delegate(Exception e) { throw new Exception("Error reading form data", e); }); // Act on form data if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerConfig") { if (parameters["buttonOk"] == "Change" && _state.Connected) { SetNameBody newname = new SetNameBody(parameters["Name"]); SetName newnamemessage = new SetName(newname); _mainPort.PostUnknownType(newnamemessage); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, newnamemessage.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, newnamemessage.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } else if (parameters["buttonOk"] == "Connect" && _state.Connected) { //close down this connection to make a new connection below PollTimer.Close(); System.Threading.Thread.Sleep(100); _scribblerCom.Close(); _state.Connected = false; //HttpPostSuccess(httpPost); } if (parameters["buttonOk"] == "Connect" && !_state.Connected) { int port = 0; int.TryParse(parameters["ComPort"], out port); string name = parameters["Name"]; if (!string.IsNullOrEmpty(name) && name.Length > 8) name = name.Substring(0, 8); _state.ComPort = port; _state.RobotName = name; //open Scribbler Communications port LogInfo("connecting to scribbler..."); Reconnect rec = new Reconnect(); _mainPort.PostUnknownType(rec); yield return Arbiter.Choice(rec.ResponsePort, delegate(DefaultUpdateResponseType r) { LogInfo("connected, sending http reply"); HttpPostSuccess(httpPost); LogInfo("http reply sent"); }, delegate(Fault f) { httpPost.ResponsePort.Post(f); }); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerSensors") { if (parameters["buttonOk"] == "Poll" && _state.Connected) { ScribblerCommand cmd = new ScribblerCommand(ScribblerHelper.Commands.GET_ALL); SendScribblerCommand sendcmd = new SendScribblerCommand(cmd); _scribblerComPort.Post(sendcmd); Activate( Arbiter.Choice( Arbiter.Receive<ScribblerResponse>(false, sendcmd.ResponsePort, delegate(ScribblerResponse response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, sendcmd.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerMotors") { if (parameters["buttonOk"] == "Set" && _state.Connected) { int left = _state.MotorLeft; int right = _state.MotorRight; int.TryParse(parameters["LeftMotor"], out left); int.TryParse(parameters["RightMotor"], out right); SetMotorsBody setMotorsBody = new SetMotorsBody(left, right); SetMotors setMotorsRequest = new SetMotors(setMotorsBody); _mainPort.PostUnknownType(setMotorsRequest); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, setMotorsRequest.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } else if (parameters["buttonOk"] == "All Stop" && _state.Connected) { SetMotorsBody setMotorsBody = new SetMotorsBody(100, 100); SetMotors setMotorsRequest = new SetMotors(setMotorsBody); _mainPort.PostUnknownType(setMotorsRequest); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, setMotorsRequest.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerLEDs") { if (parameters["buttonOk"] == "Set" && _state.Connected) { bool left = ((parameters["LeftLED"] ?? "off") == "on"); bool center = ((parameters["CenterLED"] ?? "off") == "on"); bool right = ((parameters["RightLED"] ?? "off") == "on"); SetAllLedsBody leds = new SetAllLedsBody(left, center, right); SetAllLEDs setAllLeds = new SetAllLEDs(leds); _mainPort.PostUnknownType(setAllLeds); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, setAllLeds.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, setAllLeds.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else if (!string.IsNullOrEmpty(parameters["Action"]) && parameters["Action"] == "ScribblerSpeaker") { if (parameters["buttonOk"] == "Play" && _state.Connected) { int tone1 = 0; int tone2 = 0; int duration = 0; int.TryParse(parameters["Tone1"], out tone1); int.TryParse(parameters["Tone2"], out tone2); int.TryParse(parameters["Duration"], out duration); PlayToneBody playTone = new PlayToneBody(duration, tone1, tone2); PlayTone playToneMessage = new PlayTone(playTone); _mainPort.PostUnknownType(playToneMessage); Activate( Arbiter.Choice( Arbiter.Receive<DefaultUpdateResponseType>(false, playToneMessage.ResponsePort, delegate(DefaultUpdateResponseType response) { HttpPostSuccess(httpPost); }), Arbiter.Receive<Fault>(false, playToneMessage.ResponsePort, delegate(Fault f) { HttpPostFailure(httpPost, f.Reason[0].Value); }) ) ); } } else { HttpPostFailure(httpPost, "Unknown Http Post"); } yield break; }