public JsonRpcProxyGenerator(MessageBroker messageBroker)
     : base(messageBroker)
 {
     _generators = new Hashtable();
     _generators.Add("default", new DefaultJsonRpcProxyGenerator());
     try
     {
         JsonRpcGeneratorCollection generatorSettings = FluorineConfiguration.Instance.FluorineSettings.JSonSettings.JsonRpcGenerators;
         for (int i = 0; i < generatorSettings.Count; i++)
         {
             JsonRpcGenerator       generatorSetting = generatorSettings[i];
             IJsonRpcProxyGenerator generator        = ObjectFactory.CreateInstance(generatorSetting.Type) as IJsonRpcProxyGenerator;
             if (generator != null)
             {
                 _generators.Add(generatorSetting.Name, generator);
             }
             else
             {
                 if (log.IsErrorEnabled)
                 {
                     log.Error(string.Format("JsonRpcGenerator {0} was not found", generatorSetting.Name));
                 }
             }
         }
     }
     catch (Exception ex)
     {
         log.Fatal("Creating JsonRpcProxyGenerator failed", ex);
     }
 }
 public JsonRpcProxyGenerator(MessageBroker messageBroker) : base(messageBroker)
 {
     this._lastModifiedTime = DateTime.MinValue;
     this._generators       = new Hashtable();
     this._generators.Add("default", new DefaultJsonRpcProxyGenerator());
     try
     {
         JsonRpcGeneratorCollection jsonRpcGenerators = FluorineConfiguration.Instance.FluorineSettings.JSonSettings.JsonRpcGenerators;
         for (int i = 0; i < jsonRpcGenerators.Count; i++)
         {
             JsonRpcGenerator       generator  = jsonRpcGenerators[i];
             IJsonRpcProxyGenerator generator2 = ObjectFactory.CreateInstance(generator.Type) as IJsonRpcProxyGenerator;
             if (generator2 != null)
             {
                 this._generators.Add(generator.Name, generator2);
             }
             else if (log.get_IsErrorEnabled())
             {
                 log.Error(string.Format("JsonRpcGenerator {0} was not found", generator.Name));
             }
         }
     }
     catch (Exception exception)
     {
         log.Fatal("Creating JsonRpcProxyGenerator failed", exception);
     }
 }
        protected override void ProcessRequest()
        {
            Destination destination = null;
            string      source      = this.Request.QueryString["source"];

            if (!StringUtils.IsNullOrEmpty(source))
            {
                string destinationId = this.MessageBroker.GetDestinationId(source);
                destination = this.MessageBroker.GetDestination(destinationId);
            }
            else
            {
                string destinationId = this.Request.QueryString["destination"];
                if (!StringUtils.IsNullOrEmpty(destinationId))
                {
                    destination = this.MessageBroker.GetDestination(destinationId);
                    source      = destination.Source;
                }
            }
            Type            type;
            FactoryInstance factoryInstance = destination.GetFactoryInstance();

            lock (factoryInstance)
            {
                factoryInstance.Source = source;
                type = factoryInstance.GetInstanceClass();
            }
            if (type != null)
            {
                ServiceClass serviceClass = JsonRpcServiceReflector.FromType(type);
                UpdateLastModifiedTime(type);
                if (!Modified())
                {
                    this.Response.StatusCode = 304;
                    return;
                }

                if (_lastModifiedTime != DateTime.MinValue)
                {
                    this.Response.Cache.SetCacheability(HttpCacheability.Public);
                    this.Response.Cache.SetLastModified(_lastModifiedTime);
                }

                Response.ContentType = "text/javascript";

                string clientFileName = serviceClass.Name + "Proxy.js";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + clientFileName);
                //WriteProxy(serviceClass, new IndentedTextWriter(Response.Output));

                string generatorName = "default";
                if (!StringUtils.IsNullOrEmpty(this.Request.QueryString["generator"]))
                {
                    generatorName = this.Request.QueryString["generator"];
                }
                if (_generators.Contains(generatorName))
                {
                    IJsonRpcProxyGenerator generator = _generators[generatorName] as IJsonRpcProxyGenerator;
                    generator.WriteProxy(serviceClass, new IndentedTextWriter(Response.Output), this.Request);
                }
                else
                {
                    if (log.IsErrorEnabled)
                    {
                        log.Error(string.Format("JsonRpcGenerator {0} was not found", generatorName));
                    }
                }
            }
        }