protected override void OnClose(CloseEventArgs e) { //base.OnClose(e); Logger.Debug($"WS client disconnected: {e.Code} {e.Reason}"); Logger.Warning("Client \"" + _clientName + "\" disconnected..."); _parent._connectedClients.Remove(_clientName); //_parent.UpdateClientBox(); _parent.uiContext.Post(x => { _parent.UpdateClientBox(); }, null); _parent.wssv.WebSocketServices.Broadcast($"{{\"event\":\"client-disconnected\",\"user\":\"clientname\"}}"); }
public bool ExecuteInstruction(string instruction) { string[] args = Machina.Utilities.Parsing.ParseStatement(instruction); if (args == null || args.Length == 0) { Machina.Logger.Error($"I don't understand \"{instruction}\"..."); return(false); } // This is horrible, but oh well... if (args[0].Equals("MotionMode", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.MotionMode(args[1])); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Speed", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Speed(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("SpeedTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.SpeedTo(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Acceleration", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Acceleration(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("AccelerationTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.AccelerationTo(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Precision", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Precision(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("PrecisionTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.PrecisionTo(Convert.ToDouble(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Coordinates", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is still not implemented."); return(false); } else if (args[0].Equals("Temperature", StringComparison.CurrentCultureIgnoreCase) || args[0].Equals("TemperatureTo", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is still not implemented."); return(false); } else if (args[0].Equals("ExtrusionRate", StringComparison.CurrentCultureIgnoreCase) || args[0].Equals("ExtrusionRateTo", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is still not implemented."); return(false); } else if (args[0].Equals("PushSettings", StringComparison.CurrentCultureIgnoreCase)) { bot.PushSettings(); return(true); } else if (args[0].Equals("PopSettings", StringComparison.CurrentCultureIgnoreCase)) { bot.PopSettings(); return(true); } else if (args[0].Equals("Move", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Move(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("MoveTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.MoveTo(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Rotate", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Rotate(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("RotateTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.RotateTo(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToDouble(args[6]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Transform", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is still not implemented."); return(false); } else if (args[0].Equals("TransformTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.TransformTo(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToDouble(args[6]), Convert.ToDouble(args[7]), Convert.ToDouble(args[8]), Convert.ToDouble(args[9]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Axes", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Axes(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToDouble(args[6]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("AxesTo", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.AxesTo(Convert.ToDouble(args[1]), Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToDouble(args[6]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("ExternalAxis", StringComparison.CurrentCultureIgnoreCase)) { try { int axisNumber; double increment; if (!Int32.TryParse(args[1], out axisNumber) || axisNumber < 1 || axisNumber > 6) { Logger.Error($"Invalid axis number"); return(false); } if (!Double.TryParse(args[2], out increment)) { Logger.Error($"Invalid increment value"); return(false); } string target = "All"; if (args.Length > 3) { target = args[3]; } return(bot.ExternalAxis(axisNumber, increment, target)); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("ExternalAxisTo", StringComparison.CurrentCultureIgnoreCase)) { try { int axisNumber; double val; if (!Int32.TryParse(args[1], out axisNumber) || axisNumber < 1 || axisNumber > 6) { Logger.Error($"Invalid axis number"); return(false); } if (!Double.TryParse(args[2], out val)) { Logger.Error($"Invalid value " + args[2]); return(false); } string target = "All"; if (args.Length > 3) { target = args[3]; } return(bot.ExternalAxisTo(axisNumber, val, target)); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("ArmAngle", StringComparison.CurrentCultureIgnoreCase)) { Logger.Warning( "Relative `ArmAngle` is temporarily disabled, please use the absolute `ArmAngleTo` version instead."); //try //{ // double val; // if (!Double.TryParse(args[1], out val)) // { // Console.WriteLine($"ERROR: Invalid value " + args[1]); // return false; // } // return bot.ArmAngle(val); //} //catch (Exception ex) //{ // BadFormatInstruction(instruction, ex); // return false; //} } else if (args[0].Equals("ArmAngleTo", StringComparison.CurrentCultureIgnoreCase)) { try { double val; if (!Double.TryParse(args[1], out val)) { Logger.Error($"Invalid value " + args[1]); return(false); } return(bot.ArmAngleTo(val)); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Wait", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Wait(Convert.ToInt32(args[1]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Message", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.Message(args[1])); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Comment", StringComparison.CurrentCultureIgnoreCase)) { // Do noLightg here, just go through with it. return(true); } else if (args[0].Equals("CustomCode", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Warning("\"CustomCode\" can lead to unexpected results, use with caution and only if you know what you are doing."); try { string statement = args[1]; bool dec = false; if (args.Length > 2) { dec = bool.Parse(args[2]); // if not good, throw and explain } return(bot.CustomCode(statement, dec)); } catch (Exception ex) { BadFormatInstruction(instruction, ex); } return(false); } else if (args[0].Equals("new Tool", StringComparison.CurrentCultureIgnoreCase) || args[0].Equals("Tool.Create", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is deprecated, please update your client and use \"DefineTool\" instead. Action will have no effect."); return(false); } else if (args[0].Equals("DefineTool", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.DefineTool(args[1], Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToDouble(args[6]), Convert.ToDouble(args[7]), Convert.ToDouble(args[8]), Convert.ToDouble(args[9]), Convert.ToDouble(args[10]), Convert.ToDouble(args[11]), Convert.ToDouble(args[12]), Convert.ToDouble(args[13]), Convert.ToDouble(args[14]))); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Attach", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Error($"\"{args[0]}\" is deprecated, please update your client and use \"AttachTool\" instead. Action will have no effect."); return(false); } else if (args[0].Equals("AttachTool", StringComparison.CurrentCultureIgnoreCase)) { try { return(bot.AttachTool(args[1])); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Detach", StringComparison.CurrentCultureIgnoreCase)) { bot.Logger.Warning($"\"{args[0]}\" is deprecated, please update your client and use \"DetachTool\" instead."); return(bot.DetachTool()); } else if (args[0].Equals("DetachTool", StringComparison.CurrentCultureIgnoreCase)) { return(bot.DetachTool()); } else if (args[0].Equals("WriteDigital", StringComparison.CurrentCultureIgnoreCase)) { try { int count = args.Length; int pin = 0; bool digitalPin = Int32.TryParse(args[1], out pin); // Numeric pins if (digitalPin) { switch (count) { case 3: return(bot.WriteDigital(pin, Convert.ToBoolean(args[2]))); case 4: return(bot.WriteDigital(pin, Convert.ToBoolean(args[2]), Convert.ToBoolean(args[3]))); } } // Named pins (ABB) else { switch (count) { case 3: return(bot.WriteDigital(args[1], Convert.ToBoolean(args[2]))); case 4: return(bot.WriteDigital(args[1], Convert.ToBoolean(args[2]), Convert.ToBoolean(args[3]))); } } // If here, something went wrong... Machina.Logger.Error($"Badly formatted instruction: \"{instruction}\""); return(false); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("WriteAnalog", StringComparison.CurrentCultureIgnoreCase)) { try { int count = args.Length; int pin = 0; bool digitalPin = Int32.TryParse(args[1], out pin); if (digitalPin) { switch (count) { case 3: return(bot.WriteAnalog(pin, Convert.ToDouble(args[2]))); case 4: return(bot.WriteAnalog(pin, Convert.ToDouble(args[2]), Convert.ToBoolean(args[3]))); } } else { switch (count) { case 3: return(bot.WriteAnalog(args[1], Convert.ToDouble(args[2]))); case 4: return(bot.WriteAnalog(args[1], Convert.ToDouble(args[2]), Convert.ToBoolean(args[3]))); } } // If here, something went wrong... Machina.Logger.Error($"Badly formatted instruction: \"{instruction}\""); return(false); } catch (Exception ex) { BadFormatInstruction(instruction, ex); return(false); } } else if (args[0].Equals("Extrude", StringComparison.CurrentCultureIgnoreCase)) { return(bot.Extrude()); } // If here, instruction is not available or something went wrong... Machina.Logger.Error($"I don't understand \"{instruction}\"..."); return(false); }