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\"}}");
        }
Esempio n. 2
0
        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);
        }