Beispiel #1
0
        private void Gateway_PreProcessRequest(object sender, ProcessRequestEventArgs args)
        {
            var request = args.Request;

            // Route event
            OnPreProcessRequest(sender, request);

            if (request.Handled)
            {
                return;
            }

            var command = request.Command;

            if (command.Domain == "MIGService.Interfaces")
            {
                // This is a MIGService namespace Web API
                switch (command.Command)
                {
                case "IsEnabled.Set":
                    if (command.GetOption(0) == "1")
                    {
                        if (EnableInterface(command.Address) != null)
                        {
                            request.ResponseData = new ResponseStatus(Status.Ok, String.Format("Interface {0} enabled", command.Address));
                        }
                        else
                        {
                            request.ResponseData = new ResponseStatus(Status.Error, String.Format("Interface {0} not found", command.Address));
                        }
                    }
                    else
                    {
                        if (DisableInterface(command.Address) != null)
                        {
                            request.ResponseData = new ResponseStatus(Status.Ok, String.Format("Interface {0} disabled", command.Address));
                        }
                        else
                        {
                            request.ResponseData = new ResponseStatus(Status.Error, String.Format("Interface {0} not found", command.Address));
                        }
                    }
                    OnInterfacePropertyChanged(sender, new InterfacePropertyChangedEventArgs("MIGService.Interfaces", command.Address, "MIG Interface", "Status.IsEnabled", command.GetOption(0)));
                    break;

                case "IsEnabled.Get":
                    request.ResponseData = new ResponseText(configuration.GetInterface(command.Address).IsEnabled ? "1" : "0");
                    break;

                case "Options.Set":
                {
                    var iface = GetInterface(command.Address);
                    if (iface != null)
                    {
                        iface.SetOption(command.GetOption(0), command.GetOption(1));
                        request.ResponseData = new ResponseStatus(Status.Ok, String.Format("{0} option '{1}' set to '{2}'", command.Address, command.GetOption(0), command.GetOption(1)));
                    }
                    else
                    {
                        request.ResponseData = new ResponseStatus(Status.Error, String.Format("Interface {0} not found", command.Address));
                    }
                }
                    OnInterfacePropertyChanged(sender, new InterfacePropertyChangedEventArgs("MIGService.Interfaces", command.Address, "MIG Interface", "Options." + command.GetOption(0), command.GetOption(1)));
                    break;

                case "Options.Get":
                {
                    var iface = GetInterface(command.Address);
                    if (iface != null)
                    {
                        string optionValue = iface.GetOption(command.GetOption(0)).Value;
                        request.ResponseData = new ResponseText(optionValue);
                    }
                    else
                    {
                        request.ResponseData = new ResponseStatus(Status.Error, String.Format("Interface {0} not found", command.Address));
                    }
                }
                break;

                default:
                    break;
                }
            }
            else
            {
                // Try processing as MigInterface Api or Web Service Dynamic Api
                var iface = (from miginterface in Interfaces
                             let ns = miginterface.GetType().Namespace
                                      let domain = ns.Substring(ns.LastIndexOf(".") + 1) + "." + miginterface.GetType().Name
                                                   where (command.Domain != null && command.Domain.StartsWith(domain))
                                                   select miginterface).FirstOrDefault();
                if (iface != null) // && iface.IsEnabled)
                {
                    //if (iface.IsConnected)
                    //{
                    try
                    {
                        request.ResponseData = iface.InterfaceControl(command);
                    }
                    catch (Exception ex)
                    {
                        request.ResponseData = new ResponseStatus(Status.Error, MigService.JsonSerialize(ex));
                    }
                    //}
                    //else
                    //{
                    //    request.ResponseData = new ResponseStatus(Status.Error, String.Format("Interface '{0}' not connected", iface.GetDomain()));
                    //}
                }
                // Try processing as Dynamic API
                if ((request.ResponseData == null || request.ResponseData.Equals(String.Empty)))
                {
                    request.ResponseData = TryDynamicApi(request);
                }
            }
        }